1. 程式人生 > >Ubuntu下Django+uWSGI+nginx部署

Ubuntu下Django+uWSGI+nginx部署

本文采用uwsgi+nginx來部署django

這種方式是將nginx作為服務端前端,將接受web所有的請求,統一管理,Nginx把所有的靜態請求自己處理,然後把所有非靜態請求通過uwsgi傳遞給Django,由Django來處理,從而完成一次web請求。

uwsgi

pip3 install uwsgi
測試:uwsgi --http :8080 --module mall.wsgi

http : 協議型別和埠號

processes : 開啟的程序數量

workers : 開啟的程序數量,等同於processes(官網的說法是spawn the specified number ofworkers / processes)

chdir : 指定執行目錄(chdir to specified directory before apps loading)

wsgi-file : 載入wsgi-file(load .wsgi file)

stats : 在指定的地址上,開啟狀態服務(enable the stats server on the specified address)

threads : 執行執行緒。由於GIL的存在,我覺得這個真心沒啥用。(run each worker in prethreaded mode with the specified number of threads)

master : 允許主程序存在(enable master process)

daemonize : 使程序在後臺執行,並將日誌打到指定的日誌檔案或者udp伺服器(daemonize uWSGI)。實際上最常用的,還是把執行記錄輸出到一個本地檔案上。

pidfile : 指定pid檔案的位置,記錄主程序的pid號。

vacuum : 當伺服器退出的時候自動清理環境,刪除unix socket檔案和pid檔案(try to remove all of the generated file/sockets)

四.Nginx+uwsgi+Django

Params uwsgi_params
Nginx配置檔案 nginx.conf
uwsgi配置檔案 uwsgi.ini

配置uwsgi

新建uwsgi.ini檔案

[uwsgi]
socket = :8000 # 埠號
master = true # 允許主程序存在
processes = 4
workers = 5 # 程序個數
enable-threads = true
post-buffering = 4096
chdir = /root/masami/luntan # 專案所在路徑
home = /root/masami/env # 專案的虛擬環境
module = luntan.wsgi:application
vacuum = true
socket = /root/masami/uwsgi.sock # uwsgi.sock檔案存放目錄

執行

uwsgi --ini uwsgi.ini

Nginx

Nginx安裝

sudo apt-get install nginx

基本命令

/etc/init.d/nginx start # 啟動
/etc/init.d/nginx stop # 關閉
/etc/init.d/nginx restart # 重啟

網站的日誌檔案

mkdir /var/log/nginx/masami/ # 新建資料夾來存放網站的日誌檔案

配置檔案

進入 /etc/nginx/sites-availabel下
在這個資料夾下新建不同站點的配置檔案
修改default檔案的埠

touch masami # 新建masami檔案,作為本專案的配置檔案

server {
    listen      80;
    server_name localhost;
    charset     utf-8;
 
    client_max_body_size 75M;

    # 這塊存讓日誌檔案
    access_log  /var/log/nginx/masami/Masami_access.log;
    error_log   /var/log/nginx/masami/Masami_error.log;
 
    location /media  {
        alias /root/masami/luntan/media;
    }
 
    location /static {
        alias /root/masami/luntan/static;
    }
 
    location / {
        uwsgi_pass 127.0.0.1:8000;
        include     /etc/nginx/uwsgi_params;
    }
}

檢查nginx語法是否錯誤 nginx -t

出現靜態資源403的錯誤

修改/etc/nginx/nginx.conf 檔案
將第一行改為user root;
重啟nginx

supervidor

安裝

supervidor 僅支援python2

配置檔案

echo_supervisord_conf > /etc/supervisord/supervisord.conf