太阳集团2138备用网址

  • 监督曝光——中央纪委国家监委网站 2019-04-26
  • 人民日报现场评论:彰显新时代的开放决心 2019-04-26
  • 日本影片《小偷家族》和《未来的未来》获奥斯卡提名 2019-04-26
  • 《Super TV 2》首位挑战者AOA!“甜蜜厮杀”胜负预告 2019-04-26
  • 党建添马力,基层焕生机 2019-04-26
  • 多家赣新三板企业或将“离场” 2019-04-26
  • 扎克伯格有对手了!21岁的她获评史上最年轻白手起家亿万富翁 2019-04-26
  • 江苏开工建设城市“充电宝” 2019-04-26
  • 中国石油天然气集团有限公司曲广学接受纪律审查和监察调查中国石油天然气集团-要闻 2019-04-26
  • 「天眼网路电视台」 2018两岸媒体联访‧河南全真派圣地〔王屋山〕 2019-04-26
  • 携程第三季度净亏损1.65亿美元 同比转亏 2019-04-26
  • 防弹少年团金泰亨蓝发登各国热搜 玩儿转红粉金黑棕各种发色实力演绎“有颜任性”【组图】 2019-04-25
  • 龙烨为袁竹逍遥画派配画诗欣赏之三 2019-04-25
  • 因应增值税下调 多个豪车品牌在华降价 2019-04-25
  • “小屏论”话两会:“习语”暖人心 2019-04-25
  • 欢迎来到 黑吧太阳集团2138备用网址 是业内专业的游戏平台,为你提供各式各样的精品游戏,最全的游戏项目,同时还为您提供各种游戏专题游戏攻略人气论坛。

    Flask+Gunicorn+Gevent+Supervisor+Nginx生产环境部署

    来源:本站整理 作者:佚名 时间:2017-08-27 TAG: 我要投稿

    太阳集团2138备用网址 www.r-island.com 老毛病了,在用某个新框架或新架构之前,总得花时间谷歌和自己折腾一番,才能知道这个框架和架构的优缺点,才会发现自己最喜欢、用的最顺手的的一种。近期在学习python,这里记录一下自己用的一套python web开发的部署环境。
    简介
      之所以选择Flask,而没选择用的最多的django,是因为现在这个小项目是一个简单的web工具,提供上传文件、数据处理、并下载的功能。简单小巧,没必要折腾Django。而Flask正好是一个Python实现的Web开发微框架,它基于Werkzeug 和 Jinja2,虽然小巧但也足够强大。像其他几个Python轻量级的框架,比如Bottle、web.py、web2等这里不多说。没有最好,只有更好,所谓适合自己的才是最合适的。
      Flask的部署可以选择独立的wsgi,也可以用uWSGI,FastCGI等。独立容器除了Gunicorn还可以选择Tornado、Gevent来部署。
    1)Gunicorn是一个Python WSGI UNIX的HTTP服务器。这是一个预先叉工人模式,从Ruby的独角兽(Unicorn)项目移植。该Gunicorn服务器与各种Web框架兼容,我们只要简单配置执行,轻量级的资源消耗,以及相当迅速。它既支持 eventlet ,也支持 greenlet。部署简单、方便是我选择他的主要原因,另外跟gevent结合之后,性能一点不属于tornado。
    2)Tornado 是一个开源的可伸缩的、非阻塞式的 web 服务器和工具集,它驱动了FriendFeed 。因为它使用了 epoll 模型且是非阻塞的,它可以处理数以千计的并发固定连接,这意味着它对实时 web 服务是理想的。
    3)Gevent 是一个基于协同程序的 Python 网络库,使用 greenlet 来在 libevent 的事件循环上提供高层的同步 API。
        每种方式都有自己的优缺点,建议根据个人喜好和应用场景灵活运用。
    部署
    每个组件的作用:
    1). nginx:高性能Web服务器+负责反向代理;
    2). gunicorn:高性能WSGI服务器;
    3). gevent:把Python同步代码变成异步协程的库;
    4). supervisor:监控服务进程的工具;
    Flask Gunicorn Gevent Supervisor都可以用'pip'进行安装。这里我建议Supervisor用apt或yum源安装,这样省去了多余的配置,只需要写自己的配置文件即可。以apt为例:
    # aptitude -y install nginx supervisor
    # pip install flask gunicorn gevent
    安装完成之后,supervisor的配置文件在/etc/supervisor/下,log文件在/var/log/supervisor/目录下。
    2.组件的启动
    1)Flask的项目启动比较简单,这里有一个hello world的示例,可以用来测试:
    "myproject.py":
    # -*- coding:utf-8 -*-
    # test code
    from flask import Flask
    application = Flask(__name__)
     
    @application.route("/")
    def hello():
        return "Hello There!"
     
    if __name__ == "__main__":
        application.run(host='0.0.0.0')
    测试Flask App:

    python myproject.py
    这时候打开浏览器,访问5000端口应该能看到类似页面
    2) 创建WSGI文件

    # vim ~/myproject/wsgi.py
    导入flask app,然后run即可:
    from myproject import application
     
    if __name__ == "__main__":
        application.run()
    3)用gunicorn启动:

    gunicorn -w 4 -b 127.0.0.1:8000 -k gevent wsgi:application
    参数解释:
    -w: 指定worker的数量(根据实际情况设定)
    -b:指定绑定的地址和端口号
    -k: 指定worker-class模式,默认为sync,这里用gevent使之变为异步协程,提高性能。
    最后指定app的位置。
    启动成功后,用ps看一下会看到有四个进程已经在工作了。

    4)配置supervisor
        web服务跑起来之后,为了保证服务的稳定性,需要加一个收获进程。supervisor非常好用,配置也简单方便,它是一个用 Python 写的进程管理工具,可以很方便的用来启动、重启、关闭进程(不仅仅是 Python 进程)。除了对单个进程的控制,还可以同时启动、关闭多个进程,比如很不幸的服务器出问题导致所有应用程序都被杀死,此时可以用 supervisor 同时启动所有应用程序而不是一个一个地敲命令启动。
      自己在conf.d目录下写一个gunicorn的配置:
    # vim /etc/supervisor/conf.d/gunicorn.conf
    [program:gunicorn]
    command = /usr/bin/gunicorn -w 4 -b 127.0.0.1:8000 -k gevent wsgi:application
    directory = /data/get_vm_info/
    autorestart = true
    startsecs = 5
    startretries = 3
    user = root
    nodaemon = false
    需要注意的一点是directory的设置,否则会报错“Import Error”。
    配置完成之后,重新加载下配置文件即可:

    # supervisorctl  reload
    查看状态:
    root@localhost:~# supervisorctl  status
    gunicorn                         RUNNING    pid 32505, uptime 5:21:30
    5)配置Nginx反向代理   
    root@localhost:~# cat /etc/nginx/sites-enabled/default
    server {
        listen 8001;
        server_name localhost;
        access_log  /var/log/nginx/access.log;
     
        location / {
            proxy_pass http://127.0.0.1:8000;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP   $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
      }
    配置完成后重启Nginx即可。
    整个环境基本初步搭建完成。
     

    【声明】:太阳集团2138备用网址(http://www.r-island.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@www.r-island.com,我们会在最短的时间内进行处理。
    • 最新更新
      • 相关阅读
        • 本类热门
          • 最近下载