在上一篇文章《五步教你實現使用Nginx+uWSGI+Django方法部署Django程序(上)》中,闡述瞭如何只使用uWSGI來部署Django程序。html
固然,單單隻有uWSGI是不夠的,在實際的部署環境中,Nginx是必不可少的工具。nginx
在本篇文章中,我將一直延用「N步法」的風格來闡述如何將uWSGI與Nginx作鏈接來部署Django程序。並在最後,會較爲完整的闡述本社區的部署方法。django
本文大綱:服務器
環境介紹socket
配置uWSGI工具
配置Nginx測試
Nginx+uWSGI+Django的實現方式spa
一些建議命令行
Ubuntu 12.04.1 LTS調試
django 1.4.2
nginx/1.2.6
uWSGI 1.4.4
關於uWSGI的安裝可參見上一篇文章 上一篇文章《五步教你實現使用Nginx+uWSGI+Django方法部署Django程序(上)》
咱們假定你已經安裝好Nginx了。
在上一篇文章《五步教你實現使用Nginx+uWSGI+Django方法部署Django程序(上)》中,咱們是直接使用命令行來啓動uWSGI,在實際部署環境中,咱們經常使用的是配置文件的方式,而非命令行的方式。個人通常作法是用命令行來測試是否uWSGI安裝成功,而後用配置文件來真正部署。
另外,爲了實現Nginx與uWSGI的鏈接,二者之間將採用soket來通信方式。
在本節中,咱們將使用uWSGI配置文件的方式來改進uWSGI的啓動方式。
假定你的程序目錄是 /home/work/src/sites/testdjango1/testdjango/mysite
咱們將要讓Nginx採用8077端口與uWSGI通信,請確保此端口沒有被其它程序採用。
注意,請肯定你在上一節《五步教你實現使用Nginx+uWSGI+Django方法部署Django程序(上)》中的django_wsgi.py文件已經存在了。
新建一個XML文件:
djangochina_socket.xml,將它放在 /home/work/src/sites/testdjango1/testdjango/mysite 目錄下:
<uwsgi> <socket>:8077</socket> <chdir>/home/work/src/sites/testdjango1/testdjango/mysite</chdir> <module>django_wsgi</module> <processes>4</processes> <!-- 進程數 --> <daemonize>uwsgi.log</daemonize></uwsgi>
在上面的配置中,咱們使用 uwsgi.log 來記錄日誌,開啓4個進程來處理請求。
這樣,咱們就配置好uWSGI了。
咱們假設你將會把Nginx程序日誌放到你的目錄/home/work/var/test/logs/下,請確保該目錄存在。
咱們假設你的Django的static目錄是/home/work/src/sites/testdjango1/testdjango/collectedstatic/ , media目錄是/home/work/src/sites/testdjango1/testdjango/public/media/,請確保這些目錄存在。
咱們假設你的域名是 www.you.com (在調試時你能夠設置成你的機器IP)
咱們假設你的域名端口是 80(在調試時你能夠設置一些特殊端口如 8070)
基於上面的假設,咱們爲conf/nginx.conf添加如下配置
server { listen 80; server_name www.you.com; access_log /home/work/var/test/logs/access.log; error_log /home/work/var/test/logs/error.log; #charset koi8-r; #access_log logs/host.access.log main; location / { include uwsgi_params; uwsgi_pass 127.0.0.1:8077; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } location /static/ { alias /home/work/src/sites/testdjango1/testdjango/collectedstatic/; index index.html index.htm; } location /media/ { alias /home/work/src/sites/testdjango1/testdjango/public/media/; } }
在上面的設置後,可讓Nginx來處理靜態文件(/static/ 和 /media/ )。非靜態文件請求Nginx會發給 socket 8077,而後讓uWSGI來進行處理。
在完成上面配置後,須要按如下步驟來作:
重啓Nginx服務器,以使Nginx的配置生效。
nginx -s reload
重啓後檢查Nginx日誌是否有異常。
啓動uWSGI服務器
cd /home/work/src/sites/testdjango1/testdjango/mysite uwsgi -x djangochina_socket.xml
檢查日誌 uwsgi.log 是否有異常發現。
訪問服務
基於上面的假設你的域名是www.you.com
所以,咱們訪問 www.you.com,若是發現程序與 單獨使用Django啓動的程序如出一轍時,就說明成功啦!
關閉服務的方法
將uWSGi進程殺死便可。
uWSG配置文件的進程數,能夠根據實際狀況分配。不要開得太大,不然機器可能會內存耗用過高。通常來講,對於一個小社區來講,4個進程已經足夠了。
通常狀況下,能夠編寫一下 stop.sh 腳本 來關閉uWSGI。