找回密码
 会员注册
查看: 29|回复: 0

Python]flask运行+wsgi切换生产环境+supervisor配置指南

[复制链接]

2万

主题

0

回帖

7万

积分

超级版主

积分
70595
发表于 2024-9-5 17:03:33 | 显示全部楼层 |阅读模式
文章目录问题背景flask启动方式1(编写main函数):方式2(编译器):方式3(命令行):方法4(重命名文件法):方法5(使用flask命令行):关于WSGI生产环境专业wsgi服务器托管平台自动化管理yum安装supervisorEND问题背景flask项目本地启动时,控制台会打印如下warningWARNING:Thisisadevelopmentserver.Donotuseitinaproductiondeployment.UseaproductionWSGIserverinstead.1翻译成人话就是,“我这个环境就是你开发时用,实际生产的时候可别找我,出事我不负责。”好家伙呀。但是他指了另外一条路:UseaproductionWSGIserver。依然还是带着问题学习,从本篇文章可以了解如下内容flask本身自带的为啥不能用?他推荐的是什么?为什么他能用?怎么部署一个wsgi?以及后续怎么用?额外知识补充:flask的多种启动方式Beforewestart,本教程假设你已经有一个flask应用并准备部署了。flask启动方式1(编写main函数):直接在文件里写个main函数然后运行if__name__=='__main__':#本地启动#这里的HOST_IP及SERVER_PORT可以自己设置app.run(host=HOST_IP,port=SERVER_PORT,debug=True)1234方式2(编译器):我用的是pyCharm,可以直接进行配置按照如下方式进行配置,首先点击左上角加号,分类为Flaskserver,Additionaloptions为运行的额外参数,需要在变量位置增加FLASK_APP=你的py文件地址。这里的py文件就是你包含了app=Flask(__name__)这行代码的文件。启动起来啦方式3(命令行):依然先设置环境变量,在终端中输入(非常关键的是等号旁边不要有空格!)setFLASK_APP=D:\Code\ctb_v2\app\controllers\hello.py1检查一下设置成功没有输入flaskrun或python-mflaskrun运行应用如果需要指定ip或者端口flaskrun--host=0.0.0.0--port=99991方法4(重命名文件法):可以把文件命名为app.py或者wsgi.py,再进入到该文件的文件夹,运行flaskrun启动项目。方法5(使用flask命令行):通过flask--app的命令行进行设置关于WSGIwsgi是啥?全称是PythonWebServerGatewayInterface。由此可以看出它是接口,并非一个统称的服务器类型。它提供了web服务器和web应用之间的通用接口,服务器和框架的开发者需要按照WSGI的规则去实现。需要注意的是Flask应用本身就是一个WSGI应用!直接看flask的代码#位于flask\app.py文件def__call__(self,environ:dict,start_response:t.Callable)->t.Any:"""TheWSGIservercallstheFlaskapplicationobjectastheWSGIapplication.Thiscalls:meth:`wsgi_app`,whichcanbewrappedtoapplymiddleware."""returnself.wsgi_app(environ,start_response)1234567可以看到它直接Flaskapp创建时实际是引用了wsgi_app.因此回看那条报错,实际上它是说,启动flask的开发wsgi(内置)服务器不稳定,生产环境要用生产的wsgi服务器。生产环境在生产环境中,可以使用生产wsgi服务器或托管平台来运行flask应用。以下分别进行简单介绍。专业wsgi服务器1.Gunicorn全称令人意想不到:GreenUnicorn哈哈哈。不支持Windows不需要额外的依赖或编译、易安装使用方式:gunicornmyproject:app,这就等于python文件中写的frommyprojectimportapp可设定进程数:gunicorn-w4myproject:app表示要运行4个进程可开放外部访问:gunicorn-b0.0.0.0-w4myproject:app可gevent或eventlet进行异步操作2.Waitress支持windows不需要额外的依赖或编译、易安装不支持流式请求创建一个进程,由进程创建多个线程使用方式:waitress-serve--host0.0.0.0hello:app等于‘fromhelloimportapp’若为工厂方法:waitress-serve--host127.0.0.1--callhello:create_app等于‘fromhelloimportcreate_app’3.mod_wsgi支持windows与Apachehttpd集成需要编译器和apache开发头文件来安装,可以参考这个文章apache+mod_wsgi+flask部署4.uWSGI不支持Windows配置复杂是已编译的服务器套件支持gevent异步操作托管平台常见的托管平台包括以下,这里不展开了。PythonAnywhereGoogleAppEngineGoogleCloudRunAWSElasticBeanstalkMicrosoftAzure自动化管理为了方便进程管理,这里使用supervisor来管理我们的服务,例如后台运行,重启,日志输出等等都可以通过supervisor进行控制。可以使用两种方式进行安装,推荐yum(如果系统是centOS),通过pip或者agt(Ubuntu)进行安装步骤会多一些。以下介绍yum的安装方式开始之前,先区分几个名词supervisor:要安装的软件的名称。supervisord:装好supervisor软件后,supervisord用于启动supervisor服务。supervisorctl:用于管理supervisor配置文件中program和supervisor服务本身。yum安装supervisor1.安装#切换为root用户sudosuyuminstallepel-releaseyuminstall-ysupervisor1234#开机自启动systemctlenablesupervisord#启动supervisord服务systemctlstartsupervisord1234#查看supervisord服务状态systemctlstatussupervisord#查看是否存在supervisord进程ps-ef|grepsupervisord12342.配置访问supervisord的配置文件vim/etc/supervisord.conf1这个文件夹保存的是supervisor管理的服务的配置文件我们去这个文件夹下面创建文件vim/etc/supervisord.d/myprogram.init1这里面具体怎么写,可以参考刚刚/etc/supervisord.conf文件里有提供参考,以下提供一个示例[program:你的服务名];启动命令以下为gunicorn的实例,按实际情况来,比如:flaskrun;具体命令参考上面flask启动那一章command=gunicornpygun.confwsgi:app--log-level=debug--preload;工作目录(脚本启动目录的全路径)directory=/a/b/c;进程数numprocs=1;supervisord尝试启动一个程序时尝试的次数。默认是3startretires=5;supervisord守护程序启动时自动启动autostart=true;supervisord守护程序重启时自动重启autorestart=true;将stderr重定向到stdoutredirect_stderr=true;日志标准输出路径,同时脚本print打印信息也会在改文件显示stdout_logfile=./stdout.logstdout_logfile_maxbytes=1MB;max#logfilebytesb4rotation(default50MB)stdout_logfile_backups=10;#ofstdoutlogfilebackups(default10)stderr_logfile=./error.logstderr_logfile_maxbytes=1MB;max#logfilebytesb4rotation(default50MB)stderr_logfile_backups=10;#ofstderrlogfilebackups(default10)12345678910111213141516171819202122233.加载配置#读取有更新的配置文件,不会启动新添加的程序supervisorctlreread#重启配置文件修改过的程序supervisorctlupdate#启动xx程序supervisorctlstart你的服务名#查看所有服务状态supervisorctlstatus12345678END参考flask的官方使用教程:https://flask.palletsprojects.com/en/2.2.x/quickstart/flask的官方部署教程:https://flask.palletsprojects.com/en/2.2.x/deploying/WSGI官方文档:https://peps.python.org/pep-0333/其他博主的文章:centos7安装supervisor详细教程
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2025-1-8 11:49 , Processed in 0.474531 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表