0%

2020-04-01 基于Flask+Gunicorn+Nginx在centos部署实战

2020-04-01 基于Flask+Gunicorn+Nginx在centos部署实战

参考:Flask 应用如何部署

Gunicorn运行与配置

具体的流程在上述两个参考中已经有提到了,本人就提一些我自己的想法和看法好了。

首先是我想折腾的目的。就是为了使用jieba分词来开发一个分词api,为此需要学习一下python如何部署服务器。

因此,在百度之后选择了Flask这个框架,可以说是非常好用了,借助装饰器可以非常方便的写出服务器后台。

下面看一个最简单的flask案例。

1
2
3
4
5
6
7
8
9
10
from flask import Flask, abort, request

app = Flask(__name__)

@app.route('/')
def hello_world():
return 'hello world'

if __name__ == '__main__':
app.run(port=8080, host='0.0.0.0', debug=True)

运行之后,打开浏览器直接访问8080就能看见一个hello world了。

下面来看一个稍复杂的案例,如果理解了那么就能写出服务器后台了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
from flask import Flask, abort, request

app = Flask(__name__)


@app.route('/test/<params>', methods=['POST'])
def test_post(params):
print('form', request.form)
print("json", request.json)
print("args", request.args)

return {
'params': params,
'body': request.json,
'query': request.args
}, 200


@app.route('/test/<params>', methods=['GET'])
def test_get(params):
print('params', params)
print("args", request.args)
return {
'params': params,
'query': request.args
}, 200


if __name__ == '__main__':#这样写的目的是为了只在开发环境下debug
app.run(port=8080, host='0.0.0.0', debug=True)

一个一个来说吧。

首先是app.route这个装饰器。就是负责将路由挂载上去的。只要给一个函数添加这个装饰器,那就是一个路由了。而后面的参数methods则是指定了响应的方法,默认就是GET。注意这里的方法名都要大写。

接下来是request对象。这个对象有着多个字段。重要的就是request.form、request.json、request.args。在get方法中只有request.args。args中存放解析成字典对象的查询字符串,也就是URL中?后面的部分。

例如http://127.0.0.1:8080/test?msg=abc就会解析成{'msg':'abc'}。类似的,在post请求中,如果是表单格式的数据,会被解析到form中,如果是json格式,则会解析到request.json中。

在这里稍微注意一个细节,在args和form中所有的值都是字符串类型的,而json中则会按照js对象和python的数据类型互相转换。

接下来就是gunicorn使用了,直接pip install gunicorn安装即可

然后cd到脚本目录,执行gunicorn -w 2 -b :8080 app:app。注意app:app,前一个app是你要运行的脚本的名称,自己修改下命令行即可。

具体参数就不解释了,看gunicorn文档即可,只要顺利运行起来就已经完成了。

现在,一个python服务器就已经完成了。对于流量很小的情况,这也可以直接使用了。

不过在生产环境中,出于多方面的考虑,还是会在外面套一层nginx的转发,也是便于负载均衡和自动容灾。

简单的案例如下。

1
2
3
4
5
6
7
8
server {
listen 80;
listen [::]:80;

location / {
proxy_pass http://127.0.0.1:8080;
}
}

更多配置自己搜一下即可

本文作者:草梅友仁
本文地址: https://blog.cmyr.ltd/archives/4b6ecb36.html
版权声明:转载请注明出处!

坚持原创技术分享,您的支持将鼓励我继续创作!