1. 程式人生 > >Django下nginx部署及程序守護

Django下nginx部署及程序守護

博主在虛擬環境下部署的

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

看到不明白的地方,下面評論,看到會回覆