Gunicorn+Supervisor部署Flask

Flask Web程序部署成服务,可以采用的一套方案是Gunicorn+Supervisor。

1. 安装Gunicorn+Supervisor

首先在项目的pipenv中,安装Gunicorn。

pipenv install gunicorn

接下来安装Supervisor,Mac安装参考了如下文章

brew install supervisor

完毕后,supervisor安装在/usr/local/Cellar/supervisor,其配置文件在
/usr/local/etc/supervisord.conf,需要修改的地方有两处:

  • 最后一行修改如下,指定存放process配置文件的path
[include]
files = /usr/local/etc/supervisord.d/conf/*.conf
  • 打开注释(可选),浏览器访问127.0.0.1:9001,可以看到可视化界面
[inet_http_server]         ; inet (TCP) server disabled by default
port=127.0.0.1:9001        ; ip_address:port specifier, *:port for all iface
username=user              ; default is no username (open server)
password=123               ; default is no password (open server)

新建文件夹/usr/local/etc/supervisord.d/conf/,最后执行

supervisorctl -c /usr/local/etc/supervisor.conf

2. 配置process

以BlueBlog为例,首先需要把待部署的Web包装成WSGI服务,在blueblog的文件中新建wsgi.py

import os
from dotenv import load_dotenv

dotenv_path = os.path.join(os.path.dirname(__file__), '.env')
if os.path.exists(dotenv_path):
    load_dotenv(dotenv_path)

from blueblog import create_app

app = create_app('production')

因为是生产环境,需要指定为生产的配置production。所以config.py文件也需要有对应的ProductionConfig。
此外需要新建.env

FLASK_APP=blueblog
FLASK_ENV=production
FLASK_CONFIG=production

在/usr/local/etc/supervisord.d/conf/新建blueblog.conf,内容为:

[program:blueblog]
command=pipenv run gunicorn -w 4 -b 0.0.0.0:8000 wsgi:app
directory=/Users/guoxingyu/Documents/work/python/flask/tmp/blueblog
user=guoxingyu
autostart=true
autorestart=true
stopasgroup=true
killasgroup=true

其中directory是Web代码的path,

command是执行的命令,gunicorn -w 4 -b 0.0.0.0:8000 wsgi:app
-w 指开4个worker

-b 指bind 0.0.0.0:8000

Supervisor会自动检测到新conf的加入,并执行相关配置

通过supervisorctl stauts可以看到服务已经起来了。


访问浏览器也可以查阅Flask服务。


修改conf后可以update supervisorctl

supervisorctl update

此外电脑重启开机后,需要执行supervisord重启supervisor,再执行supervisorctl命令

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章