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