zoukankan      html  css  js  c++  java
  • Flask 从开发到部署

     

    整理一下怎么开发flask程序应部署到生产环境中

     

    1. 第一个flask 程序 myapp.py

     

    from flask import Flask
    
    app = Flask(__name__)
    
    @app.route('/')
    def index():
        return 'Hi! It works!'
    
    if __name__=='__main__':
        app.run(host='0.0.0.0')

    运行: 

    python myapp.py

    通过浏览器访问 http://localhost:5000. 5000是flask默认端口. 我们的目标是产品化部署,这样未免太简单了,还有很多问题待解决. 1. 这个程序是同步的,如果一个API请求IO阻塞了,就不响应后续请求了,2. flask自带的web server是调试用的,不适合做产品server.  这就需要用gunicorn 来启动多进程来跑.

     

     2. Gunicorn 运行 flask 程序

    我在win10 powershell 里运行的,pip install gunicorn 后运行 

    gunicorn -w 4 myapp:app

    报错了,查了下gunicorn 不支持在windows. 

     那再试下windows下的WSL2, ubuntu 下安装了pip3,Flask, gunicorn 后运行如下,可以看到flask 自带的server(5000端口)已经换成了gunicorn server了(8000端口)

    TODO: gunicorn 有个参数 -k ,默认是sync, 如果要选gevent 需要改造flask应用程序吗? 还是直接就起作用了?

    3. Supervisor 监控 gunicorn

    sudo apt install supervisor

    在项目文件夹下新建supervisor_app.conf文件:

    [include]
    files=/etc/supervisord.conf
    
    [program:awesome_app]
    directory=/home/gld/myproject
    command=gunicorn -w 4 myapp:app

    启动supervisord:

    sudo supervisord -c myproject/supervisor_app.conf

    启动我们的应用:

    $ sudo supervisorctl start awesome_app

    常用管理命令:

    $sudo supervisorctl start [program_name]
    $sudo supervisorctl stop [program_name]
    $sudo supervisorctl restart [program_name] # 重启服务,注意这里不会重新加载配置文件

    重新加载配置文件,重新启动正在运行的服务:

    $sudo supervisorctl reload

    重新加载修改过的配置并重启该服务:

    $sudo supervisorctl reread
    $sudo supervisorctl update

    4. 需要加Nginx吗?有没有必要?

    5. 做一个docker image,把刚才的flask 放进docker 运行

     

    Ref:

    1. 使用Supervisor和Gunicorn部署Flask应用入门
    2. https://blog.csdn.net/wenqiang1208/article/details/105520549 supervisor + gunicorn
    3. https://docs.docker.com/get-started/06_bind_mounts/
    4. https://blog.csdn.net/u012308586/article/details/102953882 换ubuntu 源
    5. https://blog.csdn.net/qq_35759574/article/details/82842637 换ubuntu源
    6. https://blog.csdn.net/weixin_39394526/article/details/87937645 遇到cannot import name 'sysconfig'问题看这个文章
    7. 使用Dockerfile构建supervisor容器部署项目,CMD ["supervisord","-c","/etc/supervisord.conf"]执行失败  遇到docker CMD 启动supervisor 就退出,需要加 -n 放在前台
    8. https://blog.csdn.net/h106140873/article/details/90752725 Docker 重启时保证container 重启用--restart=always, container恢复不重启用 =no
    9. https://blog.csdn.net/qq_27575627/article/details/73470120
    10. Flask+Gunicorn+Gevent+Supervisor+Nginx生产环境部署
    转载请注明出处 http://www.cnblogs.com/mashuai-191/
  • 相关阅读:
    unity UGUI实现类似NGUI切换Sprite的方式
    商业智能系统在税务行业的应用
    MSRDS机器人仿真软件学习资源汇总
    Emotiv脑电设备与RDS机器人仿真初步测试
    unity使用UGUI创建摇杆
    如何利用FineBI做财务分析
    Android4.2.2源码目录结构分析
    一个前端妹子的悲欢编程之路
    推荐一款优雅高效的免费在线APP原型工具
    数据分析概述和理论基础
  • 原文地址:https://www.cnblogs.com/mashuai-191/p/14729699.html
Copyright © 2011-2022 走看看