Nginx+Django+uwsgi部署Django应用

基于Django开发的运维平台也接近尾声了,需要将开发的平台给部署上。网上也参考了很多相关的文章,要么不全要么版本太久,滚过不少坑后总算搞定了,现在我分享下经验。我的环境是Django1.6.5+Nginx1.6.0+uwsgi1.9.20

1、安装uwsgi。下载地址 http://projects.unbit.it/downloads/ 随便挑一个比较新的就好。然后下载到服务器,按照常规运行build和install就好了。

python setup.py build
............
python setup.py install

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

[root@xxxxxx]# uwsgi --version
1.9.20

2、nginx、django之前就弄好了就不用折腾了。重要的是以下的相关配置文件。

3、相关的配置文件

uwsgi配置文件我用的是xml格式的,与项目的settings文件相同的目录(其他相关的配置文件也是放在这个目录),下面是配置文件 uwsgi.xml

<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,就可以了。

# 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,只是稍微修改了下就好了。

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配置文件简单的几个配置项就可以跑起来了。因为有时数据的采集时间较长,我把超时时间调长了。

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项目就跑起来了。

/usr/bin/uwsgi -x /opt/www/project/project/uwsgi.xml --uid 502 & #可以指定用户等

转载请注明出处:http://www.xiaomastack.com/2014/09/12/uwsgi-django-nginx/ 谢谢!

发表评论:

你的电子邮件地址将不会被公开.

85 + = 90