http://www.nowamagic.net/academy/detail/1330334
上一篇介紹了 uWSGI 來部署 Django 程序,但在在生產環境中單單只有 uWSGI 是不夠的,Nginx是必不可少的工具。
先安裝 Nginx,可以參照前面的小節:使用RPM安裝Nginx。
Nginx 配置
在 nginx.conf 上加入/修改,我的 server 配置如下(一切從簡……):
01 |
server { |
02 |
listen 80 ; |
03 |
server_name 115.28 . 0.89 ; |
04 |
#server_name localhost; |
05 |
06 |
access_log / home / nowamagic / logs / access.log; |
07 |
error_log / home / nowamagic / logs / error.log; |
08 |
09 |
#root /root/nowamagic_venv/nowamagic_pj; |
10 |
location / { |
11 |
uwsgi_pass 127.0 . 0.1 : 8077 ; |
12 |
#include uwsgi_params; |
13 |
include / etc / nginx / uwsgi_params; |
14 |
#uwsgi_pass 127.0.0.1:8077; |
15 |
#uwsgi_param UWSGI_SCRIPT index; |
16 |
#uwsgi_param UWSGI_PYHOME $document_root; |
17 |
#uwsgi_param UWSGI_CHDIR $document_root; |
18 |
} |
19 |
access_log off; |
20 |
} |
注意保證配置里寫的目錄 /home/nowamagic/logs/ 和 /home/nowamagic/logs/ 存在,接下來就沒啥問題了,Nginx 配置很簡單。
uWSGI 配置
前面我們是直接使用命令行來啟動 uWSGI,在實際部署環境中,我們常用的是配置文件的方式,而非命令行的方式。
我的 Django 程序目錄:/root/nowamagic_venv/nowamagic_pj/
這里讓 Nginx 采用 8077 端口與 uWSGI 通訊,請確保此端口沒有被其它程序采用。
uWSGI 支持多種配置文件格式,比如 xml,ini,json 等等都可以。
1. xml 配置
請確定你在上一節中的django_wsgi.py文件已經存在了。新建一個XML文件:nowamagic_pj.xml,將它放在 /root/nowamagic_venv/nowamagic_pj 目錄下
01 |
<uwsgi> |
02 |
<socket> 127.0 . 0.1 : 8077 < / socket> |
03 |
<listen> 80 < / listen> |
04 |
<master>true< / master> |
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> |
10 |
< / uwsgi> |
然后執行命令:
1 |
uwsgi -x /root/nowamagic_venv/nowamagic_pj/nowamagic_pj.xml |
2 |
or |
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 配置
01 |
[uwsgi] |
02 |
vhost = false |
03 |
plugins = python |
04 |
socket = 127.0 . 0.1 : 8077 |
05 |
master = true |
06 |
enable - threads = true |
07 |
workers = 1 |
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,執行:
1 |
python |
2 |
<<< import django |
3 |
<<< from django.core.wsgi import get_wsgi_application |
4 |
<<< |
則沒報錯,因為我的虛擬環境里的 Python 版本是 2.7.5。推斷成立,但是虛擬環境里的 Django 會默認調用外部環境的 Python。解決方法:在虛擬環境里 pip install django。
OK,問題解決,一切正常。
附
一些我在配置時用到的命令,省得你去搜索:
1. 關閉 uWSGI:
1 |
killall -9 uwsgi |
2 |
killall -s HUP /var/www/uwsgi |
3 |
killall -s HUP /usr/ local /bin/uwsgi |
2. 列出端口占用情況:
1 |
netstat -lpnt |