flask笔记:部署flask
网上有很多种发布部署flask的方式,这里我使用的是Gunicorn、nginx发布flask。
先说明一下为什么不使用supervisor,之前我也是按照一些文章中的推荐采取nginx、gunicorn和supervisor的方式部署。但当我部署成功后,我发现了一个问题。
写到这里先介绍一下supervisor是什么:网上正规的解释为supervisor是linux进程管理的工具。而我将其理解为其对gunicorn命令封装后的工具(当然不只是针对gunicorn,像nginx也可以用其管理,这里是为了方便理解)。如果用supervisor启动flask,那么可以看成:supervisor调用gunicorn把flask的服务启动。
再说回问题:当我用supervisor的命令启动服务时,发现nginx的正则表达式的url路径转发规则发生了问题。导致访问url地址发生跳转不正常和404错误的现象。当然错误的原因不排除我安装配置的原因,这里不做详细的解释,只是我没有解决其问题。但就像之前介绍的supervisor只是对进程的管理工具(也可以理解为对gunicorn命令的封装),并不对服务本身有什么影响,只是日常启动、重启、停止服务时命令行多了一些而已罢了。
ok,下面说回正题,介绍如何部署flask。
1.安装python、virtualenv、flask、nginx
这些前置工作这里就不介绍了,网络上有很多文档和详细的步骤可以参考。
2.创建项目
创建一个文件夹test,在该文件夹创建test.py文件
mkdir test cd test touch test.py
编写一个简单的例子
#encoding:utf-8 from flask import Flask app = Flask(__name__) @app.route('/') def index(): return 'hello woody' @app.route('/test/') def test(): return 'test' @app.errorhandler(404) def page_not_found(error): return 'sorry that is my 404' #if __name__ == '__main__': # app.run(host='0.0.0.0',port=5000,debug=True)
3.安装gunicorn
最新版的virtualenv自带了gunicorn,如果没有,请在虚拟环境手动安装
pip install gunicorn
4.启动flask
进入刚创建的项目文件夹下,用命令行启动
cd test gunicorn -w2 -b0.0.0.0:9016 test:app-w指的是worker(启动的进程),后面跟的数字是worker的数量
-b指的是bind(绑定ip),后面是ip:port地址和端口号,0.0.0.0代表所有地址
test指的是入口文件的文件名
app指的是入口文件中Flask()对象的变量名,这里上面的程序中是app
注:如果想静默启动(后台启动),可以在后面加个 -D 的参数
gunicorn -w2 -b0.0.0.0:9016 test:app -D
5.nginx配置
location /api/ { proxy_pass http://127.0.0.1:9016/; #proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }
相关推荐
username=user ; should be same as http_username if set. password=123 ; should be same as http_passwo