Django 配置 Celery 并部署
本文将讲解 Ubuntu 下 Celery 的部署。
概览
Celery 有多种配置方式,本文将采用 Redis 作为 Result Backend、RabbitMQ 作为消息分发服务器的方式来进行
所用到的关键版本信息
Python: 3.6
Celery:4.2
Ubuntu: 16.04
Django: 2.1
依赖层面 —— 安装相关依赖
Django 下使用 Celery 需要以下方面的依赖
Celery
Celery 的安装可以直接查阅 官方文档,由于本文直接采用了推荐配置,所以无需安装其他依赖,直接执行下面的命令即可
1 | pip install -U Celery |
Backend
按照 官方文档 所述,想要记录 Celery 的执行结果,还需要配置 Result Backend。官方提供了一个插件 django-celery-results 可以很轻松的使用 Django 的 DataBase 或者 Cache 提供这个 Backend。
执行下面的命令即可安装
1 | pip install django_celery_results |
RabbitMQ
官方文档中关于 Broker 的选择提供了三种 —— RabbitMQ、Redis 与 Amazon SQS,本文选择使用了无需多余配置的 RabbitMQ。
安装
根据官方文档,Installing on Debian and Ubuntu 中所述,最佳方式 是通过配置 apt 包来进行。
在 /etc/apt/sources.list.d/
目录下新建 bintray.rabbitmq.list
文件,内容为
1 | # See below for supported distribution and component values |
然后执行下面的命令安装即可
1 | sudo apt-get update |
配置
配置主要是三项:用户、权限、虚拟主机
配置使用的是 rabbitmqctl,以下以一个用户名为 test
密码为 Test
的用户与一个名称为 testhost
的虚拟主机为例
1 | # 新建用户 |
常用命令组链接
Django 代码层面 —— 配置 Celery
在 Django 的 settings.py
所在目录下新建 celery.py
文件,内容如下
假设此 Django 应用名称为 proj
proj/proj/celery.py
1 | from __future__ import absolute_import, unicode_literals |
并在此目录下的 __init__.py
文件中导入Celery
proj/proj/init.py
1 | from __future__ import absolute_import, unicode_literals |
最后到 settings.py
文件中进行配置
proj/proj/settings.py
1 | # 在 INSTALLED_APPS 中添加 |
CELERY_RESULT_BACKEND
用于选择 Result Backend,如果已经配置了 Django 的 Cache 建议选择 django-cache
,否则需要选择 django-db
CELERY_BROKER_URL
用于配置 Broker 的通信网址,这里按照刚才设置的 RabbitMQ 的账号密码主机进行网址构造:amqp://用户名:密码@127.0.0.1:5672/主机名
配置完成后,需要执行下面的命令来使 django_celery_results
的数据库配置生效
1 | ./manage.py migrate django_celery_results |
最后,添加一个 Task 用于测试。
选择一个应用的目录(以 ap
为例),在下面创建 tasks.py
文件,输入以下内容
proj/ap/tasks.py
1 | from __future__ import absolute_import |
以后可以通过下面的命令来测试是否正常
1 | ./manage.py shell |
1 | from ap.tasks import add |
服务器配置层面 —— 服务器持久化 Celery
官方文档 给了三种方式来进行持久化,本文选择 systemd 方式。
首先到官方 Github 下载 systemd 支持文件,将 celery.conf
重命名并放置为 /etc/conf.d/celery
,将 celery.service
放置为 /etc/systemd/system/celery.service
。
将 EnvironmentFile
所对应地址修改为下载的 celery.conf
文件所放置地址(如果按照上面我写的放置了那么这里不用修改),将 WorkingDirectory
对应的目录修改为 Django 项目目录,将 User
和 Group
修改为一个非 root 的用户和用户组。
修改配置文件 /etc/conf.d/celery
,CELERY_APP
为 Django 项目名称;CELERY_BIN
为 celery 应用可执行文件地址,直接安装是 /usr/bin/celery
,而通过 Virtualenv 安装则是相关环境目录下的 bin/celery
文件;CELERYD_PID_FILE
和 CELERYD_LOG_FILE
分别是进程文件和日志文件,需要注意的是这些文件所在目录需要存在并且可以被上面设定的用户所修改。
然后执行下面的命令即可开启 Celery
1 | systemctl start celery |
可以通过下面的命令检测是否开启成功
1 | systemctl status celery |