標籤:http io os ar 使用 strong sp 檔案 div
五步教你實現使用Nginx+uWSGI+Django方法部署Django程式(下)By Django中國社區 at 2013-05-18 04:38
在上一篇文章《五步教你實現使用Nginx+uWSGI+Django方法部署Django程式(上)》中,闡述了如何只使用uWSGI來部署Django程式。
當然,單單只有uWSGI是不夠的,在實際的部署環境中,Nginx是必不可少的工具。
在本篇文章中,我將一直延用“N步法”的風格來闡述如何將uWSGI與Nginx做串連來部署Django程式。並在最後,會較為完整的闡述本社區的部署方法。
本文大綱:
- 環境介紹
- 配置uWSGI
- 配置Nginx
- Nginx+uWSGI+Django的實現方式
- 一些建議
環境介紹
- Ubuntu 12.04.1 LTS
- django 1.4.2
- nginx/1.2.6
- uWSGI 1.4.4
關於uWSGI的安裝可參見上一篇文章 上一篇文章《五步教你實現使用Nginx+uWSGI+Django方法部署Django程式(上)》
我們假定你已經安裝好Nginx了。
配置uWSGI
在上一篇文章《五步教你實現使用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
我們假設你將會把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+uWSGI+Django的實現方式
在完成上面配置後,需要按以下步驟來做:
重啟Nginx伺服器,以使Nginx的配置生效。
nginx -s reload
重啟後檢查Nginx日誌是否有異常。
啟動uWSGI伺服器
cd /home/work/src/sites/testdjango1/testdjango/mysiteuwsgi -x djangochina_socket.xml
檢查日誌 uwsgi.log 是否有異常發現。
訪問服務
基於上面的假設你的網域名稱是www.you.com
因此,我們訪問 www.you.com,如果發現程式與 單獨使用Django啟動的程式一模一樣時,就說明成功啦!
關閉服務的方法
將uWSGi進程殺死即可。
一些建議
uWSG設定檔的進程數,可以根據實際情況分配。不要開得太大,否則機器可能會記憶體耗用太高。一般來說,對於一個小社區來說,4個進程已經足夠了。
一般情況下,可以編寫一下 stop.sh 指令碼 來關閉uWSGI。
最後
最後面,請大家要支援Django中國社區哦,單靠一兩個人是不行的,一起推廣一下,讓Django社區更有力量哈!更有人氣哈!
推廣連結: http://django-china.cn/
END
轉自:http://django-china.cn/topic/124/
【轉】五步教你實現使用Nginx+uWSGI+Django方法部署Django程式(下)