今天登陆服务器发现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

top_check_gunicon

可以看到在使用了生产环境配置后,flask的cpu占用率迅速下降,对于低配置的云服务器来说很重要,现在我的1g内存的小鸡终于又可以顺畅地运行起来了。。。