Windows环境部署flask生产环境
2022-7-15 17:7:36 Author: F12sec(查看原文) 阅读量:18 收藏

点击蓝字 / 关注我们
很久没写代码了,鬼迷心窍用python写,有点小麻烦,部署、favicon映射、静态文件读取等问题,其实这个东西写起来很简单。
最近看到以前hostloc论坛一个用户的小项目,文件柜(上传、下载文件),地址:http://st.luoli.pub/,正好有时间,在征得原作者同意的情况下,直接用了原作者的前端页面,我自己把后端重写了一下。

原作者页面

加了备案号

原作者的后端是PHP,使用了关系数据库MySQL,几个传参的地方过滤不严,导致SQL注入产生。
重写前我认为这个项目完全不需要关系数据库,所以选用了Redis,语言使用了Python,web框架为flask,Django也可以,但是之前部署Django遇到一些问题,懒得解决,直接用了flask。
因为我不想配nginx,所以直接在系统上用python app.py的方式启动,启动后报警告:WARNING: This is a development server. Do not use it in a production deployment.
如图:

开发模式警告

后来查了一下原因,flask自带一个web服务器,但是只是供开发使用,生产环境需要用其他的,比如网上都说使用uwsgi,可惜的是uwsgi不支持windows,如果非要使用自带的web服务器不是不行,就是有一些问题,诸如:运行一段时间无响应、高并发无响应等。
昨天部署服务器测试的时候发现三个人或两个人访问都会导致服务端无响应,CPU、内存都是正常的,但是启动flask的cmd窗口没有任何反应,没有日志打印,Ctrl+C也无法停止,猜测可能是这个问题,但是已经晚上了,我也不想切到linux,就去查解决方案,后来在水木社区找到一篇文章:【用flask做网站服务器经常死机,求问为啥?】。原文地址:https://exp.newsmth.net/topic/0fab09918ec6450e32c536e2c0f5e3ee/3,文中楼主提到自己使用的flask框架开发了一个web程序,但是会莫名其妙假死,跟我遇到的一样,都是建议楼主使用uwsgi或uvicorn或gunicorn,但是这几个都是只支持linux不支持windows的,其中有一个网友提议使用waitress,这个是支持windows的。
正是凌晨一两点,我赶紧远程到服务器上,安装waitress很简单,使用pip就可以:pip install waitress

pip install waitress

安装完后直接在入口文件目录下打开cmd,输入:
waitress-serve --port=端口 app:入口文件名.主方法

我的主方法就是main,直接省略了,启动后用17ce测了一下没问题,到今天一直正常,没有出现假死的情况,美中不足的是waitress不支持SSL,需要在前面部署一个nginx,官方也是这么说的,建议nginx+waitress+flask。
网上说的开启flask多线程和多进程的方法亲测都没用,在linux下我用了gunicorn也是没问题的,这个windows截止发文也是正常的。
linux下使用gunicorn:gunicorn -c 配置文件 入口文件名:app

gunicorn.py是配置文件,自己写的,内容如下:
#最多进程数workers =4# 监听内网端口80【按需要更改】bind ='0.0.0.0:80'# 设置守护进程【关闭连接时,程序仍在运行】daemon =True# 设置超时时间300s,默认为30s。按自己的需求进行设置timeout = 300# 设置访问日志和错误信息日志路径accesslog ='/weblogs/acess.log'errorlog ='/weblogs/error.log'
这个测试了一下,也是没问题的。
附windows+waitress+flask的测试地址:http://ft.fbi.pub:8090
扫码关注我们
公众号:墨雪飘影
www.shikangsi.com

文章来源: http://mp.weixin.qq.com/s?__biz=Mzg5NjU3NzE3OQ==&mid=2247487886&idx=2&sn=82da6cbdbc217b76b0bcd860db15cc98&chksm=c07faa7af708236cd436927d26b12527f859cb2a79ccd41b6fb092e43bf180f488e736285735#rd
如有侵权请联系:admin#unsafe.sh