注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

网易杭州 QA Team

务实 专注 分享 做有态度的QA

 
 
 
 
 

日志

 
 

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

来自zhengyinyan21   2016-09-23 16:37:12|  分类: 默认分类 |举报 |字号 订阅

  下载LOFTER 我的照片书  |

   机缘巧合之下,有幸接触Django开发,尝试着从测试的角色着手接触Django的开发,不由得被Django框架精简强大而且高效的威力所震慑到,不由得让我想起多年前刚开始接触python时听到的经典名句人生苦短,我用python”

Django是一个基于 Python 的开源 Web 应用程序框架,其目的是使创建数据库驱动的 Web 站点和 Web 应用程序更加容易。Django 的架构基于模型-视图-控制器(Model-View-ControllerMVC)模式。在该模式中,应用程序逻辑、用户界面(UI)和数据访问层是分开的,从而允许在不影响到其他层的情况下独立地修改各个层。开发 Django 应用程序很简单,因为该框架包含了一个开发 Web 服务器。但是这个框架不适合在生产环境中使用,因此需要进一步将 Django 应用程序部署到 Web。本文主要记录了采用Nginx+uWSGI+Django的方式来部署django生产环境。

通常来说,web应用一般是三层结构:web server -->application --> DB serverweb服务器主流的包括IISApachenginx。这里强烈建议使用nginx,原因是nginx性能非常卓越,非常稳定,且安装简单,依赖包少,另外它的conf文件非常容易配置。Application就是我们用django开发的程序了,DB server指的是数据库。

    选定了nginx后,上网发现采用nginx+uwsgi的方式是其中比较常见的一种方式, 在这种方式中,我们的通常做法是,将nginx作为服务器最前端,它将接收WEB的所有请求,统一管理请求。nginx把所有静态请求(.html.htm等形式为文件后缀)自己来处理。然后,NGINX将所有非静态请求(.asp.jsp.php.perl.cgi等形式为文件后缀)通过uwsgi传递给Django,由Django来进行处理,从而完成一次WEB请求。可见,uwsgi的作用就类似一个桥接器。起到桥梁的作用。下面开始介绍如何安装和配置:
 0、环境介绍
  1. Python3.4
  2. django 1.9.7
  3. linuxdebian
1、安装uwsgi
pip3 install uwsgi
注意,安装过程中可能有报缺少pcre依赖项错误,如遇此错误,还需pip3 uninstall uwsgi来卸载。
apt-get libpcre3 libpcre3-dev安装依赖项后,再重新安装uwsgi

2、测试uwsgi

在你的机器上写一个test.py

# test.py
def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    return "Hello World"

然后执行shell命令:

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

访问网页:

http://127.0.0.1:8001/

看在网页上是否有Hello World,有的话,说明uwsgi安装成功。

3、配置djangouwsgi连接

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

Nginx+uWSGI+Django方法部署Django程序 - 网易杭州QA - 网易杭州 QA Team
注释掉的部分是python2支持的,但python3已不再支持

假设你的Django项目的地址是/home/work/MobileInfoPlatform

然后,执行以下命令:

uwsgi --http :8000 --chdir /home/work/MobileInfoPlatform --module django_wsgi

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

4、配置uwsgi

为了实现NginxuWSGI的连接,两者之间将采用soket来通讯方式。新建一个XML文件:django_socket.xml,将它放在/home/work/MobileInfoPlatform 项目根目录下,内容如下:

 Nginx+uWSGI+Django方法部署Django程序 - 网易杭州QA - 网易杭州 QA Team

Nginx采用8077端口与uwsgi通讯,请确保此端口没有被其它程序采用。在上面的配置中,我们使用 uwsgi.log 来记录日志,开启4个进程来处理请求。这样,我们就配置好uWSGI了。

5、配置nginx

nginx配置目录/etc/nginx下打开配置文件nginx.conf,可以看到http模块最后两行包含其他配置文件Nginx+uWSGI+Django方法部署Django程序 - 网易杭州QA - 网易杭州 QA Team,于是我选择在include /etc/nginx/sites-enabled/目录下的default文件进行修改,添加一个server项的配置,如下:

Nginx+uWSGI+Django方法部署Django程序 - 网易杭州QA - 网易杭州 QA Team

在上面的设置后,可以让Nginx来处理静态文件(/static/ /media/ )。非静态文件请求Nginx会发给 socket 8077,然后让uWSGI来进行处理。并且指定8000端口的nginx日志到项目工程下的指定文件夹,方便查看日志。

 

6Nginx+uWSGI+Django的实现方式

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

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

2.  sudo /etc/init.d/nginx reload 重启后检查Nginx日志是否有异常。

3.  进入项目根目录,启动uWSGI服务器

cd /home/work/MobileInfoPlatform
uwsgi -x django_socket.xml

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

4.  访问服务

使用在nginx里配置的域名(servername)访问,如果发现程序与单独使用Django启动的程序一模一样时,就说明成功啦!

5.  关闭服务的方法

uWSGi进程杀死即可,命令如下:

ps -efa | grep uwsgi | grep -v "grep uwsgi" | awk '{print "kill -9 " $2}' | sh

关闭nginx服务sudo /etc/init.d/nginx stop

 

  评论这张
 
阅读(178)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016