You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS Elastic Beanstalk上Celery配置问题:无进程配置更新

在AWS Elastic Beanstalk上为Django 2配置Celery(同实例部署)

我来帮你搞定在AWS Elastic Beanstalk上给Django 2配置Celery的事儿,同实例部署的话,咱们一步步来,先从你现有的02_packages.config开始完善,再补全Celery的启动和项目配置。

1. 完善依赖安装配置(02_packages.config)

你现有的配置已经在处理pycurl和基础yum依赖,我帮你补全剩下的部分,确保Python 3环境下的编译工具、Redis(作为Celery的消息中间件)以及Celery本身都能安装到位:

files:
  "/usr/local/share/pycurl-7.43.0.tar.gz" :
    mode: "000644"
    owner: root
    group: root
    source: https://pypi.python.org/packages/source/p/pycurl/pycurl-7.43.0.tar.gz
packages:
  yum:
    python34-devel: []
    libcurl-devel: []
    gcc: []  # 编译pycurl必须的编译器
    redis: []  # 用Redis当Celery的broker,性能比数据库好很多
commands:
  01_download_pip3:
    command: "curl -O https://bootstrap.pypa.io/get-pip.py && python3 get-pip.py"
    test: "[ ! -f /usr/local/bin/pip3 ]"  # 只有pip3不存在时才执行
  02_install_pycurl:
    command: "cd /usr/local/share && tar xzf pycurl-7.43.0.tar.gz && cd pycurl-7.43.0 && python3 setup.py install --with-openssl"
    test: "[ ! -f /usr/local/lib/python3.4/site-packages/pycurl.so ]"
  03_install_celery:
    command: "/usr/local/bin/pip3 install celery redis"  # 直接安装Celery和Redis的Python依赖

2. 添加Celery启动脚本配置

接下来创建一个新的.ebextensions配置文件03_celery.config,用来配置Celery worker的启动和重启逻辑——毕竟EB部署或重启应用服务器时,得保证Celery也能跟着启动:

files:
  # 应用部署后启动Celery的脚本
  "/opt/elasticbeanstalk/hooks/appdeploy/post/run_celery.sh":
    mode: "000755"
    owner: root
    group: root
    content: |
      #!/usr/bin/env bash
      # 获取EB的应用部署目录和虚拟环境路径
      EB_APP_DEPLOY_DIR=$(/opt/elasticbeanstalk/bin/get-config container -k app_deploy_dir)
      EB_VIRTUAL_ENV=$(/opt/elasticbeanstalk/bin/get-config container -k virtual_env_dir)
      
      # 激活虚拟环境,确保用的是项目的Python环境
      source $EB_VIRTUAL_ENV/bin/activate
      
      # 先杀掉现有的Celery进程,避免重复启动
      pkill -f "celery worker" || true
      
      # 启动Celery worker,记得把your_django_project_name换成你实际的项目名(就是settings.py所在的文件夹名)
      cd $EB_APP_DEPLOY_DIR
      nohup celery -A your_django_project_name worker --loglevel=info > /var/log/celery-worker.log 2>&1 &
      
  # 应用服务器重启后启动Celery的脚本
  "/opt/elasticbeanstalk/hooks/restartappserver/post/run_celery.sh":
    mode: "000755"
    owner: root
    group: root
    content: |
      #!/usr/bin/env bash
      EB_APP_DEPLOY_DIR=$(/opt/elasticbeanstalk/bin/get-config container -k app_deploy_dir)
      EB_VIRTUAL_ENV=$(/opt/elasticbeanstalk/bin/get-config container -k virtual_env_dir)
      
      source $EB_VIRTUAL_ENV/bin/activate
      
      pkill -f "celery worker" || true
      
      cd $EB_APP_DEPLOY_DIR
      nohup celery -A your_django_project_name worker --loglevel=info > /var/log/celery-worker.log 2>&1 &

3. 配置Django项目中的Celery参数

现在要在你的Django项目里配置Celery的相关设置,先打开settings.py,添加这些内容:

# Celery配置
CELERY_BROKER_URL = 'redis://localhost:6379/0'  # 用本地的Redis作为消息中间件
CELERY_RESULT_BACKEND = 'redis://localhost:6379/0'  # 结果也存在Redis里
CELERY_ACCEPT_CONTENT = ['application/json']
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
CELERY_TIMEZONE = 'UTC'  # 可以换成你的时区,比如Asia/Shanghai

然后在项目根目录(和settings.py同一级)创建celery.py文件,内容如下:

import os
from celery import Celery

# 设置默认的Django配置模块
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'your_django_project_name.settings')

app = Celery('your_django_project_name')

# 从Django的settings里读取Celery配置,前缀用CELERY_
app.config_from_object('django.conf:settings', namespace='CELERY')

# 自动发现所有Django app里的tasks.py文件
app.autodiscover_tasks()

最后,在项目的__init__.py里加一行,让Django启动时能加载Celery:

from .celery import app as celery_app

__all__ = ('celery_app',)

4. 部署后验证

把这些.ebextensions下的配置文件和项目代码一起打包,重新部署到Elastic Beanstalk。部署完成后,你可以登录到EB实例验证Celery是否正常运行:

# 查看Celery的日志,看有没有报错
tail -f /var/log/celery-worker.log

# 检查Celery进程是否在运行
ps aux | grep celery

几个注意点:

  • 所有配置里的your_django_project_name一定要换成你实际的Django项目名称,别直接用示例里的!
  • 如果不想用Redis,也可以用Django的数据库当broker,但生产环境不推荐,性能差不少
  • 可以根据实例的CPU核心数调整Celery worker的并发数,比如在启动命令里加--concurrency=4(4核实例就设4,按需调整)

内容的提问来源于stack exchange,提问作者Fabio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:54:30