Nginx+uWSGI部署Django应用

经过一番折腾,终于搭建好了能初步使用的Ubuntu+Nginx+uwsgi+MongoDB+Python(LNMP)架构的站点。各种资料,配置过程写到这里,和大家分享也给自己做个备忘。

首先是安装Nginx,Nginx介绍就不再赘述了,可以看它的官网 http://wiki.nginx.org/Main
我采用的是手动编译Nginx的方式,之前从网上下载的nginx-1.0.4源代码,现在已经是nginx-1.0.6了。configure参数如下,强调的是为了支持MongoDB的GridFS文件,需要加入第三方模块,官网有专门的网页显示了第三方模块列表 http://wiki.nginx.org/3rdPartyModules 。下载需要编译进去的第三方模块文件就可以了。
./configure \
  --prefix=/usr/local \
  --conf-path=/etc/nginx/nginx.conf \
  --pid-path=/var/run/nginx.pid \
  --user=nginx \
  --group=nginx \
  --http-log-path=/var/log/nginx/access.log \
  --http-fastcgi-temp-path=/var/lib/nginx/fastcgi \
  --http-proxy-temp-path=/var/lib/nginx/proxy \
  --http-uwsgi-temp-path=/var/lib/nginx/uwsgi \
  --with-http_ssl_module \
  --with-http_stub_status_module \
  --with-debug \
  --with-http_flv_module \
  --with-http_gzip_static_module \
  --with-ipv6 \
  --add-module=~/nginx-gridfs/
make
sudo make install

安装好Nginx后,为了解决Python应用程序与nginx之间进行通信,我们还要借助WSGI这种东东,但是这只是一种规范和标准,它的具体实现有多种方式,可参考 http://wiki.python.org/moin/WSGIImplementations 。而我们选用的呢,在这些方式之外...我们使用的是uwsgi,nginx已经默认带了uwsgi协议模块。

关于uwsgi,有人是这样解释的:

uwsgi充当了python解析器的角色,使用wsgi的接口和Python程序交互,这个过程中做了优化,和上层nginx之间则设计了更加轻量的协议。nginx0.8.40以后官方默认带了uwsgi的协议模块,所以使用很方便。

并且网上还有个比较性能的柱状图,如下


uWSGI的主要特点:

◆超快的性能。

◆低内存占用(实测为apache2的mod_wsgi的一半左右)。

◆多app管理。

◆详尽的日志功能(可以用来分析app性能和瓶颈)。

◆高度可定制(内存大小限制,服务一定次数后重启等)。

想了解更多关于uwsgi,那就登录官网吧http://projects.unbit.it/uwsgi/wiki 。

下面安装uwsgi,同样从官网下载源代码,采用手动编译的方式。我的uWSGI版本号是0.9.9.1,所以只在源代码文件夹目录下

make

然后就生成了uwsgi可执行文件,为方便使用将这个文件拷贝到/usr/local/sbin下。添加运行uwsgi的用户,

adduser --system --no-create-home --disabled-login --disabled-password --group uwsgi

Nginx和uWSGI都安装好了之后,就该配置它们了,配置之前,假设你已经有了一个Python应用程序。我的是Django应用,系统目录为/var/www/my_django/

为避免每次运行uwsgi输入命令的不便,我将uwsgi的配置写在了一个xml文件中,文件名uswgi.xml,内容如下:

<uwsgi>
  <socket>127.0.0.1:3031</socket>
  <master>true</master>
  <pidfile>/var/lib/nginx/uwsgi/uwsgi.pid</pidfile>
  <gid>uwsgi</gid>
  <uid>uwsgi</uid>
  <processes>4</processes> 
  <pythonpath>/var/www/my_django</pythonpath> <!--Django应用目录-->
  <module>wsgi</module> <!--Django应用目录下包含的wsgi.py文件名,-->
  <profiler>true</profiler>
  <memory-report>true</memory-report>
  <enable-threads>true</enable-threads>
  <logdate>true</logdate>
  <limit-as>512</limit-as>
</uwsgi>

wsgi.py文件内容如下:

import sys
import os

sys.path.append('/var/www/my_django')
os.environ['DJANGO_SETTINGS_MODULE']='?' #?这个路径也要填的啊

import django.core.handlers.wsgi

application = django.core.handlers.wsgi.WSGIHandler()


下面开始配置nginx,我的配置文件在/etc/nginx/目录下

配合uwsgi的设置,nginx.conf必要设置如下:

location / {
     root /var/www/my_django;
     uwsgi_pass 127.0.0.1:3031;
     include uwsgi_params;
}


最后,运行

uwsgi -x /路径/uwsgi.xml

再运行 nginx 就可以了,可以看看你的django应用可不可以访问了^_^





评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值