nginx+Gunicorn部署Flask项目

3,444 阅读2分钟

本文作为学习记录,将本人觉得有用的文章和方法进行记录,请访问 原文

1、首先安装Gunicorn

pip install gunicorn

2、在入口文件的app.run()加上以下内容

from werkzeug.contrib.fixers import ProxyFix
app.wsgi_app = ProxyFix(app.wsgi_app)

例:

from flask import Flask

app = Flask(__name__)


@app.route('/')
def hello_world():
    return 'Hello World!'

if __name__ == '__main__':
    from werkzeug.contrib.fixers import ProxyFix
    app.wsgi_app = ProxyFix(app.wsgi_app)
    app.run()

3、启动Gunicorn

最简单的方式为

gunicorn 入口文件名:app

默认是监听127.0.0.1:8000

如果是要处理高并发则要开多个进程和修改监听端口的画

gunicorn -w 4 -b 127.0.0.1:8000 入口文件名:app

这样就可以启动4个进程同时处理HTTP请求,提高系统的使用效率及性能。 还可以把端口8000改为其他

而在实际应用中,应使用后台执行的方式启动服务

nohup 启动服务的命令 &

nohup gunicorn -w 4 -b 127.0.0.1:8000 入口文件名:app &

这时你可以在本机的浏览器上访问127.0.0.1:8000,浏览器上就会出现Hello World!

注意:如果是想通过外网访问的话就要把ip改为内网的ip

4、配置nginx

配置改为

server {
    listen 80;
    server_name example.org; # 这是HOST机器的外部域名,用地址也行

    location / {
        proxy_pass http://127.0.0.1:8000; # 这里是指向 gunicorn host 的服务地址
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
 }

这样启动之后80端口就可以转发到8000端口了

5、检查配置

nginx -t

若出现一下内容,则表示配置成功

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

6、更新nginx配置

nginx -s reload

在已经运行了Gunicorn的前提下,在浏览器访问127.0.0.1就会出现Hello World!了

7、重启Gunicorn

输入命令

pstree -ap|grep gunicorn

出现以上内容,可以看到,其中30693为主进程号,使用以下命令,重启Gunicorn

kill -HUP 30693