http://www.nowamagic.net/academy/detail/1330334python
上一篇介紹了 uWSGI 來部署 Django 程序,但在在生產環境中單單隻有 uWSGI 是不夠的,Nginx是必不可少的工具。nginx
先安裝 Nginx,能夠參照前面的小節:使用RPM安裝Nginx。django
Nginx 配置
在 nginx.conf 上加入/修改,個人 server 配置以下(一切從簡……):json
03 |
server_name 115.28 . 0.89 ; |
06 |
access_log / home / nowamagic / logs / access.log; |
07 |
error_log / home / nowamagic / logs / error.log; |
11 |
uwsgi_pass 127.0 . 0.1 : 8077 ; |
13 |
include / etc / nginx / uwsgi_params; |
注意保證配置裏寫的目錄 /home/nowamagic/logs/ 和 /home/nowamagic/logs/ 存在,接下來就沒啥問題了,Nginx 配置很簡單。app
uWSGI 配置
前面咱們是直接使用命令行來啓動 uWSGI,在實際部署環境中,咱們經常使用的是配置文件的方式,而非命令行的方式。socket
個人 Django 程序目錄:/root/nowamagic_venv/nowamagic_pj/工具
這裏讓 Nginx 採用 8077 端口與 uWSGI 通信,請確保此端口沒有被其它程序採用。spa
uWSGI 支持多種配置文件格式,好比 xml,ini,json 等等均可以。.net
1. xml 配置命令行
請肯定你在上一節中的django_wsgi.py文件已經存在了。新建一個XML文件:nowamagic_pj.xml,將它放在 /root/nowamagic_venv/nowamagic_pj 目錄下
02 |
<socket> 127.0 . 0.1 : 8077 < / socket> |
05 |
<pythonpath> / root / nowamagic_venv / nowamagic_pj< / pythonpath> |
06 |
<processes> 1 < / processes> |
07 |
<logdate>true< / logdate> |
08 |
<daemonize> / var / log / uwsgi.log< / daemonize> |
09 |
<plugins>python< / plugins> |
而後執行命令:
1 |
uwsgi -x /root/nowamagic_venv/nowamagic_pj/nowamagic_pj.xml |
3 |
/usr/ local /bin/uwsgi -x /root/nowamagic_venv/nowamagic_pj/nowamagic_pj.xml |
加載指定的xml配置文件。當使用命令行參數時,可使用簡化命令「-x」。固然也能夠不簡寫:
1 |
uwsgi --xml /etc/nowamagic.xml |
甚至若是在命令行的最後一個參數以「.xml」結尾,那麼就隱含將加載該xml文件做爲配置。
1 |
uwsgi /etc/nowamagic.xml |
有時候因各類環境問題,-x --xml 命令識別不了,可使用下面的 ini 配置方式:
2. ini 配置
04 |
socket = 127.0 . 0.1 : 8077 |
08 |
wsgi - file = / root / nowamagic_venv / nowamagic_pj / nowamagic_pj / wsgi.py |
09 |
virtualenv = / root / nowamagic_venv |
10 |
chdir = / root / nowamagic_venv / nowamagic_pj |
而後執行命令:
1 |
uwsgi --ini /root/nowamagic_venv/nowamagic_pj.ini& |
uwsgi 這樣就啓動起來了。若是無心外的話,就能在網上訪問你的 Python 項目了。
小插曲
我在配置完 Nginx 和 uWSGI 以後,訪問時顯示 502 錯誤。查看 uWSGI 啓動信息,發現這麼一條:ImportError: No module named django.core.wsgi。
而後推斷,個人 CentOS 上的 Python 版本是 2.4.3,而後進入 virtualenv,執行:
3 |
<<< from django.core.wsgi import get_wsgi_application |
則沒報錯,由於個人虛擬環境裏的 Python 版本是 2.7.5。推斷成立,可是虛擬環境裏的 Django 會默認調用外部環境的 Python。解決方法:在虛擬環境裏 pip install django。
OK,問題解決,一切正常。
附
一些我在配置時用到的命令,免得你去搜索:
1. 關閉 uWSGI:
2 |
killall -s HUP /var/www/uwsgi |
3 |
killall -s HUP /usr/ local /bin/uwsgi |
2. 列出端口占用狀況: