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应用程序吗? 还是直接就起作用了?参考【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:
- 使用Supervisor和Gunicorn部署Flask应用入门
- https://blog.csdn.net/wenqiang1208/article/details/105520549 supervisor + gunicorn
- https://docs.docker.com/get-started/06_bind_mounts/
- https://blog.csdn.net/u012308586/article/details/102953882 换ubuntu 源
- https://blog.csdn.net/qq_35759574/article/details/82842637 换ubuntu源
- https://blog.csdn.net/weixin_39394526/article/details/87937645 遇到cannot import name 'sysconfig'问题看这个文章
- 使用Dockerfile构建supervisor容器部署项目,CMD ["supervisord","-c","/etc/supervisord.conf"]执行失败 遇到docker CMD 启动supervisor 就退出,需要加 -n 放在前台
- https://blog.csdn.net/h106140873/article/details/90752725 Docker 重启时保证container 重启用--restart=always, container恢复不重启用 =no
- https://blog.csdn.net/qq_27575627/article/details/73470120
- Flask+Gunicorn+Gevent+Supervisor+Nginx生产环境部署
- flask 实现异步非阻塞----gevent
Flask 从开发到部署的更多相关文章
- 《Flask Web开发实战:入门、进阶与原理解析(李辉著 )》PDF+源代码
一句话评价: 这可能是市面上(包括国外出版的)你能找到最好的讲Flask的书了 下载:链接: https://pan.baidu.com/s/1ioEfLc7Hc15jFpC-DmEYBA 提取码: ...
- 学习参考《Flask Web开发:基于Python的Web应用开发实战(第2版)》中文PDF+源代码
在学习python Web开发时,我们会选择使用Django.flask等框架. 在学习flask时,推荐学习看看<Flask Web开发:基于Python的Web应用开发实战(第2版)> ...
- 《Flask Web 开发指南 pt.2》
哈喽大家好,我是咸鱼 在<Flask Web 开发指南 pt.1>中,咸鱼跟大家介绍了 Flask 的由来--诞生于一个愚人节玩笑,简单介绍了一些关于 Flask 的概念,并且编写了一个简 ...
- 有意思的Python:开发和部署一览
我觉得在有时间的条件下,学习不同的开发语言,对于保持对技术的理解是有帮助的. Python是一门这样简单而且有趣的语言.网上资料已经比较多了.我这里主要对开发和部署环境所涉及的几个工具做些介绍. 1. ...
- ASP.NET Core开发-Docker部署运行
ASP.NET Core开发Docker部署,.NET Core支持Docker 部署运行.我们将ASP.NET Core 部署在Docker 上运行. 大家可能都见识过Docker ,今天我们就详细 ...
- SharePoint Server 2013开发之旅(三):为SharePoint Server配置App开发、部署、管理环境
上一篇我讲解了如何利用微软提供的Office 365开发人员网站,进行在线的SharePoint App开发,这当然是不错的一个选择,因为你可以快速地进行开发和调试.(仅仅针对App开发而言).但是, ...
- 一个CentOS7的开发环境部署,包括防火墙|VPN|多IP多网关|HTTP代理服务器设置等
http://www.lenggirl.com/code/centos7.html layout: post title: "一个CentOS7的开发环境部署,包括防火墙|VPN|HTTP代 ...
- 西秦的ACE-Python教程 一、Python本地开发环境部署
西秦的ACE-Python教程 一.Python本地开发环境部署 西秦 级别: 论坛版主 发帖 1357 云币 2782 加关注 写私信 只看楼主 更多操作楼主 发表于: 10-10 ...
- 【J2EE】struts-2.3.16.3+apache-tomcat-8.0.9开发环境部署,“Hello World”的实现。
1.在官网下载Struts2的开发包 下载链接如下: http://120.203.229.30/5ff/2bc79/5ff16ae8698e1c321758a8f03a1bc0939892bc79/ ...
- Docker —— 用于统一开发和部署的轻量级 Linux 容器【转】
转自:http://www.oschina.net/translate/docker-lightweight-linux-containers-consistent-development-and-d ...
随机推荐
- AI生成前端组件的价值思考
想法来源 这个想法来源于我自己的需求,我自己首先就是最精准的目标用户,在这个AI时代,我希望AI可以帮我尽量多地干活. 结合自己的日常独立开发情况,发现花在调前端组件样式上的时间很多,因此思考能不能让 ...
- C#-WPF初学
1.新建一个WPF的应用: 2.拖拽控件并布局好: [小技巧]选中控件,点击"回形针"即可让该控件跟随窗口自动调整大小: 3.编写代码: 主程序代码如下: namespace Wp ...
- 历代iPad及Android平板的主要参数对比
「程序员的备忘录系列」这笔记可是持续更新的哦 逻辑分辨率Point,也就是CSS像素,是进行网页适配的关键,以下是平时整理的一些备忘录数据,可以收藏. 以现在平板的销量,还没有手机的十分之一, ...
- Arctic开源!网易数帆×华泰证券,推动湖仓一体落地
数字化转型趋势下,各行业对数据生产力的探索与追求逐步进入深水区.现实的问题是,企业数据仓库存储.数据湖多种技术并存的局面将长期存在,如何才能摆脱技术协同的内耗,让大数据直通生产力的彼岸? 8月11日下 ...
- workman和swoole区别和异同
swoole是使用C语言实现的socket通信框架,workerman则是使用纯php实现的socket框架,二者进程模型上也存在很多的不同. 先说下swoole的进程模型,看一下以下解析图 mast ...
- IP地址的精细化操作(将IP地址转为相对应的地址)
第一步: 导入maven依赖: <dependency> <groupId>org.lionsoul</groupId> <artifactId>ip2 ...
- 关于spring boot中mapper注入到service时IDEA报错的解决办法
虽然这个错误不影响正常运行但是作为强迫症患者看着实属难受,经过在论坛查看资料学习到以下两种解决方法,可以供大家参考以下,如有什么错误的地方还希望各位大佬指定一下. 1.在注解@Autowired后增加 ...
- 【Java】Socket Programming 网络编程
Java提供了网路相关的类库,无痛连网,底层细节交给JVM控制 Java实现了一个跨平台的网络库,我们开发面对的是一个统一的网路编程环境 目的: 直接或者间接的通过网络协议和其他计算机数据交互,通讯 ...
- 自动驾驶开源数据库 —— nuscenes
地址: https://www.nuscenes.org/
- 中国2023年GDP增速5.2%
在中美贸易战和三年全球疫情的大背景下,我国的经济依旧保持强有力的增速,这表明了经济发展不断转好,一切恢复到疫情和贸易战之前也是有待期望的.