Flask 学习-91.使用 gunicorn 部署 flask

Posted 上海-悠悠

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flask 学习-91.使用 gunicorn 部署 flask相关的知识,希望对你有一定的参考价值。

前言

flask 启动访问平常开发的时候可以用命令行flask run运行,正式部署到线上环境不会这样用。

Gunicorn 环境准备

Web框架致力于如何生成html代码,而Web服务器用于处理和响应HTTP请求。Web框架和Web服务器之间的通信,需要一套双方都遵守的接口协议。WSGI协议就是用来统一这两者的接口的
常用的 WSGI 容器有 Gunicorn 和 uWSGI,用 Gunicorn 可以直接命令启动,不需要编写配置文件,相对uWSGI要容易很多,这里选择用Gunicorn作为容器。
Gunicorn 是一个Python WSGI HTTP服务器, 只支持在Unix/Linux环境下运行。

项目结构与代码

from flask import Flask, render_template

app = Flask(__name__)


@app.route('/')
def hello_world():
    return 'Hello World!'


@app.route('/hello')
def hello():
    return render_template('hello.html')


if __name__ == '__main__':
    app.run()

hello.html内容

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>demo</title>
</head>
<body>
<p>hello world</p>

</body>
</html>

先准备一台Unix/Linux 服务器安装 python3.8环境 , 不支持windows系统
安装flask 相关的包

pip3 install flask 

安装 Gunicorn

pip install gunicorn

官方文档示例

Gunicorn ‘Green Unicorn’ 是一个 UNIX 下的 WSGI HTTP 服务器,它是一个 移植自 Ruby 的 Unicorn 项目的 pre-fork worker 模型。它既支持 eventlet , 也支持 greenlet 。在 Gunicorn 上运行 Flask 应用非常简单:

$ gunicorn myproject:app

Gunicorn 提供许多命令行参数,可以使用 gunicorn -h 来获得帮助。下面 的例子使用 4 worker 进程( -w 4 )来运行 Flask 应用,绑定到 localhost 的 4000 端口( -b 127.0.0.1:4000 ):

$ gunicorn -w 4 -b 127.0.0.1:4000 myproject:app

gunicorn 命令需要你应用或者包的名称和应用实例。如果你使用工厂模式,那么 可以传递一个调用来实现:

$ gunicorn "myproject:create_app()"

启动服务

使用 gunicorn -h查看相关命令行帮助, 也可以检查 gunicorn 是否安装成功

常用的几个参数

-c CONFIG    : CONFIG,配置文件的路径,通过配置文件启动;生产环境使用;

-b ADDRESS   : ADDRESS,ip加端口,绑定运行的主机;

-w INT, --workers INT:用于处理工作进程的数量,为正整数,默认为1;

-k STRTING, --worker-class STRTING:要使用的工作模式,默认为sync异步,可以下载eventlet和gevent并指定

-p FILE, --pid FILE:设置pid文件的文件名,如果不设置将不会创建pid文件

--error-logfile FILE, --log-file FILE  :  要写入错误日志的文件目录。

--log-level LEVEL   :   错误日志输出等级。

-t INT, --timeout INT:超过这么多秒后工作将被杀掉,并重新启动。一般设定为30秒;

-e ENV, --env ENV: 设置环境变量;

启动命令

gunicorn -w 2 -b 0.0.0.0:8001 app:app

启动成功日志

[root@iZ2vchn8sk983jm605yhshZ flask_web]# gunicorn -w 2 -b 0.0.0.0:8001 app:app
[2022-10-15 19:41:21 +0800] [25918] [INFO] Starting gunicorn 20.1.0
[2022-10-15 19:41:21 +0800] [25918] [INFO] Listening at: http://0.0.0.0:8001 (25918)
[2022-10-15 19:41:21 +0800] [25918] [INFO] Using worker: sync
[2022-10-15 19:41:21 +0800] [25921] [INFO] Booting worker with pid: 25921
[2022-10-15 19:41:21 +0800] [25922] [INFO] Booting worker with pid: 25922

启动端口是8001端口,服务器只要开放对应端口,就可以访问了
浏览器输入地址http://服务器ip:8001/hello

以上是关于Flask 学习-91.使用 gunicorn 部署 flask的主要内容,如果未能解决你的问题,请参考以下文章

Flask 学习-92.使用 gunicorn 部署 flask 出现NoAuthorizationError: Missing JWT in headers or cookies问题

如何在多线程模式下使用 Gunicorn 运行 Flask

使用 Gunicorn + Nginx + Flask 有啥好处? [复制]

如何使用 Flask-Script 和 Gunicorn

flask中gunicorn的使用

使用 flask_socketio + flask + gunicorn + nginx 获得 502 bad gateway 和 400 bad request