美文网首页
Flask + Gunicorn + Supervisor 简易

Flask + Gunicorn + Supervisor 简易

作者: SingleDiego | 来源:发表于2017-12-28 11:31 被阅读184次

    先交代背景:

    • 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    # 重启配置文件修改过的程序
    

    相关文章

      网友评论

          本文标题:Flask + Gunicorn + Supervisor 简易

          本文链接:https://www.haomeiwen.com/subject/rkmmgxtx.html