上一篇介紹了 uWSGI 來部署 Django 程序,但在在生產(chǎn)環(huán)境中單單只有 uWSGI 是不夠的,,Nginx是必不可少的工具。
先安裝 Nginx,,可以參照前面的小節(jié):使用RPM安裝Nginx。
Nginx 配置
在 nginx.conf 上加入/修改,,我的 server 配置如下(一切從簡(jiǎn)……):
03 | server_name 115.28 . 0.89 ; |
04 | #server_name localhost; |
06 | access_log / home / nowamagic / logs / access.log; |
07 | error_log / home / nowamagic / logs / error.log; |
09 | #root /root/nowamagic_venv/nowamagic_pj; |
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; |
注意保證配置里寫的目錄 /home/nowamagic/logs/ 和 /home/nowamagic/logs/ 存在,,接下來就沒啥問題了,Nginx 配置很簡(jiǎn)單,。
uWSGI 配置
前面我們是直接使用命令行來啟動(dòng) uWSGI,在實(shí)際部署環(huán)境中,,我們常用的是配置文件的方式,而非命令行的方式,。
我的 Django 程序目錄:/root/nowamagic_venv/nowamagic_pj/
這里讓 Nginx 采用 8077 端口與 uWSGI 通訊,請(qǐng)確保此端口沒有被其它程序采用,。
uWSGI 支持多種配置文件格式,比如 xml,,ini,json 等等都可以,。
1. xml 配置
請(qǐng)確定你在上一節(jié)中的django_wsgi.py文件已經(jīng)存在了。新建一個(gè)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> |
然后執(zhí)行命令:
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配置文件,。當(dāng)使用命令行參數(shù)時(shí),可以使用簡(jiǎn)化命令“-x”,。當(dāng)然也可以不簡(jiǎn)寫:
1 | uwsgi --xml /etc/nowamagic.xml |
甚至如果在命令行的最后一個(gè)參數(shù)以“.xml”結(jié)尾,,那么就隱含將加載該xml文件作為配置。
1 | uwsgi /etc/nowamagic.xml |
有時(shí)候因各種環(huán)境問題,,-x --xml 命令識(shí)別不了,,可以使用下面的 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 |
然后執(zhí)行命令:
1 | uwsgi --ini /root/nowamagic_venv/nowamagic_pj.ini& |
uwsgi 這樣就啟動(dòng)起來了,。如果無意外的話,就能在網(wǎng)上訪問你的 Python 項(xiàng)目了,。
小插曲
我在配置完 Nginx 和 uWSGI 之后,訪問時(shí)顯示 502 錯(cuò)誤,。查看 uWSGI 啟動(dòng)信息,,發(fā)現(xiàn)這么一條:ImportError: No module named django.core.wsgi,。
然后推斷,我的 CentOS 上的 Python 版本是 2.4.3,,然后進(jìn)入 virtualenv,執(zhí)行:
3 | <<< from django.core.wsgi import get_wsgi_application |
則沒報(bào)錯(cuò),,因?yàn)槲业奶摂M環(huán)境里的 Python 版本是 2.7.5,。推斷成立,但是虛擬環(huán)境里的 Django 會(huì)默認(rèn)調(diào)用外部環(huán)境的 Python,。解決方法:在虛擬環(huán)境里 pip install django,。
OK,,問題解決,一切正常,。
附
一些我在配置時(shí)用到的命令,,省得你去搜索:
1. 關(guān)閉 uWSGI:
2 | killall -s HUP /var/www/uwsgi |
3 | killall -s HUP /usr/ local /bin/uwsgi |
2. 列出端口占用情況:
|