75 lines
2.7 KiB
YAML
75 lines
2.7 KiB
YAML
# UNIARE v4 프로덕션 스택 (NAS Docker)
|
|
# 사용: docker compose -f docker-compose.prod.yml up -d --build
|
|
#
|
|
# 정적 파일(HTML, images, datas)은 필요한 경로만 read-only 마운트 — 카드/이미지 추가 시 재빌드 불필요
|
|
|
|
services:
|
|
uniare-api:
|
|
build: ./api
|
|
container_name: uniare-api
|
|
restart: unless-stopped
|
|
expose:
|
|
- "3000"
|
|
environment:
|
|
- PORT=3000
|
|
- JWT_SECRET=${JWT_SECRET}
|
|
- JWT_EXPIRES=${JWT_EXPIRES:-7d}
|
|
- APP_BASE_URL=${APP_BASE_URL}
|
|
- RESEND_API_KEY=${RESEND_API_KEY}
|
|
- RESEND_FROM_EMAIL=${RESEND_FROM_EMAIL}
|
|
- 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:
|
|
- uniare-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
|
|
|
|
uniare-web:
|
|
build:
|
|
context: .
|
|
dockerfile: nginx/Dockerfile
|
|
image: uniare-web:latest
|
|
container_name: uniare-web
|
|
restart: unless-stopped
|
|
ports:
|
|
- "${WEB_PORT:-44082}:80"
|
|
volumes:
|
|
- ./index.html:/usr/share/nginx/html/index.html:ro
|
|
- ./cardList.html:/usr/share/nginx/html/cardList.html:ro
|
|
- ./result.html:/usr/share/nginx/html/result.html:ro
|
|
- ./login.html:/usr/share/nginx/html/login.html:ro
|
|
- ./signup.html:/usr/share/nginx/html/signup.html:ro
|
|
- ./verify-email.html:/usr/share/nginx/html/verify-email.html:ro
|
|
- ./forgot-password.html:/usr/share/nginx/html/forgot-password.html:ro
|
|
- ./reset-password.html:/usr/share/nginx/html/reset-password.html:ro
|
|
- ./deckHistory.html:/usr/share/nginx/html/deckHistory.html:ro
|
|
- ./preset.html:/usr/share/nginx/html/preset.html:ro
|
|
- ./profile.html:/usr/share/nginx/html/profile.html:ro
|
|
- ./admin.html:/usr/share/nginx/html/admin.html:ro
|
|
- ./favicon.ico:/usr/share/nginx/html/favicon.ico:ro
|
|
- ./script:/usr/share/nginx/html/script:ro
|
|
- ./style:/usr/share/nginx/html/style:ro
|
|
- ./i18n:/usr/share/nginx/html/i18n:ro
|
|
- ./datas:/usr/share/nginx/html/datas:ro
|
|
- ./images:/usr/share/nginx/html/images:ro
|
|
- ./nginx/default.conf:/etc/nginx/conf.d/default.conf:ro
|
|
depends_on:
|
|
uniare-api:
|
|
condition: service_healthy
|
|
|
|
volumes:
|
|
uniare-data:
|