Files
TK-FB-Project/deploy/docker-compose.synology.yml
Hyungi Ahn 2b1c7bfb88 feat: 다수 기능 개선 - 순찰, 출근, 작업분석, 모바일 UI 등
- 순찰/점검 기능 개선 (zone-detail 페이지 추가)
- 출근/근태 시스템 개선 (연차 조회, 근무현황)
- 작업분석 대분류 그룹화 및 마이그레이션 스크립트
- 모바일 네비게이션 UI 추가
- NAS 배포 도구 및 문서 추가

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-09 14:41:01 +09:00

151 lines
3.3 KiB
YAML

version: "3.8"
services:
# MariaDB 데이터베이스
db:
image: mariadb:10.9
container_name: tkfb_db
restart: unless-stopped
environment:
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
- MYSQL_DATABASE=${MYSQL_DATABASE:-hyungi}
- MYSQL_USER=${MYSQL_USER:-hyungi_user}
- MYSQL_PASSWORD=${MYSQL_PASSWORD}
volumes:
- db_data:/var/lib/mysql
- ./init-db:/docker-entrypoint-initdb.d
ports:
- "3306:3306"
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
timeout: 20s
retries: 10
networks:
- tkfb_network
# Node.js API 서버
api:
build:
context: ./api.hyungi.net
dockerfile: Dockerfile
container_name: tkfb_api
env_file:
- ./.env
depends_on:
db:
condition: service_healthy
redis:
condition: service_started
restart: unless-stopped
ports:
- "3005:3005"
environment:
- NODE_ENV=production
- PORT=3005
- DB_HOST=db
- DB_PORT=3306
- DB_USER=${MYSQL_USER:-hyungi_user}
- DB_PASSWORD=${MYSQL_PASSWORD}
- DB_NAME=${MYSQL_DATABASE:-hyungi}
- DB_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
- JWT_SECRET=${JWT_SECRET}
- JWT_EXPIRES_IN=${JWT_EXPIRES_IN:-7d}
- JWT_REFRESH_SECRET=${JWT_REFRESH_SECRET}
- JWT_REFRESH_EXPIRES_IN=${JWT_REFRESH_EXPIRES_IN:-30d}
- REDIS_HOST=redis
- REDIS_PORT=6379
- WEATHER_API_URL=${WEATHER_API_URL:-}
- WEATHER_API_KEY=${WEATHER_API_KEY:-}
volumes:
- ./api.hyungi.net/uploads:/usr/src/app/uploads
- ./api.hyungi.net/logs:/usr/src/app/logs
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
networks:
- tkfb_network
# Web UI (Nginx)
web:
build:
context: ./web-ui
dockerfile: Dockerfile
container_name: tkfb_web
restart: unless-stopped
ports:
- "80:80"
volumes:
- ./web-ui:/usr/share/nginx/html:ro
depends_on:
- api
networks:
- tkfb_network
# FastAPI Bridge
fastapi:
build:
context: ./fastapi-bridge
dockerfile: Dockerfile
container_name: tkfb_fastapi
restart: unless-stopped
ports:
- "8000:8000"
environment:
- API_BASE_URL=http://api:3005
depends_on:
- api
networks:
- tkfb_network
# Redis Cache
redis:
image: redis:6-alpine
container_name: tkfb_redis
restart: unless-stopped
expose:
- "6379"
networks:
- tkfb_network
# Cloudflare Tunnel
cloudflared:
image: cloudflare/cloudflared:latest
container_name: tkfb_cloudflared
restart: unless-stopped
command: tunnel --no-autoupdate run
environment:
- TUNNEL_TOKEN=${CLOUDFLARE_TUNNEL_TOKEN}
depends_on:
- web
- api
networks:
- tkfb_network
# phpMyAdmin (선택사항 - 보안상 제거 권장)
phpmyadmin:
image: phpmyadmin/phpmyadmin:latest
container_name: tkfb_phpmyadmin
depends_on:
- db
restart: unless-stopped
ports:
- "8080:80"
environment:
- PMA_HOST=db
- PMA_USER=root
- PMA_PASSWORD=${MYSQL_ROOT_PASSWORD}
- UPLOAD_LIMIT=50M
networks:
- tkfb_network
volumes:
db_data:
driver: local
networks:
tkfb_network:
driver: bridge
name: tkfb_network