Nginx+Django+uwsgi部署Django应用

基于Django开发的运维平台也接近尾声了,需要将开发的平台给部署上。网上也参考了很多相关的文章,要么不全要么版本太久,滚过不少坑后总算搞定了,记录下过程。
环境是:
Django1.6.5
Nginx1.6.0
uwsgi1.9.20
安装uwsgi。下载地址 http://projects.unbit.it/downloads/ 随便选一个比较新的。然后下载到服务器,按照常规运行build和install就好了。

1
2
$ python setup.py build 
$ python setup.py install

uwsgi安装好后可以用uwsgi –version验证下版本

1
uwsgi --version 1.9.20

nginx、django之前就弄好了就不用折腾了,重要的是相关配置文件的配置。
相关的配置文件uwsgi配置文件我用的是xml格式的,与项目的settings文件相同的目录(其他相关的配置文件也是放在这个目录),下面是配置文件uwsgi.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<uwsgi> 
<socket>127.0.0.1:9090</socket> #监听端口
<listen>20</listen>
<master>true</master> #一定要设置成master以为就一台机器哈
<pidfile>/opt/run/uwsgi.pid</pidfile> #uwsgi运行的进程号
<processes>2</processes> #子进程数
<module>nginx_wsgi</module> #django项目的wsgi配置文件
<pythonpath>/opt/www/xxxxxx</pythonpath> #diango项目的根目录
<profiler>true</profiler>
<memory-report>true</memory-report>
<enable-threads>true</enable-threads>
<logdate>true</logdate>
<daemonize>/opt/log/uwsgi/xxxxxx.log</daemonize> #后台运行uwsgi进程
<limit-as>4096</limit-as> #内存限制最大为4GB
</uwsgi>

settings文件我是拷贝的开发环境的setting文件,并重命名为nginx_settings。nginx_settings文件做了如下修改:
关闭DEBUG模式、关闭TEMPLATE_DEBUG、新增TEMPLATE_DIRS项、添加ALLOWED_HOSTS、重新指定WSGI_APPLICATION。

1
2
3
4
5
6
7
8
9
10
11
12
#SECURITY WARNING: don't run with debug turned on in production! 
#DEBUG = True
DEBUG = False
#TEMPLATE_DEBUG = True
TEMPLATE_DEBUG = False
TEMPLATE_DIRS = (
'templates',
'/opt/www/xxxxxx/templates',
)
ALLOWED_HOSTS = ['xxx.xxx.xxx.xxx', 'www.xxxxxx.com'] #访问该站点时用的IP或者域名
ROOT_URLCONF = 'diewu.urls' #用的与开发环境一样的urls
WSGI_APPLICATION = 'diewu.nginx_wsgi.application' #稍加修改的nginx_wugi

nginx_wsgi文件我也是拷贝的项目自动生成的wsgi,稍微修改了。

1
2
3
4
5
import os #将project.settings改成project.nginx_settings
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "diewu.nginx_settings")
#
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

nginx配置文件设置几个简单的配置项就可以跑起来。因为有时数据的采集时间较长,我把超时时间调长了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
server 
{
listen xxx; #监听端口
server_name www.xxxxxx.com ; #主机名ip或者域名都可以
uwsgi_connect_timeout 300; #超时时间设定
uwsgi_send_timeout 300;
uwsgi_read_timeout 300; #静态文件请求由nginx处理,管理后台admin的静态文件稍后再讲
location /static/ {
root /opt/www/project;
}
location / {
root /opt/www/project;
include uwsgi_params;
uwsgi_pass 127.0.0.1:9090;
}
access_log /opt/log/nginx/project.log; }

Django管理后台admin的静态文件我将Django安装包中的静态文件夹Django-1.6.5/django/contrib/admin/static/admin拷贝到项目的static的目录下就解决了。 重启nginx,再启动uwsgi,Django项目就可以跑起来了。

1
$ /usr/bin/uwsgi -x /opt/www/project/project/uwsgi.xml --uid 502 & #可以指定用户等
----------------本文结束 感谢阅读----------------