Flask + Gunicorn + Supervisor 简易部署 web 应用

先交代背景:

  • Vultr 服务器
  • Ubuntu 16.04 系统
  • Python 3.5.2 版本
  • gunicorn (19.7.1)

安装所需的包

因为这一版本的 Ubuntu 系统自带了 Python 3.5.2,所以就不需要安装 Python 了。但是 pip 还是要自己手动安装的:

apt install python3-pip

注意: python3-pip 才是给 Python3 安装 pip 的,否则会给系统里的 Python2.7 安装。

这时 pip 可能版本较低,还缺少 setuptools 这个包,影响其他包的安装,我们把 pip 升级下,再把包装上:

pip3 install --upgrade pip
pip3 install setuptools 

然后安装 Flask:

pip3 install flask

安装 gunicorn:

apt install gunicorn

安装 gunicorn 的 python 相关的包:

pip3 install gunicorn

安装 supervisor:

apt install supervisor

基本的环境就准备好了。




用 gunicorn 启动 flask 项目

因为我使用的是 root 用户来操作,所以直接就在 /root 目录创建一个新目录来放置我们的 flask 项目文件:

mkdir myproject

进入 myproject 目录,并新建 myapp.py 文件:

cd myproject
touch myapp.py

用 vim 编辑 myapp.py 文件:

vim myapp.py

写入一个最简单的 flask 程序:

from flask import Flask

app = Flask(__name__)

@app.route('/')
def index():
    return 'hello world'
if __name__ == '__main__':
    app.debug = True
    app.run()

启动 flask 程序:

python3 myapp.py

因为我的服务器没有绑定域名,这时候要在浏览器打开我们的服务器的 IP 地址在加上 flask 默认的端口号 5000(如:http://111.11.111.111:5000/),就能看到喜闻乐见的 “hello world!”了(可能需要等待较长时间)。

但 flask 自带的这个服务器功能非常弱,仅供开发调试时候使用,我们需要一个高效能的服务器 Gunicorn 来运行我们的 flask 项目。

在 myproject 目录执行以下命令:

/usr/local/bin/gunicorn -w 4 -b 0.0.0.0:5000 myapp:app
  • /usr/local/bin/gunicorn: gunicorn 的安装路径,如果是在虚拟环境中运行的话该路径需要适当修改。

  • -w 4 : workers ,是开的进程数量

  • -b 0.0.0.0:5000: bind,绑定 IP 和端口,0.0.0.0 让公网能够访问。

执行上诉命令后,我们的 hello world 页面就能通过 gunicorn 工作了。

提示:如果搞不清楚, gunicorn 的安装路径,可用 find / -name 'gunicorn' 命令查找。




用 supervisor 管理进程

supervisor 默认的配置文件是放在 /etc/supervisor 路径中的,里面会有一个默认配置文件 supervisord.conf 和一个文件夹 conf.d,该文件夹用来放置单独某个进程的配置文件。

打开 supervisord.conf 我们只看最下面一行:

[include]
files = /etc/supervisor/conf.d/*.conf

这里定义了 supervisor 会读取 /etc/supervisor/conf.d/ 路径下的 conf 格式的配置文件。

我们进入 conf.d 路径,并新建一个配置文件 myapp.conf

cd conf.d
touch myapp.conf

编辑 myapp.conf 写入以下配置:

[program:myapp]
command=/usr/local/bin/gunicorn -w 4 -b 0.0.0.0:5000 myapp:app
directory=/root/myproject
autostart=true
autorestart=true  
  • command:启动命令,和上例启动 gunicorn 命令是一样的
  • directory:程序的启动目录,也就是 myapp.py 放在哪
  • autostart:自动开启
  • autorestart:进程挂了之后自动重启

现在就可以通过 supervisor 来管理 gunicorn 并运行 flask 项目了。

使用 supervisorctl 命令进入 supervisor 管理界面,首先更新配置:

> update

因为我们设置了自动启动,这时候项目已经启动了,hello world 页面能够正常工作了。

supervisor 还有以下常用命令:

> status    # 查看程序状态
> stop usercenter   # 关闭 usercenter 程序
> start usercenter  # 启动 usercenter 程序
> restart usercenter    # 重启 usercenter 程序
> reread    # 读取有更新(增加)的配置文件,不会启动新添加的程序
> update    # 重启配置文件修改过的程序
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,163评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,301评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,089评论 0 352
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,093评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,110评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,079评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,005评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,840评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,278评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,497评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,667评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,394评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,980评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,628评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,649评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,548评论 2 352

推荐阅读更多精彩内容