用Gunicorn部署Flask&Django, since 2022-04-06

(2022.04.06 Wed)
注:Nginx+Gunicorn+web framework是完整的部署流程,本文只介绍用Gunicorn部署web framework的流程作为alternative。

Gunicorn是什么?

Gunicorn是Python WSGI HTTP服务器,对web框架具有广泛兼容性,易实现,占用服务器资源少,速度快。常和Nginx一起使用,因其有互补特性。
The Gunicorn "Green Unicorn" is a Python Web Server Gateway Interface HTTP server. It is a pre-fork worker model, ported from Ruby's Unicorn project. The Gunicorn server is broadly compatible with a number of web frameworks, simply implemented, light on server resources and fairly fast. It is often paired with NGINX, as the two have complementary features.

WSGI是什么?

一个标准和典型的web应用流程如下:

浏览器发送请求

  • web应用接收到请求,并生成HTML文档作为响应
  • web应用将HTML文档作为响应的body发送给客户端
  • 客户端接收到响应,取出body并展示HTML

在这个过程中,web应用本质是一个socket服务端,用户是socket客户端。

在web应用处理响应的过程中,包括对HTTP请求和响应的处理,HTML的解析和生成,响应内容填充到HTML文档中等等。其中任何涉及HTTP解析的部分,比如HTTP接收请求、解析请求、发送响应,都需要深度了解HTTP协议和规范。另外关于TCP/IP的连接,HTML文件的格式等等,也是底层性质的基础工作。理想情况是web应用仅仅处理业务请求,即如何响应球球,而这些基础性质的繁重工作交给一个统一的接口完成,接口处理业务以外的部分工作。这个接口就是WSGI。

更多WSGI内容,查看Django基础,https://www.jianshu.com/p/3d326774f020。

为Flask服务部署Gunicorn

写好一个Flask服务,如test.py

import flask

app = flask.Flask(__name__)

@app.route('/')
def hello():
    return 'this is a Flask service.'

使用pip安装Gunicorn,如果安装过程缓慢,选用国内pip服务器,如清华,或者修改pip连接服务器的设置。

>> pip install gunicorn
# 如果安装过程缓慢,选用国内pip服务器,如清华
>> pip install gunicorn -i https://pypi.tuna.tsinghua.edu.cn/simple
# 或者修改pip连接服务器的设置
>> python -m pip install --upgrade pip
>> pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

可选择性安装若干异步框架

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

之后就可以用Gunicorn启动Flask服务了

>> gunicorn -w 4 -b 0.0.0.0:8000 test:app 

参数说明

  • -w: 设置进程数
  • -b: 设置需要绑定的ip和端口,其中如果是0.0.0.0则表示同LAN中其他机器可访问,127.0.0.1则不可访问
  • test:app: 其中的test是运行Flask的程序,也就是test.py文件,app是程序中的实例,也即test.py中的app = flask.Flask(__name__)

之后就可以用过localhost:8000/(本地浏览器)访问。
如果通过局域网内的其他设备访问该连接,可先查询host IP地址,方法是在terminal中输入如下指令,找到inet对应的ip即可。

>> ifconfig
...
    inet 192.168.3.8 netmask 0xffffff00 broadcast 192.168.3.255
...

有了host ip,即可在LAN的其他设备上通过192.168.3.8:8000/访问Gunicorn部署的Flask程序。访问效果和Flask直接起服务相同,即python3 test.py

你可能感兴趣的:(用Gunicorn部署Flask&Django, since 2022-04-06)