本文部署教程主要參照B站和djangoproject上的教程,及附上一些個人的踩坑記錄
B站鏈接:https://www.bilibili.com/video/av31456425/?spm_id_from=333.788.videocard.0
官方教程:https://uwsgi.readthedocs.io/en/latest/tutorials/Django_and_nginx.html
系統(tǒng)環(huán)境:ubuntu 16.04
Django:2.1.4
Python:3.6.8
目錄:
1. uwsgi
????????? 1.1 安裝uwsgi
?????????? 1.2 用文件測試uwsgi? ?
?????????? 1.3 用項目測試運行uwsgi
2. nginx
?????????? 2.1 安裝nginx
?????????? 2.2 修改nginx.conf
?????????? 2.3 編寫項目配置文件
?????????? 2.4 為自己的配置文件添加軟連接
3. 編寫uwsgi配置文件
?????????? 3.1 檢查當前uwsgi 狀態(tài)
4 啟動nginx
?????????? 4.1 檢查nginx狀態(tài)
?????????? 4.2 啟動nginx
5 收集static
?????????? 5.1 修改setting文件
?????????? 5.2 收集靜態(tài)文件
?????????? 5.3 修改nginx配置文件
?????????? 5.4 重啟nginx
1 uwsgi
1.1? 安裝uwsgi
pip install uwsgi
1.2 測試uwsgi
①準備一個簡單的python文件,比如 新建一個test.py
def application(env, start_response):
??????? start_response('200 OK',[('Content-Type','text/html')])
?? ? ?? return[b"Hello World"]
②用文件測試是否可用
uwsgi --http :8000 --wsgi-file test.py
到本地機器瀏覽器中輸入服務器ip+8000看看是否出現(xiàn)HelloWorld
(如果是阿里云要到控制臺安全組那里這是運行8000端口運行)
x.x.x.x:8000
③用項目測試是否可用
uwsgi --http (端口) :8000 --chdir 項目路徑(即項目文件manage.py所在的文件夾的路徑,比如/home/mysite) --home python路徑,一般填寫自己的虛擬環(huán)境的python的路徑(即bin所在的文件夾的路徑,比如/home/mysite_env/) --module (wsgi所在地方,一般寫法為mysite.wsgi:application)
然后在瀏覽器輸入服務器ip+8000看是否出現(xiàn)網(wǎng)站的主頁(沒有任何樣式的主頁)
x.x.x.x:8000
2. nginx
2.1 安裝nginx
????pip install nginx
2.2 修改nginx.conf
vim /etc/nginx/nginx.conf
!?。?!把第一行user www-data里面的www-data改為自己的賬戶,如果是管理員則直接改為root,不然最后會因為當前賬戶權(quán)限不足而失敗
2.3 編寫項目配置文件
vim /etc/nginx/sites-available/mysite.conf
寫入如下代碼:
server{
? ? listen 80;
? ? server_name mysite;
? ? charset utf-8;
? ? client_max_body_size 75M;
? ? location /static {
? ? ? ? alias /root/mysite/static;
? ? }
? ? location /media {
? ? ? ? alias /root/mysite/media;
? ? }
? ? location / {
? ? ? ? uwsgi_pass 127.0.0.1:8001;
? ? ? ? include /etc/nginx/uwsgi_params;
? ? }
}
這里對這個文件說明一下:
server_name 可以填寫自己網(wǎng)站的名稱
location /static 下填寫的是自己的網(wǎng)站下的static文件夾路徑
location /media 下填寫的是自己的網(wǎng)站下的media文件夾路徑
2.4 為自己的配置文件添加軟連接
ln -s /etc/nginx/sites-available/mysite.conf /etc/nginx/sites-enabled/mysite.conf
添加軟連接而不是復制的目的是如果要修改配置文件的話可以直接修改available文件夾里面的即可以了,不用兩個一起修改
3. 編寫uwsgi配置文件
在一個自己喜歡的地方新建一個文件夾并添加ini文件
mkdir mysite_uwsgi
cd mysite_uwsgi
vim mysite.ini
添加下面代碼:
[uwsgi]
chdir = /root/mysite
home = /root/env/py36
module = mysite.wsgi:application
master = True
processes = 4
harakiri = 60
max-requests = 5000
socket = 127.0.0.1:8001
pidfile = /root/mysite_uwsgi/master.pid
daemonize = /root/mysite_uwsgi/mysite.log
vacuum = True
這里說明一下:
mysite改為自己的項目
process 決定用多少個子進程運行uwsgi
socket的8001端口好改為自己喜歡的端口
其他參數(shù)可以參照本文開頭的B站鏈接,那里說的很詳細
編寫完成后運行
uwsgi --ini /home/mysite_uwsgi/mysite.ini
3.1 檢查當前uwsgi 狀態(tài)
ps -aux | grep uwsgi
因為配置文件中process=4,如果uwsgi進程只有一個則說明沒有啟動,請檢查uwsgi配置文件,如果有5個(一個主進程4個子進程)則說明成功啟動
4 啟動nginx
4.1 檢查nginx狀態(tài)
nginx -t
顯示successful即通過測試
4.2 啟動nginx
service nginx restart
5 收集static
5.1 修改setting文件
進入django項目中的setting.py,添加如下代碼:
STATIC_ROOT = os.path.join("BASE_DIR","static_collected")
5.2 收集靜態(tài)文件
到虛擬環(huán)境中,進入自己的項目文件夾
python manage.py collectstatic
5.3 修改nginx配置文件
把alias /root/mysite/static修改為alias /root/mysite/static_collect
5.4 重啟nginx
至此,完成部署任務
下面講解一些事情:
1. 對uwsgi進程進行操作 (重啟、停止)
uwsgi --reload /root/mysite_uwsgi/master.pid
uwsgi --stop /root/mysite_uwsgi/master.pid
對項目文件進行修改之后必須使用第一條命令重啟uwsgi?。。。。〔蝗徊荒軕眯薷模?!
2. 錯誤
一定要學會查日志?。。?!nginx的日志文件在/var/log/nginx/中,有access.log和error.log兩個文件,錯誤通常都在error.log文件當中。
我遇到的是403錯誤:
查看項目文件是否開放訪問權(quán)限
chmod -R 755 /home/mysite
查看運行nginx的是不是自己當前用戶
ps -aux | grep nginx
如果用戶是www-data,請參照2.2