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命令

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