文章僅供學習使用
djnago2 Gunicorn nginx 在ubuntu環境下部署 python3
準備 一個可以執行的django專案
一個可以訪問的公網IP (可以有域名,但是國內的需要註冊 或者繞開80埠用443埠 這個還沒有試過)
xshell軟體 連線自己的伺服器主機 比那個網頁的舒服多了
進入伺服器
建立使用者
在 root 使用者下執行這條命令建立一個新使用者,hzj 是使用者名稱 因為我叫hzj,所以我取的使用者名稱是 hzj
選擇一個你喜歡的使用者名稱,不一定非得和我的相同
root@localhost:~# useradd -m -s /bin/bash hzj
把新建立的使用者加入超級許可權組
root@localhost:~# usermod -a -G sudo hzj
為新使用者設定密碼 注意在輸密碼的時候不會有字元顯示,不要以為鍵盤壞了,正常輸入即可
root@localhost:~# passwd hzj
切換到建立的新使用者
root@localhost:~# su - hzj
切換成功,@符號前面已經是新使用者名稱而不是 root 了
hzj@localhost:~$
如果有些命令無法實現,可能是許可權不足 可以加一個sudo
2.安裝python3和pip3 因為ubuntu預設python2 我們所使用的環境是python3
sudo apt-get install git python3 python3-pip
安裝 虛擬環境 virtualenv
sudo pip3 install virtualenv
3.專案配置 這裡的資料夾目錄 我儘量和django2.0官方文件的資料夾目錄一致
mysite/settings.py
STATIC_URL = '/static/' 加入下面的配置 STATIC_ROOT = os.path.join(BASE_DIR, 'static') #指明瞭靜態檔案的收集目錄,即專案根目錄(BASE_DIR)下的 static 資料夾。
mysite/settings.py
DEBUG = False#建議一開始還是預設為True 等你部署成功後,再去把他改成True 如果你的程式出錯,訪問的時候會出現500內部伺服器的問題,而在debug下你可以清除的看到這些問題的原因,
ALLOWED_HOSTS = ['*'] #允許訪問的域名列表 *表示所有都可訪問
mysite>pip freeze > plist.txt #這裡我們將該專案的環境全部列在plist.txt檔案下方便我們之後搭建環境 注意我的django2.0使用pip安裝的,如果你使用的像Anconda之類的第三方軟體,那麼無法在Ubuntu下自動安裝
$ vim settings.py ALLOWED_HOSTS = [''] # 可以配置為你的域名或者公網IP,寫是匹配全部都可以 ··· THEME = 'themes/default' STATIC_URL = '/static/' STATIC_ROOT = '../static_files/' ···
4.移動專案到ubuntu
我們使用git 通過github上傳和下載
cd mysite
git init
git add .
git commit -m "zhushi"
git remote add origin https://github.com/Alpaca-H/DjangoTest3.git
git push -u origin master
複製程式碼
5.ubuntu環境搭建
source env/bin/activate
pip install -r plist.txt
python manage.py collectstatic 收集靜態檔案
python manage.py migrate 建立資料庫檔案
pip install gunicorn 下載gunicorn
$ gunicorn mysite.wsgi:application -w 4 -b 0.0.0.0:8000啟動專案
$ gunicorn mysite.wsgi:application -b 0.0.0.0:8000
$ nohup gunicorn mysite.wsgi:application -w 4 -b 0.0.0.0:8000 & 後臺一直跑
複製程式碼
6.nginx
$ sudo yum install nginx
$ cd /etc/nginx
$ sudo cat nginx.conf
複製程式碼
這個時候我們就能看到在配置中有這樣的一句話,
include /etc/nginx/conf.d/*.conf; 這個意思是他啟動的時候會去讀取conf.d下的配置檔案,也就是我們可以在這個 /etc/nginx/con.d目錄下去寫配置檔案,操作如下
$ cd /etc/nginx/conf.d
$ sudo touch nginx.conf
$ sudo vim nginx.conf
複製程式碼
配置檔案的內容如下:
/etc/nginx/conf.d/nginx.conf
server {
listen 80;
root /home/hzj/workspace/typeidea-env/; #配置虛擬環境的目錄
access_log /home/hzj/workspace/typeidea/log/access_log; #配置這個log資料夾
error_log /home/hzj/workspace/typeidea/log/error_log; #配置這個log資料夾
server_name www.hzj.top; # 配置域名
#處理靜態檔案 /favicon.ico:
location /favicon.ico {
alias /home/hzj/typeidea/static_files/favicon.ico; # 如果沒,不用配置
}
#處理django的靜態檔案
location /static/ {
alias /home/hzj/typeidea/static_files/; # 收集靜態資源的路徑
}
#處理請求轉發8000介面 如果你的gunicorn是其他埠,請自己改
location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
複製程式碼
這樣我們的nginx配置檔案就能寫完了,但是如果你重啟的話,會發現一個問題,那就是許可權,你會發現你啟動的檔案,於你的配置檔案許可權不一樣,這會導致你無法啟動,或者是其他問題,我們返回之前的/etc/nginx的目錄之下,把下面的使用者名稱改為自己的使用者名稱字,就可以了:
/etc/nginx/nginx.conf
···
user hzj
···
複製程式碼
當然寫完nginx的時候我們可以進入到自己寫的配置路徑下面,執行nginx -t看下所執行的狀態,或者第幾行發生到錯誤。然後我們就可以啟動nginx,在瀏覽器輸入自己的IP或者域名就成功
ps:1.如果發現啟動還是無法訪問,首先檢查一下防火牆,防火牆要開80埠,不會開可以看這編Linux上防火牆的設定
2.去自己的伺服器廠家的控制檯,檢視自己是否放通了安全組,一般要放通80,如果要除錯可以順便把8000埠也放通,當然取決於自己實際需求
3.檢查自己的nginx的靜態路徑,反響代理的埠和IP,以及檔案的許可權問題