nginx+uwsgi+virtualenv+supervisor部署项目

Posted 阿布alone

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nginx+uwsgi+virtualenv+supervisor部署项目相关的知识,希望对你有一定的参考价值。

一.导论

WSGI是Web服务器网关接口。它是一个规范,描述了Web服务器如何与Web应用程序通信,以及Web应用程序如何链接在一起以处理一个请求,(接收请求,处理请求,响应请求)
基于wsgi运行的框架有Bottle,Django,Flask,用于解析动态HTTP请求
支持WSGI的服务器
    wsgiref
        python自带的web服务器
    Gunicorn
        用于linux的 python wsgi Http服务器,常用于各种django,flask结合部署服务器。
    mode_wsgi
        实现了Apache与wsgi应用程序的结合
    uWSGI
        C语言开发,快速,自我修复,开发人员友好的WSGI服务器,用于Python Web应用程序的专业部署和开发。

  在部署python程序web应用程序时,可以根据性能的需求,选择合适的wsgi server,不同的wsgi server区别在于并发支持上,有单线程,多进程,多线程,协程的区别,
其功能还是近似,无非是请求路由,执行对应的函数,返回处理结果。

  1.Django部署

Django的主要部署平台是 WSGI,这是用于Web服务器和应用程序的Python标准。

Django的 startproject管理命令设置一个简单的默认WSGI配置,可以根据需要为您的项目进行调整,并指示任何符合WSGI的应用程序服务器使用。

application 
使用WSGI部署的关键概念是应用程序服务器用于与代码通信的 application 可调用。它通常在服务器可访问的Python模块中作为名为 application 的对象提供。

startproject 命令创建包含这样的 application 可调用的文件 <project_name>/wsgi.py. ,它被Django的开发服务器和生产WSGI部署使用。
WSGI服务器从其配置中获取 application 可调用的路径。 Django的内置服务器,即 runserver 命令,从 WSGI_APPLICATION 设置读取它。

二.nginx+uwsgi结合的好处

1. 首先nginx 是对外的服务接口,外部浏览器通过url访问nginx,

2.  nginx接收到浏览器发送过来的http请求,将包进行解析,分析url,如果是静态文件请求就直接访问用户给nginx配置的静态文件目录,直接返回用户请求的静态文件,
如果不是静态文件,而是一个动态的请求,那么nginx就将请求转发给uwsgi, uwsgi接收到请求之后将包进行处理,处理成wsgi可以接受的格式,并发给wsgi,
wsgi 根据请求调用应用程序的某个文件的某个函数,最后处理完将返回值再次交给uwsgi,uwsgi将返回值进行打包,打包成uwsgi能够接收的格式,
uwsgi接收wsgi 发送的请求,并转发给nginx, nginx最终将返回值返回给浏览器。
3. 要知道第一级的nginx并不是必须的,uwsgi完全可以完成整个的和浏览器交互的流程,但是要考虑到某些情况 (1) 安全问题,程序不能直接被浏览器访问到,而是通过nginx,nginx只开放某个接口,uwsgi本身是内网接口,这样运维人员在nginx上加上安全 性的限制,可以达到保护程序的作用。 (2)负载均衡问题,一个uwsgi很可能不够用,即使开了多个work也是不行,毕竟一台机器的cpu和内存都是有限的,有了nginx做代理,一个nginx可 以代理多台uwsgi完成uwsgi的负载均衡。 (3)静态文件问题,用django或是uwsgi这种东西来负责静态文件的处理是很浪费的行为,而且他们本身对文件的处理也不如nginx好,
所以整个静态文件的处理都直接由nginx完成,静态文件的访问完全不去经过uwsgi以及其后面的东西。

  uwsgi.py文件

# uwsgi在运行django项目的时候,必须找到django的wsgi.py文件内容中的参数,不然会报no application...的错
# 也就是得有这个实例化的对象才行: application = get_wsgi_application()

#解决办法就是 uwsgi,一定要找到wsgi.py这个文件

 

三.关于几个概念和文件

  wsgi

wsgi    全称web server gateway interface,wsgi不是服务器,也不是python模块,只是一种协议,描述web server如何和web application通信的规则。
运行在wsgi上的web框架有bottle,flask,django

  uwsgi

uwsgi    和wsgi一样是通信协议,是uWSGI服务器的单独协议,用于定义传输信息的类型
 uWSGI 
uWSGI    是一个web服务器,实现了WSGI协议,uwsgi协议。a  
  nginx 
nginx    web服务器,更加安全,更好的处理处理静态资源,缓存功能,负载均衡,因此nginx的强劲性能,配合uWSGI服务器会更加安全,性能有保障。
  django
django 高级的python web框架,用于快速开发,解决web开发的大部分麻烦,程序员可以更专注业务逻辑,无须重新造轮子

 

 

 

以上是关于nginx+uwsgi+virtualenv+supervisor部署项目的主要内容,如果未能解决你的问题,请参考以下文章

08 nginx+uWSGI+django+virtualenv+supervisor发布web服务器

CentOS下实现Flask + Virtualenv + uWSGI + Nginx部署

[原创]Flask+uwsgi+virtualenv+nginx部署配置

nginx+uWSGI+django+virtualenv+supervisor发布web服务器

nginx_uWSGI_django_virtualenv_supervisor发布web服务器

nginx+uWSGI+django+virtualenv+supervisor发布web服务器