如何使用Celery和Docker处理Django中的定期任务

2020-06-17 07:27:11易采站长站整理

    │   │   └── __init__.py
    │   ├── models.py
    │   ├── tests.py
    │   ├── urls.py
    │   └── views.py
    ├── requirements.txt
    └── templates
        └── orders
            └── order_list.html

Celery和Redis

现在,我们需要为Celery,Celery Beat和Redis添加容器。

首先,将依赖项添加到requirements.txt文件中:


Django==3.0.5
celery==4.4.1
redis==3.4.1

docker-compose.yml
文件内容:


redis:
image: redis:alpine
celery:
build: ./project
command: celery -A core worker -l info
volumes:
- ./project/:/usr/src/app/
environment:
- DEBUG=1
- SECRET_KEY=dbaa1_i7%*3r9-=z-+_mz4r-!qeed@(-a_r(g@k8jo8y3r27%m
- DJANGO_ALLOWED_HOSTS=localhost 127.0.0.1 [::1] depends_on:
- redis
celery-beat:
build: ./project
command: celery -A core beat -l info
volumes:
- ./project/:/usr/src/app/
environment:
- DEBUG=1
- SECRET_KEY=dbaa1_i7%*3r9-=z-+_mz4r-!qeed@(-a_r(g@k8jo8y3r27%m
- DJANGO_ALLOWED_HOSTS=localhost 127.0.0.1 [::1] depends_on:
- redis

我们还需要更新Web服务的depends_on部分:


web:
build: ./project
command: python manage.py runserver 0.0.0.0:8000
volumes:
- ./project/:/usr/src/app/
ports:
- 1337:8000
environment:
- DEBUG=1
- SECRET_KEY=dbaa1_i7%*3r9-=z-+_mz4r-!qeed@(-a_r(g@k8jo8y3r27%m
- DJANGO_ALLOWED_HOSTS=localhost 127.0.0.1 [::1] depends_on:
- redis # NEW

完整的docker-compose文件如下:


version: '3.7'

services:
web:
build: ./project
command: python manage.py runserver 0.0.0.0:8000
volumes:
- ./project/:/usr/src/app/
ports:
- 1337:8000
environment:
- DEBUG=1
- SECRET_KEY=dbaa1_i7%*3r9-=z-+_mz4r-!qeed@(-a_r(g@k8jo8y3r27%m
- DJANGO_ALLOWED_HOSTS=localhost 127.0.0.1 [::1] depends_on:
- redis
redis:
image: redis:alpine
celery:
build: ./project
command: celery -A core worker -l info
volumes:
- ./project/:/usr/src/app/
environment:
- DEBUG=1
- SECRET_KEY=dbaa1_i7%*3r9-=z-+_mz4r-!qeed@(-a_r(g@k8jo8y3r27%m
- DJANGO_ALLOWED_HOSTS=localhost 127.0.0.1 [::1] depends_on:
- redis
celery-beat:
build: ./project
command: celery -A core beat -l info
volumes: