1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 使用 gunicorn 部署flask项目

使用 gunicorn 部署flask项目

时间:2020-03-13 15:12:34

相关推荐

使用 gunicorn 部署flask项目

1、WSGI协议

Web框架致力于如何生成HTML代码,而Web服务器用于处理和响应HTTP请求。Web框架和Web服务器之间的通信,需要一套双方都遵守的接口协议。WSGI协议就是用来统一这两者的接口的。

2、WSGI容器

常用的WSGI容器有Gunicorn和uWSGI,但Gunicorn直接用命令启动,不需要编写配置文件,相对uWSGI要容易很多

3、gunicorn介绍

gunicorn是一个python Wsgi http server,只支持在Unix系统上运行,来源于Ruby的unicorn项目。Gunicorn使用prefork master-worker模型(在gunicorn中,master被称为arbiter),能够与各种wsgi web框架协作。

为啥要用 gunicorn

Flask 是一个 Platform,他本身并不包括 Web Server,为了使用方便,Flask 内置了一个 Werkzeug wsgi server 但是这个 server 并不高效。 如果是工业部署的话, 就需要用 Gunicorn 去替代掉这个内置的 Wsgi Server.

简单说下几种部署方式

Flask 内置 WebServer + Flask App = 弱鸡版本的 Server, 单进程(单 worker) / 失败挂掉 / 不易 ScaleGunicorn + Flask App = 多进程(多 worker) / 多线程 / 失败自动帮你重启 Worker / 可简单Scale多 Nginx + 多 Gunicorn + Flask App = 小型多实例 Web 应用,一般也会给 gunicorn 挂 supervisor

在生产环境中:一般都是请求的走向都是 Nginx->gunicorn->flask/django app

4、gunicorn安装

gunicorn安装非常简单,使用命令pip install gunicorn即可。一般使用它,主要是为使用其异步的worker模型,还需要安装对应的异步模块。

$ pip install gunicorn$ pip install greenlet # 使用异步必须安装$ pip install eventlet # 使用eventlet workers$ pip install gevent # 使用gevent workers

5、gunicorn使用

这里使用gunicorn来部署一个flask项目举例,此处flask框架的使用不过多阐述,不是本文的重点。

如下例子,保存为app.py

from flask import Flaskapp = Flask(__name__)@app.route("/")def hello():return "Hello World!"

gunicorn通常使用的参数如下:

-c CONFIG, --config=CONFIG# 设定配置文件。-b BIND, --bind=BIND # 设定服务需要绑定的端口。建议使用HOST:PORT。-w WORKERS, --workers=WORKERS # 设置工作进程数。建议服务器每一个核心可以设置2-4个。-k MODULE # 选定异步工作方式使用的模块。

在shell中输入你的启动配置,比如:

gunicorn -w 3 -b 127.0.0.1:8080 app:app# 此处app:app中,第一个app为flask项目实例所在的包,第二个app为生成的flask项目实例

这样运行正常就可以启动服务器了。

如果要通过网络访问,则需要绑定不同的地址(也可以同时设置监听端口),设置0.0.0.0可以监听到所有ip的请求:

gunicorn -b 0.0.0.0:8080 app:app

6、绑定端口

linux通常会禁止绑定使用1024以下的端口,除非在root用户权限。很多人在使用gunicorn时试图将其绑定到80或者443端口,发现无效。如果想绑定到这些端口,常见的有如下的几种方法:

使用Nginx代理转发。sudo启动gunicorn。安装额外的程序。

7、结束gunicorn服务进程

使用ps -ef | grep gunicorn命令找出gunicorn所有进程。

# ps -ef | grep gunicornroot16843 23035 0 Oct14 ? 00:00:02 /root/Envs/myflask/bin/python3.6 /root/Envs/myflask/bin/gunicorn -w 3 -b 172.17.0.12:80 app:approot22445 23035 0 Oct04 ? 00:00:15 /root/Envs/myflask/bin/python3.6 /root/Envs/myflask/bin/gunicorn -w 3 -b 172.17.0.12:80 app:approot22581 23035 0 Oct11 ? 00:00:05 /root/Envs/myflask/bin/python3.6 /root/Envs/myflask/bin/gunicorn -w 3 -b 172.17.0.12:80 app:approot230351 0 Sep27 ? 00:04:11 /root/Envs/myflask/bin/python3.6 /root/Envs/myflask/bin/gunicorn -w 3 -b 172.17.0.12:80 app:app

然后使用 kill -9 进程ID 命令来杀掉进程,注意,我们找到主进程杀掉即可,子进程会随之结束,在上例中,主进程号为23035.

# kill -9 23035# ps -ef | grep gunicorn

杀掉进程后,稍等几秒,再使用ps -ef | grep gunicorn查看,发现gunicorn服务进程已全部杀掉。

8、配置文件

通过gunicorn -h可以看到gunicorn有非常多的配置项,因此通常会写成一个配置文件来进行配置。

比如gunicorn.conf文件

# gunicorn.confbind = "0.0.0.0:5000"workers = 4backlog = 2048pidfile = "log/gunicorn.pid"accesslog = "log/access.log"errorlog = "log/debug.log"timeout = 600# debug=False生产环境不用这个配置项,但调试的时候debug=True还是挺好用的。而且,开启debug项后,在启动gunicorn的时候可以看到所有可配置项的配置debug=Falsecapture_output = True

注意上面log项,如果需要将这些log文件统一放到log文件夹下,事先要先建好,不然运行时会报错。

运行代码为:

gunicorn --config gunicorn.conf main:app

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。