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

这篇具有很好参考价值的文章主要介绍了[Python] flask运行+wsgi切换生产环境+supervisor配置指南。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

问题背景

flask项目本地启动时,控制台会打印如下warning

WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.

use a production wsgi server instead.,Python,flask,python,后端
翻译成 人话就是,“我这个环境就是你开发时用,实际生产的时候可别找我,出事我不负责。”

好家伙呀。


但是他指了另外一条路:Use a production WSGI server

依然还是带着问题学习,从本篇文章可以了解如下内容

  1. flask本身自带的为啥不能用?
  2. 他推荐的是什么?为什么他能用?
  3. 怎么部署一个wsgi?以及后续怎么用?

额外知识补充:flask的多种启动方式

Before we start, 本教程假设你已经有一个flask应用并准备部署了。

flask启动

方式1(编写main函数):

直接在文件里写个main函数然后运行

if __name__ == '__main__':
    # 本地启动
    # 这里的HOST_IP及SERVER_PORT可以自己设置
    app.run(host=HOST_IP, port=SERVER_PORT, debug=True)

方式2(编译器):

我用的是pyCharm,可以直接进行配置
use a production wsgi server instead.,Python,flask,python,后端
按照如下方式进行配置,首先点击左上角加号,分类为Flask server,Additional options为运行的额外参数,需要在变量位置增加FLASK_APP=你的py文件地址。这里的py文件就是你包含了app = Flask(__name__) 这行代码的文件。

use a production wsgi server instead.,Python,flask,python,后端
启动起来啦
use a production wsgi server instead.,Python,flask,python,后端

方式3(命令行):

依然先设置环境变量,在终端中输入(非常关键的是等号旁边不要有空格!)

set FLASK_APP=D:\Code\ctb_v2\app\controllers\hello.py

检查一下设置成功没有
use a production wsgi server instead.,Python,flask,python,后端
输入flask runpython -m flask run运行应用

use a production wsgi server instead.,Python,flask,python,后端

如果需要指定ip或者端口

flask run --host=0.0.0.0 --port=9999

方法4(重命名文件法):

可以把文件命名为app.py或者wsgi.py,再进入到该文件的文件夹,运行flask run启动项目。

use a production wsgi server instead.,Python,flask,python,后端

方法5(使用flask命令行):

通过flask --app的命令行进行设置
use a production wsgi server instead.,Python,flask,python,后端

关于WSGI

wsgi是啥?全称是Python Web Server Gateway Interface。由此可以看出它是接口,并非一个统称的服务器类型。它提供了web服务器和web应用之间的通用接口,服务器和框架的开发者需要按照WSGI的规则去实现。

需要注意的是
Flask应用本身就是一个WSGI应用!
直接看flask的代码

# 位于flask\app.py文件
  def __call__(self, environ: dict, start_response: t.Callable) -> t.Any:
        """The WSGI server calls the Flask application object as the
        WSGI application. This calls :meth:`wsgi_app`, which can be
        wrapped to apply middleware.
        """
        return self.wsgi_app(environ, start_response)

可以看到它直接Flask app创建时实际是引用了wsgi_app.

因此回看那条报错,实际上它是说,启动flask的开发wsgi(内置)服务器不稳定,生产环境要用生产的wsgi服务器


生产环境

在生产环境中,可以使用生产wsgi服务器或托管平台来运行flask应用。以下分别进行简单介绍。

专业wsgi服务器

1. Gunicorn

全称令人意想不到:Green Unicorn哈哈哈。

  • 不支持Windows
  • 不需要额外的依赖或编译、易安装
  • 使用方式:gunicorn myproject:app,这就等于python文件中写的 from myproject import app
  • 可设定进程数:gunicorn -w 4 myproject:app 表示要运行4个进程
  • 可开放外部访问:gunicorn -b 0.0.0.0 -w 4 myproject:app
  • 可gevent 或 eventlet 进行异步操作

2. Waitress

  • 支持windows
  • 不需要额外的依赖或编译、易安装
  • 不支持流式请求
  • 创建一个进程,由进程创建多个线程
  • 使用方式:waitress-serve --host 0.0.0.0 hello:app 等于 ‘from hello import app’
  • 若为工厂方法:waitress-serve --host 127.0.0.1 --call hello:create_app 等于 ‘from hello import create_app’

3. mod_wsgi

  • 支持windows
  • 与Apache httpd集成
  • 需要编译器和apache开发头文件来安装,可以参考这个文章apache+mod_wsgi+flask部署

4. uWSGI

  • 不支持Windows
  • 配置复杂
  • 是已编译的服务器套件
  • 支持gevent异步操作

托管平台

常见的托管平台包括以下,这里不展开了。

  • PythonAnywhere
  • Google App Engine
  • Google Cloud Run
  • AWS Elastic Beanstalk
  • Microsoft Azure

自动化管理

为了方便进程管理,这里使用supervisor来管理我们的服务,例如后台运行,重启,日志输出等等都可以通过supervisor进行控制。

可以使用两种方式进行安装,推荐yum(如果系统是centOS) ,通过pip或者agt(Ubuntu)进行安装步骤会多一些。
以下介绍yum的安装方式

开始之前,先区分几个名词

supervisor:要安装的软件的名称。
supervisord:装好supervisor软件后,supervisord用于启动supervisor服务。
supervisorctl:用于管理supervisor配置文件中program和supervisor服务本身。

yum安装supervisor

1. 安装

#切换为root用户
sudo su 
yum install epel-release
yum install -y supervisor
# 开机自启动
systemctl enable supervisord 
# 启动supervisord服务
systemctl start supervisord 
# 查看supervisord服务状态
systemctl status supervisord 
# 查看是否存在supervisord进程
ps -ef|grep supervisord 

2. 配置
访问supervisord的配置文件

vim /etc/supervisord.conf 

use a production wsgi server instead.,Python,flask,python,后端
这个文件夹保存的是supervisor管理的服务的配置文件
我们去这个文件夹下面创建文件

vim /etc/supervisord.d/myprogram.init

这里面具体怎么写,可以参考刚刚/etc/supervisord.conf 文件里有提供参考,以下提供一个示例

[program:你的服务名]   
; 启动命令 以下为gunicorn的实例,按实际情况来,比如:flask run
; 具体命令参考上面flask启动那一章
command=gunicorn pygun.conf wsgi:app --log-level=debug --preload
; 工作目录(脚本启动目录的全路径)
directory=/a/b/c
; 进程数
numprocs=1
; supervisord尝试启动一个程序时尝试的次数。默认是3
startretires=5
; supervisord守护程序启动时自动启动
autostart=true    
; supervisord守护程序重启时自动重启     
autorestart=true
;将stderr重定向到stdout        
redirect_stderr=true   
; 日志标准输出路径,同时脚本print打印信息也会在改文件显示
stdout_logfile=./stdout.log
stdout_logfile_maxbytes=1MB   ; max # logfile bytes b4 rotation (default 50MB)
stdout_logfile_backups=10     ; # of stdout logfile backups (default 10)
stderr_logfile=./error.log
stderr_logfile_maxbytes=1MB   ; max # logfile bytes b4 rotation (default 50MB)
stderr_logfile_backups=10     ; # of stderr logfile backups (default 10)

3. 加载配置

#读取有更新的配置文件,不会启动新添加的程序
supervisorctl reread
#重启配置文件修改过的程序
supervisorctl update
#启动xx程序
supervisorctl start 你的服务名
#查看所有服务状态
supervisorctl status

END


参考文章来源地址https://www.toymoban.com/news/detail-774682.html

  1. flask的官方使用教程:https://flask.palletsprojects.com/en/2.2.x/quickstart/
  2. flask的官方部署教程:https://flask.palletsprojects.com/en/2.2.x/deploying/
  3. WSGI官方文档:https://peps.python.org/pep-0333/
  4. 其他博主的文章:centos7安装supervisor详细教程

到了这里,关于[Python] flask运行+wsgi切换生产环境+supervisor配置指南的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • (十五)Flask覆写wsgi_app函数实现自定义中间件

    在前面讲session部分提到过:请求一进来,Flask会自动调用应用程序对象【Flask(__name__)】的 __call__ 方法,这个方法负责处理请求并返回响应(其实如下图:其内部就是 wsgi_app方法 )。它是WSGI规范所要求的。 在 wsgi_app 方法内部,Flask会根据路由规则和视图函数来确定如何处理请

    2024年02月05日
    浏览(56)
  • Flask 生产环境部署(Falsk + uWSGI + nginx)

    最近自己做了个 Falsk 小项目,在部署上服务器的时候,发现虽然不乏相关教程,但大多都是将自己项目代码复制出来,不讲核心逻辑,不太简洁,于是将自己部署的经验写成内容分享出来。 uWSGI : 一种实现了多种协议(包括 uwsgi、http)并能提供服务器搭建功能的 Python 包 D

    2024年04月14日
    浏览(37)
  • Flask结合gunicorn和nginx反向代理的生产环境部署及踩坑记录

    个人博客:https://xzajyjs.cn 之前自己写的flask使用gunicorn上线生产环境没有什么问题,但是最近搭建了一个现成的flask项目,当使用python直接运行时不会有问题,而使用gunicorn时则会出现一些问题。 这里使用pyenv创建了一个虚拟环境,并安装好依赖 下面是入口函数 run.py : 其中

    2024年02月16日
    浏览(48)
  • 1.OpenCV 运行环境配置(Python)

    一、安装Python 1.在Python官网下载Python。Download Python | Python.org 下载有点慢,需耐心等一等。(用迅雷下载挺快) 2.下载完后,一步一步的安装即可。我本地安装在 D:Python,路径可以自定义。安装时勾选了添加环境变量,在cmd里就可以直接用python命令了,如果安装时没勾选添加

    2024年02月16日
    浏览(37)
  • BurpSuite扩展--python扩展运行环境配置

    Burp扩展可以用Java,Python或Ruby编写。Java扩展可以直接在Burp中运行,而无需任何其他配置。在安装以Python或Ruby编写的扩展之前,您需要下载Jython或JRuby,它们是用Java实现的那些语言的解释器。如果要安装Python扩展,则必须下载Jython的独立版本   Jython运行环境 https://www.jython.

    2023年04月09日
    浏览(43)
  • Visual Studio Code配置Python运行环境

    Visual Studio Code配置Python运行环境(保姆级教学) Visual Studio Code是微软针对于编写现代Web和云应用开发的跨平台源代码编辑器,它支持多种语言和文件格式的编写,并且启动速度快,开源,语法高亮,颜值高等优点集于一身,受到许多开发者的热爱。 随着Python编程语言迅速的

    2024年02月16日
    浏览(54)
  • Nginx生产环境配置、elasticsearch生产环境配置、rocketmq生产环境配置 (史上最全)

    在优化内核时,可以做的事情很多,不过,我们通常会根据业务特点来进行调整,当Nginx作为静态web内容服务器、反向代理或者提供压缩服务器的服务器时,期内核参数的调整都是不同的, 概述: 由于默认的linux内核参数考虑的是最通用场景,这明显不符合用于支持高并发访

    2024年02月01日
    浏览(59)
  • 快速下载VScode并配置Python运行环境【详细教程】

    博主:命运之光 前言 本文主要内容,下载VScode和配置Python运行环境, 安装,主打的就是一个简单快速 下载vscode 第一步vscode官网下载 vscode官网下载 点击跳转到下载官网 第二步点击下载 第三步点击下载 下载后等待下载完成即可 安装vscode 第一步 第二步 第三步 第四步 第五步

    2024年02月01日
    浏览(61)
  • carla环境安装、运行以及版本切换(Windows)

    本栏目将介绍carla,包括安装、pythonAPI运行、carla的技术点介绍、自行开发脚本玩转carla,以及自定义的控制carla中的车辆,通过carla生成感知数据集等方法。 1. Carla(windows)环境安装、运行 支持操作系统:Windows 渲染引擎版本:Unreal Engine 4.26 硬件配置:显卡4G+,内存16G+(8G也

    2024年02月08日
    浏览(51)
  • 如何判断 vite 的运行环境是开发模式还是生产模式 production? development?

    vite 有两种获取当前运行环境模式的方法: 官方说明: 完整说明地址: https://cn.vitejs.dev/guide/env-and-mode.html#node-env-and-modes 比如我在开发模式和生产模式的请求地址不一样,我是这么用的:

    2024年01月22日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包