整理一下怎么开发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. linux实现SSH免密登录设置,以及shell脚本实现

    分享/朱季谦 最近在搭建linux集群,做了SSH免密登录的设置,正好把过程记录一下: 一.用搭建好的两台虚拟机做演示,A机器:192.168.200.129,B机器:192.168.200.128 ...

  2. .NET 9 预览版6发布

    微软发布了 .NET 9 的第 6 个预览版,此版本包括对运行时.SDK..NET MAUI.ASP.NET Core 和 C# 的更新,预览版没有包含太多新的主要功能或特性,因为已接近 .NET 9 ...

  3. Windows在待机后重新进入桌面出现资源管理器无响应的解决方案

    问题 在日常使用Windows操作系统的过程中,我们可能会遇到一种较为特殊的情况--在系统待机后重新激活桌面时,资源管理器出现无响应现象.这一问题不仅影响用户体验,还可能导致剪切板功能异常,进而影响到 ...

  4. 将传统应用带入浏览器的开源先锋「GitHub 热点速览」

    现代浏览器已经不再是简单的浏览网页的工具,其潜能正在通过技术不断地被挖掘和扩展.得益于 WebAssembly 等技术的出现,让浏览器能够以接近原生的速度执行非 JavaScript 语言编写的程序, ...

  5. MySql(Innodb)事务隔离级别

    事务将数据库从一个一致状态转换至另外一个一致状态,若某个事务看到了另外一个事务在状态转换过程中的中间态数据(不一致状态),将有可能导致另外一个事务的操作基于一个不一致的数据库状态,进而数据库失去一致性 ...

  6. [oeasy]python0002_终端_CLI_GUI_编程环境_游戏_真实_元宇宙 🥊

    回忆   上次 了解了 python 语言的特点 历史悠久 功能强大 深受好评 已成趋势   3大主流操作系统 mac windows linux             添加图片注释,不超过 140 ...

  7. [oeasy]python0071_字符串类型_str_string_下标运算符_中括号

    回忆上次内容 上次 分辨了 静态类型 语言 动态类型 语言   python 属于 对类型要求 没有那么严格的 动态类型 语言   对 初学者很友好 不过很多时候 也容易 弄不清变量类型   直接 修 ...

  8. AI时代你一定要知道的Agent概念

    这两年,随着人工智能(AI)和计算能力的发展,AI应用的落地速度大大加快.以ChatGPT为代表的AI应用迅速火遍全球,成为打工人的常用工具.紧接着,多模态.AI Agent等各种高大尚的名词也逐渐进 ...

  9. 阅读翻译Mathematics for Machine Learning之2.6 Generating Set and Basis

    阅读翻译Mathematics for Machine Learning之2.6 Generating Set and Basis 关于: 首次发表日期:2024-07-19 Mathematics ...

  10. excel一次性粘贴2万行数据

    测试导入文件功能中,会出现需要验证导入大批量数据文件的情况,怎么样让文件快速从1行数据变成2万行数据呢,以下讲解方法: 1.如下原文件只有2行数据,第一行是标题第二行是数据 2. 选中需要复制的第二行 ...