整理一下怎么开发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应用程序吗? 还是直接就起作用了?参考【11】我觉得应该要需要改造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生产环境部署
  11. flask 实现异步非阻塞----gevent

Flask 从开发到部署的更多相关文章

  1. 《Flask Web开发实战:入门、进阶与原理解析(李辉著 )》PDF+源代码

    一句话评价: 这可能是市面上(包括国外出版的)你能找到最好的讲Flask的书了 下载:链接: https://pan.baidu.com/s/1ioEfLc7Hc15jFpC-DmEYBA 提取码: ...

  2. 学习参考《Flask Web开发:基于Python的Web应用开发实战(第2版)》中文PDF+源代码

    在学习python Web开发时,我们会选择使用Django.flask等框架. 在学习flask时,推荐学习看看<Flask Web开发:基于Python的Web应用开发实战(第2版)> ...

  3. 《Flask Web 开发指南 pt.2》

    哈喽大家好,我是咸鱼 在<Flask Web 开发指南 pt.1>中,咸鱼跟大家介绍了 Flask 的由来--诞生于一个愚人节玩笑,简单介绍了一些关于 Flask 的概念,并且编写了一个简 ...

  4. 有意思的Python:开发和部署一览

    我觉得在有时间的条件下,学习不同的开发语言,对于保持对技术的理解是有帮助的. Python是一门这样简单而且有趣的语言.网上资料已经比较多了.我这里主要对开发和部署环境所涉及的几个工具做些介绍. 1. ...

  5. ASP.NET Core开发-Docker部署运行

    ASP.NET Core开发Docker部署,.NET Core支持Docker 部署运行.我们将ASP.NET Core 部署在Docker 上运行. 大家可能都见识过Docker ,今天我们就详细 ...

  6. SharePoint Server 2013开发之旅(三):为SharePoint Server配置App开发、部署、管理环境

    上一篇我讲解了如何利用微软提供的Office 365开发人员网站,进行在线的SharePoint App开发,这当然是不错的一个选择,因为你可以快速地进行开发和调试.(仅仅针对App开发而言).但是, ...

  7. 一个CentOS7的开发环境部署,包括防火墙|VPN|多IP多网关|HTTP代理服务器设置等

    http://www.lenggirl.com/code/centos7.html layout: post title: "一个CentOS7的开发环境部署,包括防火墙|VPN|HTTP代 ...

  8. 西秦的ACE-Python教程 一、Python本地开发环境部署

    西秦的ACE-Python教程 一.Python本地开发环境部署       西秦 级别: 论坛版主 发帖 1357 云币 2782 加关注 写私信   只看楼主 更多操作楼主  发表于: 10-10 ...

  9. 【J2EE】struts-2.3.16.3+apache-tomcat-8.0.9开发环境部署,“Hello World”的实现。

    1.在官网下载Struts2的开发包 下载链接如下: http://120.203.229.30/5ff/2bc79/5ff16ae8698e1c321758a8f03a1bc0939892bc79/ ...

  10. Docker —— 用于统一开发和部署的轻量级 Linux 容器【转】

    转自:http://www.oschina.net/translate/docker-lightweight-linux-containers-consistent-development-and-d ...

随机推荐

  1. MQTT协议介绍与Broker列表

    MQTT协议介绍 MQTT是什么? MQTT 是基于 Publish/Subscribe(发布/订阅) 模式的物联网通信协议,凭借简单易实现.支持 QoS.报文小等特点. 官网:https://mqt ...

  2. position的值, relative和absolute分别是相对于谁进行定位的?

    relative:  相对定位,相对于自己本身在正常文档流中的位置进行定位 相对它原来的位置,在走100px.原来在标准流中的位置继续占有. absolute: 生成绝对定位,相对于最近一级定位不为s ...

  3. yb课堂 实战之Mybatis打通Mysql数据库 《二》

    配置mybatis连接Mysql数据库 server.port=8081 # ========================数据库相关配置===================== spring.d ...

  4. Mac Mysql初始化密码

    初始化密码 step1 苹果->系统偏好设置->最下面一行上点击mysql图标, 在弹出页面中 关闭mysql服务(点击stop mysql server) step2 登录终端:comm ...

  5. 全网最适合入门的面向对象编程教程:02 类和对象的Python实现-使用Python创建类

    全网最适合入门的面向对象编程教程:02 类和对象的 Python 实现-使用 Python 创建类 摘要 本文主要介绍了串口通信协议的基本概念.串口通信的基本流程.如何使用 Python 语言创建一个 ...

  6. 广州大学第十八届ACM大学生程序设计竞赛(同步赛)——题解

    这套题我答的很失败.没有按照题目的难度去答题,前期浪费了不少时间. 题目: A-字符画 题解:思维.模拟.这道题我的通过率为62.5,没有过的原因是因为对细节的处理和把控不到位,对一些点忽视,我也记录 ...

  7. Git的分支管理和标签操作

    分支操作 分支是Git使用过程中非常重要的概念.使用分支意味着你可以把你的工作从开发主线上分离出来,以免影响开发主线. 同意一个仓库可以有多个分支,各个分支相互独立,互不干扰.通过git init 命 ...

  8. AI辅助教学,甚至AI教学,逐渐成为可能

    看新闻,有感: 太火爆!一门课,两个月吸粉十五万人!企业纷纷布局!千亿级大市场,来了?

  9. 【转载】 DQN玩Atari游戏安装atari环境bug指南

    版权声明:本文为CSDN博主「好程序不脱发」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明.原文链接:https://blog.csdn.net/ningmengzh ...

  10. 再谈汤普森采样(Thompson Sampling)

    相关: [转载] 推荐算法之Thompson(汤普森)采样 [转载] 推荐系统 EE 问题与 Bandit 算法 python语言绘图:绘制一组beta分布图 转载: beta分布介绍 python语 ...