手机上怎么买彩票双色球 微信上有人推荐买彩票 能合买彩票的平台 夫妻买彩票狂中30亿 买彩票心态 买彩票就买大乐透开奖结果 哪个平台买彩票安全吗 买彩票有买一个号的吗 怎么看走势图买彩票 如何在电脑上买彩票 美国几岁可以买彩票? 福彩工作人员买彩票 彩客网买彩票 能在微信上买彩票吗 怎么买彩票容易中

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

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

老毛病了£¬在用某个新框架或新架构之前£¬总得花时间谷歌和自己折腾?#29615;¬£?#25165;能知道这个框架和架构的优缺点£¬才会发现自己最喜欢¡¢用的最顺手的的一种¡£近期在学习python£¬这里记录一下自己用的一套python web开发的部署环境¡£
简介
  之所以选择Flask£¬而没选择用的最多的django£¬是因为现在这个小项目是一个简单的web工具£¬提供上传文件¡¢数据处理¡¢并下载的功能¡£简单小巧£¬没必要折腾Django¡£而Flask正好是一个Python实现的Web开发微框架,它基于Werkzeug 和 Jinja2,虽然小巧但也足够强大¡£像其他几个Python轻量级的框架£¬比如Bottle¡¢web.py¡¢web2等这里?#27426;?#35828;¡£没有最好£¬只有更好£¬所谓适合自己的才是最合适的¡£
  Flask的部署可以选择独立的wsgi£¬?#37096;?#20197;用uWSGI£¬FastCGI等¡£独立容器除了Gunicorn还可以选择Tornado¡¢Gevent来部署¡£
1£©Gunicorn是一个Python WSGI UNIX的HTTP服务器¡£这是一个预先叉工人模式£¬从Ruby的独角兽£¨Unicorn£©项目移?#30149;?#35813;Gunicorn服务器与各种Web框架兼容£¬我?#20405;?#35201;简单配置执行£¬轻量级的资源消?#27169;?#20197;及相当迅速¡£它既支持 eventlet £¬也支持 greenlet¡£部署简单¡¢方便是我选择他的主要原因£¬另外跟gevent结合之后£¬性能一点不属于tornado¡£
2£©Tornado 是一个开源的可伸缩的¡¢非阻塞式的 web 服务器和工具集£¬它驱动了FriendFeed ¡£因为它使用了 epoll 模型且是非阻塞的£¬它可以处理数以千计的并发固定连接£¬这意味着它对实时 web 服务是理想的¡£
3£©Gevent 是一个基于协同程序的 Python 网络库£¬使用 greenlet 来在 libevent 的?#24405;?#24490;环上提供高层的同步 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的数量£¨根据?#23548;是?#20917;设定£©
-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
查看状态£º
[email protected]:~# supervisorctl  status
gunicorn                         RUNNING    pid 32505, uptime 5:21:30
5)配置Nginx反向代理   
[email protected]:~# 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即可¡£
整个环境基?#22659;?#27493;搭建完成¡£
 

  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载
        ¹ºÂò²ÊƱȨÍþÍøÖ·
        手机上怎么买彩票双色球 微信上有人推荐买彩票 能合买彩票的平台 夫妻买彩票狂中30亿 买彩票心态 买彩票就买大乐透开奖结果 哪个平台买彩票安全吗 买彩票有买一个号的吗 怎么看走势图买彩票 如何在电脑上买彩票 美国几岁可以买彩票? 福彩工作人员买彩票 彩客网买彩票 能在微信上买彩票吗 怎么买彩票容易中