今天登陆服务器发现python占用了相当高比例的cpu,然后发现是本站点使用flask做的的一些web小工具带来的,因此总算明白了启动flask的时候为什么提示不要在生产环境直接部署。0-0。因此决定部署好flask的生产环境,由于大部分人都对gunicorn评价很好,容易配置,因此本文也使用gunicorn来部署flask的生产环境了。
1.安装gunicorn
直接yum安装就可以了。
pip install gunicorn
2.gunicorn命令启动flask程序
先告知gunicorn后台启动命令
gunicorn -w 4 flaskr:application --bind=127.0.0.1:5000 --daemon
-w 4:是指预定义的工作进程数为4
-bind=:制定工作端口,这里选择与dev模式一样的端口5000
-deamon:后台运行
> “flaskr:application”:这里flaskr是文件名称,application为应用名称
当然gunicorn还有很多的配置,由于我么你是用nginx反代,这些配置就够用了。
3.flask样例
再多的说明都替代不了一个实例来的给力。
文件名flaskr.py
from flask import Flask,redirect
from flask import request
from flask import render_template
def create_app(test_config=None):
# create and configure the app
app = Flask(__name__, instance_relative_config=True)
app.config.from_mapping(
SECRET_KEY='production',
DATABASE=os.path.join(app.instance_path, 'flaskr.sqlite'),
)
if test_config is None:
# load the instance config, if it exists, when not testing
app.config.from_pyfile('config.py', silent=True)
else:
# load the test config if passed in
app.config.from_mapping(test_config)
# ensure the instance folder exists
try:
os.makedirs(app.instance_path)
except OSError:
pass
# a simple page that says hello
@app.route('/')
def hello_world():
return 'Hello, World!'
return app
application = create_app()
if __name__ == '__main__':
application.run()
直接运行上面的gunicorn命令后,使用
wget 127.0.0.1:5000
如果返回了hello,world的话就说明配置成功了。
4.nginx反向代理本地的flask web程序
nginx的配置文件中添加代理本地flask程序的端口就行了
server
{
listen 80;
server_name 127.0.0.1;#服务器公网ip或者域名
root /www/wwwroot/www.bobobk.com;
location / {
proxy_pass http://localhost:5000;
proxy_redirect off;
proxy_set_header Host $host;}
}
到这里就完成了使用gunicorn在生产环境配置flask的全过程了,现在看看资源占用情况。
top
可以看到在使用了生产环境配置后,flask的cpu占用率迅速下降,对于低配置的云服务器来说很重要,现在我的1g内存的小鸡终于又可以顺畅地运行起来了。。。