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 | 
 
			
			 
				
			
댓글