1. 程式人生 > >virtualenv+nginx+uwsgi+django配置

virtualenv+nginx+uwsgi+django配置

現有django app “mysite”,需要用nginx和uwsgi。
下圖是在virtualenv建立的虛擬環境下:
這裡寫圖片描述

A。單應用
1.安裝nginx,版本是1.13.4:

安裝gcc g++的依賴庫   
    #apt-get install build-essential
    #apt-get install libtool

安裝 pcre依賴庫(http://www.pcre.org/)    
#sudo apt-get install libpcre3 libpcre3-dev

安裝 zlib依賴庫(http://www.zlib.net) 
    #apt-get install zlib1g-dev

安裝 ssl依賴庫   
    #apt-get install openssl

安裝Nginx(http://nginx.org)

下載最新版本:
    #cd /usr/local/src
    #wget http://nginx.org/download/nginx-1.13.4.tar.gz
解壓:
    #tar -zxvf nginx-1.13.4.tar.gz
進入解壓目錄:
    #cd nginx-1.13.4
配置:
    #./configure --prefix=/usr/local/nginx 
編輯nginx:
    #make
安裝nginx:
    #sudo make install
啟動nginx:
    #sudo /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
注意:-c 指定配置檔案的路徑,不加的話,nginx會自動載入預設路徑的配置檔案,可以通過 -h檢視幫助命令。
檢視nginx程序:
    #ps -ef|grep nginx

停止 Nginx
    #cd /usr/local/nginx/sbin/
    #./nginx -s stop

2.安裝uwsgi,版本2.0.15:
注意:需要先安裝pcre,在上面的nginx中安裝了,不然會有提示rebuild with pcre。
安裝:
#pip install uwsgi -I –no-cache-dir
用ini執行:
在虛擬環境目錄(看上面的圖片)下新建檔案uwsgi.ini,添如下面程式碼:

[uwsgi]

vhost = false 
master = true
enable-threads = true
workers = 2
wsgi-file = /root/venv/mysite/mysite/wsgi.py 
virtualenv =/root/venv
chdir =/root/venv/mysite
processes = 2
listen = 80
socket = 127.0.0.1:8000
pidfile = /root/venv/mysite/tmp/mysite.pid
vacuum = true
#daemonize = /root/venv/mysite/tmp/mysite.log #開啟就是後臺執行
reload-mercy = 8
max-requests = 5000 
thunder-lock = true
buffer-size = 32768

注:關於socket和http的一點說明:
用http就可以直接 瀏覽器->uwsgi->django
用socket 瀏覽器->nginx->uwsgi->django

3.啟動專案:
a.venv目錄下啟動uwsgi:
#uwsgi –ini ./uwsgi.ini

b.將STATIC_ROOT = os.path.join(BASE_DIR, "static/")加入mysite/mysite/settings.py,然後執行python manage.py collectstatic

c.在/usr/local/nginx/conf/nginx.conf新增下面程式碼(新增在http{}中):

server {
        listen       8080;
        server_name  localhost;
        charset utf-8;
        location / {            
            include  uwsgi_params;
            uwsgi_pass  127.0.0.1:8000;
            client_max_body_size 35m;
        }
    }

d.瀏覽器開啟127.0.0.1:8080就可以訪問專案了。
注意:conf中uwsgi_pass和ini中的socket相同

B。多應用
由於只有一個mysite app,所以多app用mysite複製一份到HelloWorld資料夾中。檔案見下圖:
這裡寫圖片描述
多應用是用一個uwsgi和nginx,其中nginx中的server是對應一個app。
a。將上面3.c中的server改為下面程式碼(通常是同一埠,不同的server_name):

server {
        listen       8081;
        server_name  localhost;
    charset utf-8;
    client_max_body_size 35m;
        location / {            
            include  uwsgi_params;
            uwsgi_pass  127.0.0.1:8000;
        uwsgi_param UWSGI_CHDIR /root/venv/mysite; #你的專案的路徑,最好用完整路徑  
        uwsgi_param UWSGI_SCRIPT mysite.wsgi; #指向wsgi.py,相對於專案的根目錄  

        }
    }
server {
        listen       8080;
        server_name  localhost;
    charset utf-8;
    client_max_body_size 35m;
        location / {            
            include  uwsgi_params;
            uwsgi_pass  127.0.0.1:8000;
        uwsgi_param UWSGI_CHDIR /root/venv/HelloWorld; #你的專案的路徑,最好用完整路徑  
        uwsgi_param UWSGI_SCRIPT mysite.wsgi; #指向wsgi.py,相對於專案的根目錄  

        }
    }

}

b。將uwsgi.ini改為下面程式碼(這裡不需要具體指定app,nginx已經指定了):

[uwsgi]


vhost =true
master = true
enable-threads = true
workers = 2
processes = 2
listen = 80
socket = 127.0.0.1:8000
pidfile = /root/venv/mysite/tmp/mysite.pid
vacuum = true
#daemonize = /root/venv/mysite/tmp/mysite.log
reload-mercy = 8
max-requests = 5000 
thunder-lock = true
buffer-size = 32768

c。啟動uwsgi和nginx,訪問127.0.0.1:8080/admin和127.0.0.1:8081/admin應該都是管理介面。當專案中沒有app時可能報錯,所以採用複製mysite app進行測試。