services: frontend: build: context: ./frontend dockerfile: Dockerfile ports: - "${FRONTEND_PORT:-4000}:80" volumes: # 프론트엔드 파일 실시간 반영 (개발용) - ./frontend:/usr/share/nginx/html depends_on: - backend restart: unless-stopped networks: - todo-network backend: build: context: ./backend dockerfile: Dockerfile ports: - "${BACKEND_PORT:-9000}:9000" # HTTPS용 포트 (SSL 인증서 있는 경우) # - "9443:9443" depends_on: database: condition: service_healthy environment: - DATABASE_URL=postgresql+asyncpg://todo_user:${POSTGRES_PASSWORD:-todo_password}@database:5432/todo_db - SECRET_KEY=${SECRET_KEY:-your-secret-key-change-this-in-production} - DEBUG=${DEBUG:-false} - CORS_ORIGINS=${CORS_ORIGINS:-["http://localhost:4000", "http://127.0.0.1:4000"]} # Synology MailPlus 통합 설정 (선택사항) - SYNOLOGY_MAIL_SERVER=${SYNOLOGY_MAIL_SERVER:-} - SYNOLOGY_MAIL_USERNAME=${SYNOLOGY_MAIL_USERNAME:-} - SYNOLOGY_MAIL_PASSWORD=${SYNOLOGY_MAIL_PASSWORD:-} - ENABLE_MAIL_MONITORING=${ENABLE_MAIL_MONITORING:-false} - MAIL_CHECK_INTERVAL=${MAIL_CHECK_INTERVAL:-300} - TODO_KEYWORDS=${TODO_KEYWORDS:-todo,할일,task} - ATTACHMENTS_PATH=/data/uploads volumes: # 시놀로지 볼륨 매핑 - ${SYNOLOGY_UPLOADS_PATH:-/volume1/todo-project/uploads}:/data/uploads - ${SYNOLOGY_CONFIG_PATH:-/volume3/docker/todo-project/config}:/app/config # 로컬 개발용 (시놀로지에서는 제거) - ./backend/src:/app/src restart: unless-stopped healthcheck: test: ["CMD", "curl", "-f", "http://localhost:9000/health"] interval: 30s timeout: 10s retries: 3 start_period: 40s networks: - todo-network database: image: postgres:15-alpine ports: - "${DATABASE_PORT:-5432}:5432" environment: - POSTGRES_USER=${POSTGRES_USER:-todo_user} - POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-todo_password} - POSTGRES_DB=${POSTGRES_DB:-todo_db} volumes: # 시놀로지 볼륨 매핑 - ${SYNOLOGY_DB_PATH:-/volume3/docker/todo-project/postgres}:/var/lib/postgresql/data - ${SYNOLOGY_CONFIG_PATH:-/volume3/docker/todo-project/config}/migrations:/docker-entrypoint-initdb.d # 로컬 개발용 (시놀로지에서는 제거) - postgres_data:/var/lib/postgresql/data - ./backend/migrations:/docker-entrypoint-initdb.d restart: unless-stopped healthcheck: test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-todo_user} -d ${POSTGRES_DB:-todo_db}"] interval: 10s timeout: 5s retries: 5 start_period: 30s networks: - todo-network networks: todo-network: driver: bridge # 로컬 개발용 볼륨 (시놀로지에서는 사용하지 않음) volumes: postgres_data: todo_uploads: