要在Django項目中使用Nginx和Gunicorn實現平滑重啟和零停機更新,可以采用以下步驟:
1. 安裝并配置Gunicorn。在項目根目錄下創建一個名為gunicorn.conf.py
的文件,內容如下:
workers = 2
bind = "unix:/tmp/gunicorn.sock"
module = "myproject.wsgi:application"
其中,myproject
是你的Django項目名稱。
2. 安裝并配置Nginx。編輯Nginx配置文件(通常位于/etc/nginx/sites-available/default
或/etc/nginx/nginx.conf
),添加以下內容:
location / {
proxy_pass http://unix:/tmp/gunicorn.sock;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
3. 使用Gunicorn啟動你的Django項目:
gunicorn -c gunicorn.conf.py myproject.wsgi:application
4. 使用Nginx作為反向代理服務器,將請求轉發給Gunicorn。確保Nginx正在運行并監聽相應的端口。
5. 為了實現平滑重啟和零停機更新,可以使用supervisord
來管理Gunicorn進程。首先安裝supervisord
:
sudo apt-get install supervisor
6. 創建一個名為supervisord.conf
的配置文件,內容如下:
[unix_http_server]
file=/tmp/supervisor.sock
[supervisord]
logfile=/tmp/supervisord.log
pidfile=/tmp/supervisord.pid
nodaemon=true
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
[supervisorctl]
serverurl=unix:///tmp/supervisor.sock
[program:gunicorn]
command=gunicorn -c gunicorn.conf.py myproject.wsgi:application
autostart=true
autorestart=true
stderr_logfile=/tmp/gunicorn.err.log
stdout_logfile=/tmp/gunicorn.out.log
7. 啟動supervisord
:
supervisord -c supervisord.conf
現在,當你需要更新Django項目時,只需停止Gunicorn進程,然后重新啟動它。由于使用了supervisord
,Gunicorn會自動重啟,從而實現平滑重啟和零停機更新。