Docker compose는 docker-compose.yml 파일을 통해서 컨테이너 여러개를 한번에 구축하게되는데 Celery를 Django에서 실행하기 위해서는 message broker인 rabbitmq도 같이 실행해서 연결을 해줘야한다.
version: '3.8'
volumes:
postgres: {}
django_media: {}
django_static: {}
services:
backend:
container_name: backend
build: ./backend/
entrypoint: sh -c "python manage.py collectstatic --no-input && python manage.py makemigrations && python manage.py migrate && gunicorn BFFs.wsgi --workers=5 -b 0.0.0.0:8000 && celery -A BFFs worker --loglevel=info"
volumes:
- ./backend/django/:/app/
- /etc/localtime:/etc/localtime:ro
- django_media:/app/media/
- django_static:/app/static/
env_file:
- .env
depends_on:
- postgres
- rabbitmq
- redis
restart: always
...
rabbitmq:
container_name: rabbitmq
image: rabbitmq:3-management-alpine
environment:
- RABBITMQ_USER=guest
- RABBITMQ_PASSWORD=guest
ports:
- 5672:5672
- 15672:15672
restart: always
처음에는 위와같은 방법으로 backend안에서 실행하려했지만 celery worker가 정상적으로 작동하는지 확인을 하기위해 celery컨테이너를 하나더 만들어서
version: '3.8'
volumes:
postgres: {}
django_media: {}
django_static: {}
services:
backend:
container_name: backend
build: ./backend/
entrypoint: sh -c "python manage.py collectstatic --no-input && python manage.py makemigrations && python manage.py migrate && gunicorn BFFs.wsgi --workers=5 -b 0.0.0.0:8000"
volumes:
- ./backend/django/:/app/
- /etc/localtime:/etc/localtime:ro
- django_media:/app/media/
- django_static:/app/static/
env_file:
- .env
depends_on:
- postgres
- rabbitmq
- redis
restart: always
...
rabbitmq:
container_name: rabbitmq
image: rabbitmq:3-management-alpine
environment:
- RABBITMQ_USER=guest
- RABBITMQ_PASSWORD=guest
ports:
- 5672:5672
- 15672:15672
restart: always
celery_worker:
container_name: celery_worker
build:
context: ./backend/
depends_on:
- backend
- rabbitmq
volumes:
- ./backend/django/:/app/
- /etc/localtime:/etc/localtime:ro
env_file:
- .env
ports: []
command: sh -c "celery -A BFFs worker --loglevel=info"
celery를 backend에 의존을 두어서 컨테이너가 생성되게하고 volumes를 통해 django 프로젝트의 settings.py에 있는 설정에 접근을 할수있게 해서 celery가 rabbitmq랑 장고파일내부에 있는 task를 읽어올수있게했습니다
'내일배움 캠프 > TIL' 카테고리의 다른 글
Git Actions 을 이용한 백엔드 배포 자동화 (0) | 2023.07.24 |
---|---|
다양한 UI 요소 600여종을 심플한 HTML과 CSS로 구현한 사이트 (2) | 2023.07.20 |
django-channels middleware custom (0) | 2023.07.20 |
django channels를 이용한 실시간 알림 (0) | 2023.07.20 |
django-channels (0) | 2023.07.20 |