如何为DigitalOcean部署的Django应用配置Redis与Celery Worker
在DigitalOcean上配置Django + Celery + Redis的具体步骤
1. 安装并配置Redis服务
- 更新系统包:
sudo apt update && sudo apt upgrade -y - 安装Redis:
sudo apt install redis-server -y - 编辑Redis配置文件(默认绑定本地,无需远程连接的话保持默认即可):
sudo nano /etc/redis/redis.conf,找到bind 127.0.0.1 ::1这一行,确保未被注释 - 设置Redis开机自启:
sudo systemctl enable redis-server - 启动Redis:
sudo systemctl start redis-server - 验证运行状态:执行
redis-cli ping,返回PONG说明Redis正常运行
2. 配置Django项目中的Celery
- 激活项目虚拟环境,安装依赖:
pip install celery redis - 在Django项目根目录(和
settings.py同级)创建celery.py文件,内容如下:
import os from celery import Celery # 替换成你的项目名称 os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'your_project.settings') app = Celery('your_project') app.config_from_object('django.conf:settings', namespace='CELERY') app.autodiscover_tasks()
- 编辑项目根目录的
__init__.py,添加以下代码让Django识别Celery:
from .celery import app as celery_app __all__ = ('celery_app',)
- 打开
settings.py,添加Celery核心配置:
# Celery配置 CELERY_BROKER_URL = 'redis://127.0.0.1:6379/0' CELERY_RESULT_BACKEND = 'redis://127.0.0.1:6379/0' CELERY_ACCEPT_CONTENT = ['json'] CELERY_TASK_SERIALIZER = 'json' CELERY_RESULT_SERIALIZER = 'json'
3. 测试Celery Worker与Redis的连接
- 在虚拟环境中,进入项目根目录,启动Celery Worker:
celery -A your_project worker --loglevel=info - 观察输出日志,如果看到
Connected to redis://127.0.0.1:6379/0,说明连接成功 - 可创建测试任务验证:在任意Django app下新建
tasks.py,写入:
from celery import shared_task @shared_task def test_celery_connection(): return "Celery与Redis连接正常!"
- 进入Django shell执行任务:
python manage.py shell,然后输入from your_app.tasks import test_celery_connection; test_celery_connection.delay(),查看Worker日志是否有任务执行记录
4. 将Celery Worker配置为系统服务(后台持久运行)
- 创建Celery服务文件:
sudo nano /etc/systemd/system/celery.service - 写入以下内容(替换成你的实际路径和用户名):
[Unit] Description=Celery Worker Service After=network.target [Service] User=your_username Group=your_username WorkingDirectory=/path/to/your/django/project Environment="PATH=/path/to/your/virtualenv/bin" # --concurrency可根据服务器CPU核心数调整 ExecStart=/path/to/your/virtualenv/bin/celery -A your_project worker --loglevel=info --concurrency=4 [Install] WantedBy=multi-user.target
- 重新加载系统服务:
sudo systemctl daemon-reload - 启动Celery服务:
sudo systemctl start celery - 设置开机自启:
sudo systemctl enable celery - 验证服务状态:
sudo systemctl status celery
5. 配置Celery Beat(定时任务)
- 如果需要定时任务,先安装依赖:
pip install django-celery-beat,并在settings.py的INSTALLED_APPS中添加django_celery_beat,执行迁移:python manage.py migrate - 在
settings.py中添加定时任务配置(示例):
from celery.schedules import crontab CELERY_BEAT_SCHEDULE = { # 每天8点执行发送邮件任务 'daily-email-task': { 'task': 'your_app.tasks.send_daily_email', 'schedule': crontab(hour=8, minute=0), }, }
- 创建Celery Beat服务文件:
sudo nano /etc/systemd/system/celery-beat.service - 写入内容:
[Unit] Description=Celery Beat Service After=network.target [Service] User=your_username Group=your_username WorkingDirectory=/path/to/your/django/project Environment="PATH=/path/to/your/virtualenv/bin" ExecStart=/path/to/your/virtualenv/bin/celery -A your_project beat --loglevel=info --scheduler django_celery_beat.schedulers:DatabaseScheduler [Install] WantedBy=multi-user.target
- 重新加载服务并启动:
sudo systemctl daemon-reload sudo systemctl start celery-beat sudo systemctl enable celery-beat
内容的提问来源于stack exchange,提问作者Ritankar Bhattacharjee
相关产品推荐
相关产品推荐

