Django 部署說明。Linux 上的 Nginx Gunicorn Supervisor(Ubuntu)
三個基本工具。
- nginx - 免費,開源,高效能 HTTP 伺服器和反向代理,具有高效能;
- gunicorn - ‘Green Unicorn’是用於 UNIX 的 Python WSGI HTTP 伺服器(需要管理你的伺服器);
- supervisor - 一個客戶端/伺服器系統,允許其使用者監視和控制類 UNIX 作業系統上的許多程序。在應用程式或系統崩潰時使用,重新啟動 django / celery / celery cam 等;
為了簡單起見,讓我們假設你的應用程式位於此目錄中:/home/root/app/src/
我們將使用 root
使用者(但你應該為你的應用建立單獨的使用者)。我們的虛擬環境也將位於/home/root/app/env/
路徑中。
NGINX
讓我們從 nginx 開始吧。如果 nginx 尚未在計算機上,請使用 sudo apt-get install nginx
進行安裝。稍後,你必須在 nginx 目錄/etc/nginx/sites-enabled/yourapp.conf
中建立一個新的配置檔案。如果有一個名為 default.conf
的檔案 - 將其刪除。
bellow 程式碼到 nginx conf 檔案,它將嘗試使用套接字檔案執行你的服務; 稍後將有一個 gunicorn 的配置。此處使用套接字檔案在 nginx 和 gunicorn 之間進行通訊。它也可以使用埠完成。
# your application name; can be whatever you want
upstream yourappname {
server unix:/home/root/app/src/gunicorn.sock fail_timeout=0;
}
server {
# root folder of your application
root /home/root/app/src/;
listen 80;
# server name, your main domain, all subdomains and specific subdomains
server_name yourdomain.com *.yourdomain.com somesubdomain.yourdomain.com
charset utf-8;
client_max_body_size 100m;
# place where logs will be stored;
# folder and files have to be already located there, nginx will not create
access_log /home/root/app/src/logs/nginx-access.log;
error_log /home/root/app/src/logs/nginx-error.log;
# this is where your app is served (gunicorn upstream above)
location / {
uwsgi_pass yourappname;
include uwsgi_params;
}
# static files folder, I assume they will be used
location /static/ {
alias /home/root/app/src/static/;
}
# media files folder
location /media/ {
alias /home/root/app/src/media/;
}
}
GUNICORN
現在我們的 GUNICORN 指令碼,它將負責在伺服器上執行 django 應用程式。首先是用 pip install gunicorn
在虛擬環境中安裝 gunicorn。
#!/bin/bash
ME="root"
DJANGODIR=/home/root/app/src # django app dir
SOCKFILE=/home/root/app/src/gunicorn.sock # your sock file - do not create it manually
USER=root
GROUP=webapps
NUM_WORKERS=3
DJANGO_SETTINGS_MODULE=yourapp.yoursettings
DJANGO_WSGI_MODULE=yourapp.wsgi
echo "Starting $NAME as `whoami`"
# Activate the virtual environment
cd $DJANGODIR
source /home/root/app/env/bin/activate
export DJANGO_SETTINGS_MODULE=$DJANGO_SETTINGS_MODULE
export PYTHONPATH=$DJANGODIR:$PYTHONPATH
# Create the run directory if it doesn't exist
RUNDIR=$(dirname $SOCKFILE)
test -d $RUNDIR || mkdir -p $RUNDIR
# Start your Django Gunicorn
# Programs meant to be run under supervisor should not daemonize themselves (do not use --daemon)
exec /home/root/app/env/bin/gunicorn ${DJANGO_WSGI_MODULE}:application \
--name root \
--workers $NUM_WORKERS \
--user=$USER --group=$GROUP \
--bind=unix:$SOCKFILE \
--log-level=debug \
--log-file=-
為了能夠執行 gunicorn 啟動指令碼,它必須啟用執行模式
sudo chmod u+x /home/root/app/src/gunicorn_start
現在,你只需使用 ./gunicorn_start
即可啟動你的 gunicorn 伺服器
SUPERVISOR
正如開頭所說,我們希望我們的應用程式在主管失敗時重新啟動。如果主管尚未在伺服器上安裝 sudo apt-get install supervisor
。
首先安裝主管。然後在主目錄/etc/supervisor/conf.d/your_conf_file.conf
中建立一個 .conf
檔案
配置檔案內容:
[program:yourappname]
command = /home/root/app/src/gunicorn_start
user = root
stdout_logfile = /home/root/app/src/logs/gunicorn_supervisor.log
redirect_stderr = true
快速簡介,[program:youappname]
在開始時是必需的,它將是我們的識別符號。stdout_logfile
也是一個儲存日誌的檔案,包括訪問和錯誤。
完成後我們必須告訴我們的主管我們剛剛新增了新的配置檔案。要做到這一點,不同的 Ubuntu 版本有不同的過程。
對於 Ubuntu version 14.04 or lesser
而言,只需執行以下命令:
sudo supervisorctl reread
- >重新讀取管理程式目錄中的所有配置檔案,這應該列印出來: yourappname:available
sudo supervisorctl update
- >更新主管新新增的配置檔案; 應列印出 yourappname:新增程序組
對於 Ubuntu 16.04
執行:
sudo service supervisor restart
並且為了檢查你的應用程式是否正常執行,請執行
sudo supervisorctl status yourappname
這應該顯示:
yourappname RUNNING pid 18020, uptime 0:00:50
要獲得此過程的實時演示,請瀏覽此 視訊 。