python的Flask生产环境部署说明照做成功

最近刚好在我的Linux服务器上部署一个Web服务, 使用了python的Flask框架, 因此本文主要介绍flask在linux环境上的部署。

Flask 是一个轻量级的 Python Web 框架,非常适合快速开发小型到中型的 Web 应用。然而,Flask 自带的服务器通常是用于开发目的,不适合直接用于生产环境。因此, 这里就需要 Gunicorn 这样的 WSGI HTTP 服务器来提供更强大、更稳定的服务。

本文主要围绕使用Gunicorn 进行flask项目在生产环境的部署, Gunicorn有以下优势:

  • 性能牛:Gunicorn 是一个预先分叉的、多工作进程的模型,能够更好地处理并发请求,显著提高应用的处理能力。

  • 简易性和可扩展性:Gunicorn 配置简单,与 Flask 应用无缝集成。它还支持多种部署配置,可以轻松扩展以应对不同的负载需求。

  • 稳定性和安全性:与 Flask 内置服务器相比,Gunicorn 提供了更高的稳定性和安全性,这对于生产环境来说至关重要。

1 使用

安装环境

pip install gunicorn

gunicorn 是在Linux系统上运行的, 不太适用Windows系统.

准备应用

首先, 我们先有了一个简单的Flask项目, 简单或者复杂的都可以, 假设文件名称是flask_app.py 内容如下:

from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello():
    return "Hello, Orange!"

运行和部署

如果我们想简单的运行起来, 执行以下命令就行了:

gunicorn flask_app:app

flask_app 是我们Flask 应用入口文件的名称, appFlask 实例名称. 该命令会在8000端口启动一个进程的flask应用.

然后, 因为实际业务的需要, 我们还需要调整一些参数.

设置工作进程

使用**(-w--workers)**参数:这个选项用于指定工作进程的数量。一个好的起点是设置为 CPU 核心数的 2-4 倍。

gunicorn -w 5 flask_app:app
设置监听地址和端口

**(-b--bind)**:指定 Gunicorn 监听的 IP 地址和端口。默认是 127.0.0.1:8000

gunicorn -w 4 -b 0.0.0.0:5000 flask_app:app
超时时间

**(--timeout)**:设置工作进程的超时时间,单位是秒。如果工作进程在这段时间内没有响应,它将被重启。

gunicorn --timeout 120 -w 4 flask_app:app
日志文件和级别

**(--access-logfile--log-level)**:配置访问日志和日志级别。

gunicorn -w 4 --access-logfile - --log-level debug flask_app:app
守护进程(后台运行)

添加 --daemon 选项我们可以启用守护进程模式。

gunicorn --daemon -w 4 flask_app:app
环境变量

我们有时候还需要对应用设置一些环境变量, 因此这个可以通过 --env 选项实现。

我们设置一个环境变量MY_ENVPRODUCT的环境变量:

gunicorn --env MY_ENV=PRODUCT flask_app:app
配置文件

当然, 在一些复杂的情况下, 我们还可以使用配置文件来进行部署:

我们先创建一个 Python 文件,比如 gunicorn_config.py,然后在里面设置我们需要的 Gunicorn 的配置选项。

# 绑定的 IP 和端口
bind = "0.0.0.0:8000"

# 工作进程数
workers = 4

# 工作模式
worker_class = 'gevent'

# 超时时间
timeout = 120

# 访问日志路径
accesslog = './logs/access.log'

# 错误日志路径
errorlog = './logs/error.log'

# 日志级别
loglevel = 'debug'

运行这个配置文件:

gunicorn -c gunicorn_config.py flask_app:app
相关推荐
云空4 分钟前
《Python 与 SQLite:强大的数据库组合》
数据库·python·sqlite
凤枭香1 小时前
Python OpenCV 傅里叶变换
开发语言·图像处理·python·opencv
测试杂货铺1 小时前
外包干了2年,快要废了。。
自动化测试·软件测试·python·功能测试·测试工具·面试·职场和发展
艾派森1 小时前
大数据分析案例-基于随机森林算法的智能手机价格预测模型
人工智能·python·随机森林·机器学习·数据挖掘
小码的头发丝、1 小时前
Django中ListView 和 DetailView类的区别
数据库·python·django
Chef_Chen2 小时前
从0开始机器学习--Day17--神经网络反向传播作业
python·神经网络·机器学习
千澜空3 小时前
celery在django项目中实现并发任务和定时任务
python·django·celery·定时任务·异步任务
斯凯利.瑞恩3 小时前
Python决策树、随机森林、朴素贝叶斯、KNN(K-最近邻居)分类分析银行拉新活动挖掘潜在贷款客户附数据代码
python·决策树·随机森林
yannan201903133 小时前
【算法】(Python)动态规划
python·算法·动态规划
蒙娜丽宁3 小时前
《Python OpenCV从菜鸟到高手》——零基础进阶,开启图像处理与计算机视觉的大门!
python·opencv·计算机视觉