当前位置: 代码迷 >> 综合 >> flask+gunicorn+supervisor执行代理服务
  详细解决方案

flask+gunicorn+supervisor执行代理服务

热度:51   发布时间:2023-12-27 09:37:05.0

文章目录

  • 一、前期准备(在服务器环境下)
  • 二、中期配置
    • 2.1 gunicorn
    • 2.2 supervisor
  • 三、后期执行

一、前期准备(在服务器环境下)

  • 准备flask项目:这是由用户自己写好的项目,并上传到服务器上,并记住其项目本地运行ip和端口:0.0.0.0:8092

  • 安装gunicorn:pip install gunicorn 或者 sudo apt-get install gunicorn
    gunicorn一个被广泛使用的高性能的python WSGI UNIX HTTP服务器,Gunicorn是主流的WSGI容器之一,它易于配置,兼容性好,CPU消耗很少.

  • 安装supervisor:sudo apt-get install supervisor
    Supervisor是一个客户端/服务器系统,采用 Python(2.4+) 开发的,它是一个允许用户管理,基于 Unix 系统进程的 Client/Server 系统,提供了大量功能来实现对进程的管理。

二、中期配置

2.1 gunicorn

gunicorn比较简单,只要配置好一句命令:
gunicorn --workers=6 app:app -b 0.0.0.0:8888

  • –workers是开启的进程数量,推荐值是CPU个数*2+1,CPU个数的获取方式
  • 第一个app是模块文件的名字,如果包含文件夹可以使用.连接
  • 第二个app是文件中Flask实例的名字
  • -b 指定监听地址和端口

举个例子:在flask中,运行代码如下:

from flask import Flaskapp = Flask(__name__)
@app.route('/')
def hello_world():return 'Hello'
if __name__ == '__main__':app.run(host='0.0.0.0', port=8000)

则在gunicorn中配置命令为:
gunicorn --workers=2 -b0.0.0.0:8000

2.2 supervisor

安装完supervisor后,会出现一个supervisor文件夹,里面存放着主配置文件supervisord.conf和自定义配置文件目录supervisord.d(目录名可以更改为conf)

  1. 配置主配置文件supervisord.conf
    打开supervisord.conf文件,发现有很多配置信息,不要改动里面的信息,我们使用 vim supervisord.conf 编辑文件在尾部添加如下信息:
[include]
files = conf/*.conf   

解释:[include]声明添加自定义配置文件,files为自定义文件路径

  1. 编辑自定义配置文件
    首先新建自定义配置文件:进入到conf文件夹,并新建文件 touch test.conf,注意尾部为.conf
    然后编辑文件: vim test.conf,标注*号的是必须要写的
 * [program:项目名称]* command = gunicorn 命令 (上面第一步中有说明)*directory = 项目绝对路径autostart = falseautorestart = falsestdout_logfile=运行日志.log (需自己新建)stderr_logfile=运行错误日志.log (需自己新建)

更多具体的命令,请移步supervisor配置详解

三、后期执行

中期配置完成后,接下来就可以使用执行命令控制服务。
在supervisor目录下,输入命令supervisorctl,即可进入到管理服务中,会显示已存在的服务有那些及其运行状态,如图所示:
在这里插入图片描述
在supervisor控制台中,常见的管理控制命令有:

status      显示服务状态
start objectname  启动某服务
stop objectname  停止某服务
restart objectname  重启某服务
exit  退出supervisor管理
update  更新所有服务的配置信息
reload  重新加载所有服务并启动
shutdown  关闭所有服务

设置supervisor为开机自启,输入以下命令:
systemctl start supervisord.service
systemctl enable supervisord.service