# UADECK v4 프로덕션 스택 (NAS Docker) # 사용: docker compose -f docker-compose.prod.yml up -d --build # # 정적 파일(HTML, images, datas)은 호스트 볼륨 마운트 — 카드/이미지 추가 시 재빌드 불필요 services: uadeck-api: build: ./api container_name: uadeck-api restart: unless-stopped expose: - "3000" environment: - PORT=3000 - JWT_SECRET=${JWT_SECRET} - JWT_EXPIRES=${JWT_EXPIRES:-7d} - ADMIN_EMAIL=${ADMIN_EMAIL} - ADMIN_PASSWORD=${ADMIN_PASSWORD} - ADMIN_USERNAME=${ADMIN_USERNAME:-admin} - CORS_ORIGINS=${CORS_ORIGINS:-*} - PREVIEWS_PATH=/data/previews - AVATARS_PATH=/data/avatars - DB_PATH=/data/uadeck.db - DATAS_PATH=/datas volumes: - uadeck-data:/data - ./datas:/datas:ro - ./api/data/previews:/data/previews - ./api/data/avatars:/data/avatars healthcheck: test: ["CMD-SHELL", "node -e \"fetch('http://127.0.0.1:3000/api/v1/health').then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))\""] interval: 30s timeout: 10s retries: 3 start_period: 15s uadeck-web: image: nginx:alpine container_name: uadeck-web restart: unless-stopped ports: - "${WEB_PORT:-8080}:80" volumes: - ./:/usr/share/nginx/html:ro - ./nginx/default.conf:/etc/nginx/conf.d/default.conf:ro depends_on: uadeck-api: condition: service_healthy volumes: uadeck-data: