在上一篇文章《五步教你实现使用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。