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可以看到服务已经起来了。
1580737878756.jpg
访问浏览器也可以查阅Flask服务。
1580737941412.jpg
修改conf后可以update supervisorctl
supervisorctl update
此外电脑重启开机后,需要执行supervisord重启supervisor,再执行supervisorctl命令
网友评论