Nginx+uWSGI+Django方法部署Django程序

来源:互联网 发布:淘宝上怎么做一件代发 编辑:程序博客网 时间:2024/04/28 09:47


1、编译uWSGI

uWSGI下载地址:http://projects.unbit.it/downloads/

tar xzvf uwsgi-1.2.tar.gzcd uwsgi-1.2make -j 8#或者使用python编译python uwsgiconfig.py --build #复制生成的可执行文件uwsgi到/usr/sbin/目录下cp uwsgi /usr/sbin/

2、测试uwsgi是否可用
测试脚本test.py

#!/usr/bin/pythondef application(env,start_response):   start_response('200 OK',[('Content_Type','text/html')])   return "Congraduation!!! uWSGI Testing OK!!!


uwsgi --http  :9090--wsgi-file test.py

浏览器输入IP:端口:192.168.1.99:9090
可以看到”Congraduation!!! uWSGI Testing OK!!!”


配置django

NOTE:

请保证你的django项目是正常使用的。可以使用

python manage.py runserver 0.0.0.0:8002

来测试一下你的django项目是否能正常跑起来。

请保证你的django程序已经关闭。

编写django_wsgi.py文件,将其放在与文件manage.py同一个目录下。

注意: 编写文件时需要注意语句os.environ.setdefault。比如,如果你的项目为mysite,则你的语句应该是 os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")

 1 2 3 4 5 6 7 8 91011121314
#!/usr/bin/env python# coding: utf-8import osimport sys# 将系统的编码设置为UTF8reload(sys)sys.setdefaultencoding('utf8')os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")from django.core.handlers.wsgi import WSGIHandlerapplication = WSGIHandler()

连接django和uwsgi,实现简单的WEB服务器。

我们假设你的Django项目的地址是/home/work/src/sites/testdjango1/testdjango/mysite,

然后,就可以执行以下命令:

uwsgi --http :8000 --chdir /home/work/src/sites/testdjango1/testdjango/mysite --module django_wsgi

这样,你就可以在浏览器中访问你的Django程序了。所有的请求都是经过uwsgi传递给Django程序的。

配置uWSGI

在实际部署环境中,我们常用的是配置文件的方式,而非命令行的方式。我的一般做法是用命令行来测试是否uWSGI安装成功,然后用配置文件来真正部署。

另外,为了实现Nginx与uWSGI的连接,两者之间将采用soket来通讯方式。

在本节中,我们将使用uWSGI配置文件的方式来改进uWSGI的启动方式。

假定你的程序目录是 /home/work/src/sites/testdjango1/testdjango/mysite

我们将要让Nginx采用8077端口与uWSGI通讯,请确保此端口没有被其它程序采用

新建一个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

我们假设你将会把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+uWSGI+Django的实现方式

在完成上面配置后,需要按以下步骤来做:

  1. 重启Nginx服务器,以使Nginx的配置生效。

    nginx -s  reload

    重启后检查Nginx日志是否有异常。

  2. 启动uWSGI服务器

    cd /home/work/src/sites/testdjango1/testdjango/mysiteuwsgi -x djangochina_socket.xml

    检查日志 uwsgi.log 是否有异常发现。

  3. 访问服务

    基于上面的假设你的域名是www.you.com

    因此,我们访问 www.you.com,如果发现程序与 单独使用Django启动的程序一模一样时,就说明成功啦!

  4. 关闭服务的方法

    将uWSGi进程杀死即可。

一些建议

  1. uWSG配置文件的进程数,可以根据实际情况分配。不要开得太大,否则机器可能会内存耗用太高。一般来说,对于一个小社区来说,4个进程已经足够了。

  2. 一般情况下,可以编写一下 stop.sh 脚本 来关闭uWSGI。


0 0
原创粉丝点击