Django下nginx部署及程序守護
阿新 • • 發佈:2018-11-23
博主在虛擬環境下部署的
1 配置gunicorn
想用python3 跑程式那就 pip3 install gunicorn
在你的工程下邊 新建一個gunicorn的配置檔案目錄在該目錄下 新建一個gunicorn的配置檔案 內容如下
command = '/home/ubuntu/.local/bin/gunicorn' #命令(絕對路徑) pythonpath = '/home/ubuntu/user/專案程式碼' #這個路徑是你Django專案的路徑 這個路徑下邊要包含manage.py bind = '127.0.0.1:12356' #你服務執行的埠 #bind = '0.0.0.0:12356' 看自己 workers = 2 #表示開幾個執行緒去相應瀏覽器請求 #注意:gunicorn的路徑 是在執行了which gunicorn得到的路徑
測試:在包含manage.py檔案的目錄下執行類似下面的命令
gunicorn 工程名字.wsgi -c gunicorn配置資料夾/配置檔案
2 配置nginx
sudo apt install nginx
在/etc/nginx/conf.d 目錄下 新建一個 你的配置檔案.conf
加入類似的配置
server{ listen 80; server_name ip/www; #此處寫你的域名或者ip location / { proxy_pass http://127.0.0.1:12356; #你Django服務跑的那個埠 proxy_set_header Host $host; #捕獲客戶端真實IP proxy_set_header X-Real-IP $remote_addr; #$remote_addr 代表客戶端IP proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } location /static{ alias /home/ubuntu/user/專案程式碼/static/; #靜態檔案的配置 路徑就是你Django的static目錄的路徑 } }
修改完配置 執行 sudo nginx -s reload
負載均衡的配置
upstream axf{ server ip:12356 weight=2; server ip:12355 weight=3; } server{ listen 80; server_name ip/www; #此處寫你的域名或者ip location / { proxy_pass http://www; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } location /static { alias /home/路徑/static; } }
3配置supervisor
安裝:sudo apt install supervisor
在/etc/supervisor/conf.d 目錄下新建你的配置檔案.conf 內容如下
[program:專案名/app名都可以]
directory=/home/ubuntu/user/專案程式碼
command=/home/ubuntu/.local/bin/gunicorn 工程名字.wsgi -c gunicorn配置資料夾/配置檔案
autostart=true
startsecs=10
autorestart=true
startretries=3
user=當前使用者名稱
priority=999
redirect_stderr=true
stdout_logfile_maxbytes=100MB
stdout_logfile_backups = 20
stdout_logfile=/var/log/supervisor_logs/axf.log
stopasgroup=false
killasgroup=false
帶註釋的版本
[program:axf]
directory=/home/ubuntu/user/專案程式碼
command=gunicorn pro.wsgi -c service_conf/django_gunicorn.conf ; 程式啟動命令
autostart=true ; 在supervisord啟動的時候也自動啟動
startsecs=10 ; 啟動10秒後沒有異常退出,就表示程序正常啟動了,預設為1秒
autorestart=true ; 程式退出後自動重啟,可選值:[unexpected,true,false],預設為unexpected,表示程序意外殺死後才重啟
startretries=3 ; 啟動失敗自動重試次數,預設是3
user=root ; 用哪個使用者啟動程序,預設是root
priority=999 ; 程序啟動優先順序,預設999,值小的優先啟動
redirect_stderr=true ; 把stderr重定向到stdout,預設false
stdout_logfile_maxbytes=100MB ; stdout 日誌檔案大小,預設50MB
stdout_logfile_backups = 20 ; stdout 日誌檔案備份數,預設是10
; stdout 日誌檔案,需要注意當指定目錄不存在時無法正常啟動,所以需要手動建立目錄(supervisord 會自動建立日誌檔案)
stdout_logfile=/var/log/supervisor_logs/程式.log # supervisor_logs需要自己建立 axf.log博主自己建的,應該是自己生成
stopasgroup=false ;預設為false,程序被殺死時,是否向這個程序組傳送stop訊號,包括子程序
killasgroup=false ;預設為false,向程序組傳送kill訊號,包括子程序
修改完以後
重新載入配置檔案 執行命令:
sudo supervisorctl reload
sudo supervisorctl restart all(你想重啟的單個應用名字也可以)
檢視狀態
sudo supervisorctl status
如果啟動問題 先去看看log log的位置 stdout_logfile=/var/log/supervisor_logs/程式.log
看到不明白的地方,下面評論,看到會回覆