python supervisor flask_supervisor配合uwsgi部署flask应用
這已經是第N次來部署flask應用了, 但是每次都花了不少時間在配置上面, 這里一次性記錄下, 備個忘~
寫在前面
其實使用uwsgi來部署flask應用在官網上已經有較為詳細的 文檔 了, 推薦先讀一下.
先解決一些問題:
為何使用 uwsgi 來部署應用? 方便管理; 較為常見的部署方式; 可配置性較強
為何使用 supervisor 來管理? 方便管理
下面介紹嘗試用它倆部署個最簡單的flask應用.
準備
首先請使用pip安裝好flask, uwsgi, supervisor. 我們的小應用是這樣子的:
test.py
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello World!"
if __name__ == "__main__":
app.run()
配置uwsgi
uwsgi我們采用 master + 多進程 + non-daemon 方式來啟動我們的應用, 對應的配置文件是像這樣子的:
uwsgi.ini
[uwsgi]
http = 0.0.0.0:8080
## 指定應用目錄
chdir = /path/of/test.py
## 配置下訪問日志格式
log-format = '%(addr) - %(user) [%(ltime)] "%(method) %(uri) %(proto)" %(status) %(size) %(msecs)'
need-app = 1
master = 1
processes = 2
umask = 022
module = test:app
這里使用了 http , 而非 http-socket , 推薦可以閱讀下uwsgi的 quickstart
編輯好配置文件后, 使用 uwsgi --ini uwsgi.ini 來看看我們應用是否ok. uwsgi的參數特別多, 推薦使用前閱讀一下官方文檔.
配置supervisor
使用pip安裝的supervisor因為沒有默認的配置文件, run起來稍微有點麻煩, 這里提供一個最最簡單的可用的配置(用對應發行版的包更好):
supervisord.conf
[unix_http_server]
file = /home/of/supervisor/etc/supervisord/supervisor.sock
[supervisord]
logfile = /home/of/supervisor/etc/supervisord/log/supervisord.log
loglevel = info
pidfile = /home/of/supervisor/etc/supervisord/supervisord.pid
[supervisorctl]
serverurl = unix:///home/of/supervisor/etc/supervisord/supervisor.sock
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
[include]
files = /home/of/supervisor/etc/supervisord/conf/*.conf
我們把所有supervisor的信息都存放到 /home/of/supervisor 里面, 然后我們做個軟鏈放到 /etc/supervisord.conf (默認配置文件), 避免supervisorctl啟動時指定配置文件.
然后啟動下supervisord, 順便看下supervisord.log日志;)
接下來我們要做的就是把各個應用的supervisor配置放到 etc/supervisord/conf/ 下面. 簡單配置下test對應的supervisor配置:
test.supervisor.conf
[program:test]
command = uwsgi --ini /path/of/test.uwsgi.conf
autorestart = true
redirect_stderr = true
stdout_logfile = /path/of/test.log
stopsignal = INT
請注意 stopsignal = INT 這個配置, 因為supervisor使用 SIGTERM 來停止應用, 而uwsgi則是接手 SIGINT 來停止的, 所以我們需要顯示修正下. 更多信息請參考 這里
改完之后需要使用 supervisorctl reload 來讓supervisord重新加載配置文件. 可以通過 supervisorctl status/stop/restart test 分別來 查看 , 停止 , 重啟 我們的test應用.
最后
到這里整個應用就部署完畢了, 管理起來也蠻方便的. 如果有更細化的需求基本可以通過配置uwsgi和supervisor的配置來實現.
總結
以上是生活随笔為你收集整理的python supervisor flask_supervisor配合uwsgi部署flask应用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 河南最高地表温度达74.1℃!高温橙色预
- 下一篇: 数据结构中“图”的相关概念理解