Python3 flask项目celery异步队列使用supervisor管理gunicorn部署

1. gunicorn编写配置文件

# 并行工作进程数
workers = 3
# 使用gevent模式,还可以使用sync 模式,默认的是sync模式
worker_class = 'gevent'
# 指定每个工作者的线程数
threads = 3
# 监听内网端口5000
bind = '127.0.0.1:5000'
# 设置守护进程,将进程交给supervisor管理
daemon = 'true'
# 设置最大并发量
worker_connections = 2000
# 超时配置
timeout=180
# 设置访问日志和错误信息日志路径
accesslog = '/var/log/gunicorn_acess.log'
errorlog = '/var/log/gunicorn_error.log'
# 设置日志记录水平
loglevel = 'warning'

2. celery启动时一定要指定日志文件

# celery 基本用法 使用 celery worker -h 自行了解
celery -A app.tasks worker -c 3 --loglevel=info --logfile=/var/www/afaf/run.log

3. supervisor部署管理进程

  • 由于用的virtualenv隔离了生产环境,所以还是编写个shell脚本来启动项目吧
  • 大多数Linux系统默认的bash shell基本上都是dash shell,所以编写的shell脚本一定要指定环境要不然会出错。常见的如source命令不能使用
    #!/bin/bash  非常重要
    source /var/www/flask-wisdomtree/venv/bin/activate &&
    /var/www/flask-dad/venv/bin/gunicorn -c gunicorn.conf manage:app >> /dev/null 2>&1 &&
    /var/www/flask-adaa/venv/bin/celery -A app.tasks worker -c 3 --loglevel=info --logfile=/var/www/flask-wisdomtree/run.log >> /dev/null 2>&1

4. supervisor配置

  • 跳过安装
  • 一定要先看supervisor配置文件(自己就被坑过),主要看supervisor.conf下边内容
    # 注意看引入配置文件后缀
    # 曾经我就在这被坑过,习惯行的装好supervisor后,就在conf.d下新建xxx.conf配置文件,然而启动的时候怎么都不生效
    [include]
    files = /etc/supervisor/conf.d/*.ini
  • aaa.conf内容如下
    [program:flask-wisdomtree]
    process_name=%(program_name)s_%(process_num)02d
    command=/var/www/aaa/run.sh
    stdout_logfile=/var/www/aaa/run.log
    stdout_logfile_maxbytes=50MB
    stdout_logfile_backups=10
    user=nginx
    numprocs=3
    directory=/var/www/aaa
    autostart=true
    autorestart=true
    redirect_stderr=true

5. 启动supervisor后,监听日志文件没错误就是成功了(supervisor、gunicorn、celery的日志)

# 开启supervisor 服务
service supervisor start
# 更新配项目置文件
supervisorctl reread
# 生效
supervisorctl reread
# 其余命令自己看文档