(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
网友评论