Docker Compose 설정
프로젝트의 전체 docker-compose.yml 파일에 다음 내용을 추가합니다:
version: '3.8'
services:
# Celery Worker 서비스
celery_worker:
build:
context: ./backend
dockerfile: Dockerfile
args:
- DJANGO_SETTINGS_MODULE=my_project.settings
command: celery -A my_project worker --loglevel=info
depends_on:
mysql:
condition: service_healthy
redis:
condition: service_healthy
environment:
- CELERY_BROKER_URL=redis://redis:6379/0
# 추가 환경 변수
- DJANGO_SETTINGS_MODULE=my_project.settings
- PYTHONUNBUFFERED=1
volumes:
- ./backend:/app
restart: unless-stopped
# 선택적 리소스 제한
deploy:
resources:
limits:
cpus: '1'
memory: 1G
# Celery Beat 서비스 (필요한 경우)
celery_beat:
build:
context: ./backend
dockerfile: Dockerfile
command: celery -A my_project beat --loglevel=info
depends_on:
- celery_worker
environment:
- CELERY_BROKER_URL=redis://redis:6379/0
- DJANGO_SETTINGS_MODULE=my_project.settings
volumes:
- ./backend:/app
restart: unless-stopped
# Redis 서비스
redis:
image: redis:7-alpine
ports:
- "6379:6379"
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 5s
timeout: 30s
retries: 5
volumes:
- redis_data:/data
restart: unless-stopped
volumes:
redis_data:프로젝트 구조
project_root/
├── backend/
│ ├── Dockerfile
│ ├── requirements.txt
│ ├── manage.py
│ └── my_project/
│ ├── __init__.py
│ ├── celery.py
│ └── settings.py
└── docker-compose.yml
실행 방법
Docker Compose로 서비스를 실행합니다:
# 전체 서비스 실행
docker-compose up -d
# Celery 로그 확인
docker-compose logs -f celery_worker
# 특정 서비스만 재시작
docker-compose restart celery_worker주의사항
- 볼륨 마운트
- 개발 환경: 소스 코드 변경 사항이 바로 반영되도록 볼륨을 마운트합니다
- 운영 환경: 성능과 보안을 위해 필요한 파일만 복사하는 것이 좋습니다
# 개발 환경
volumes:
- ./backend:/app
# 운영 환경
volumes:
- ./backend/media:/app/media
- ./backend/static:/app/static- 환경변수 관리
- 민감한 정보는
.env파일이나 시크릿으로 관리합니다
- 민감한 정보는
environment:
- CELERY_BROKER_URL=${CELERY_BROKER_URL}
- DATABASE_URL=${DATABASE_URL}- 리소스 제한
- Worker 수와 시스템 리소스를 고려하여 제한을 설정합니다
command: celery -A my_project worker --loglevel=info --concurrency=4
deploy:
resources:
limits:
cpus: '1'
memory: 1G- 로깅 설정
- 로그 레벨과 포맷을 환경에 맞게 조정합니다
command: celery -A my_project worker --loglevel=info --logfile=/var/log/celery.log운영 환경 최적화
- Worker 프로세스 설정
command: >
celery -A my_project worker
--loglevel=info
--concurrency=4
--max-tasks-per-child=100
--optimization=fair- Healthcheck 추가
healthcheck:
test: ["CMD", "celery", "-A", "my_project", "inspect", "ping"]
interval: 30s
timeout: 10s
retries: 3- 재시작 정책
restart_policy:
condition: on-failure
delay: 5s
max_attempts: 3
window: 120s모니터링 설정
- Flower 추가 (Celery 모니터링 도구)
flower:
build:
context: ./backend
dockerfile: Dockerfile
command: celery -A my_project flower
ports:
- "5555:5555"
environment:
- CELERY_BROKER_URL=redis://redis:6379/0
depends_on:
- celery_worker이러한 설정으로 Docker 환경에서 안정적으로 Celery를 운영할 수 있습니다.