# 운영 배포 (Traefik + junggomoa.com) # - frontend (Next.js) → junggomoa.com (UI) # - backend (FastAPI) → junggomoa.com/api/* (REST + 알림스레드) # - postgres → 내부 (5432) # - app (Streamlit) → 임시 보존 (legacy.junggomoa.com 등 별도 운영 가능, 일단 비활성) services: frontend: build: context: . dockerfile: frontend/Dockerfile image: junggomoa-frontend:latest container_name: junggomoa-frontend restart: always environment: - TZ=Asia/Seoul # 클라이언트는 같은 도메인이라 빈 값. SSR 시 backend 호출용. - BACKEND_URL=http://backend:8000 networks: - traefik-net - tradeing-internal depends_on: - backend labels: - traefik.enable=true - traefik.docker.network=traefik-net - traefik.http.routers.junggomoa-front.rule=Host(`junggomoa.com`) || Host(`www.junggomoa.com`) - traefik.http.routers.junggomoa-front.entrypoints=websecure,web - traefik.http.routers.junggomoa-front.tls=true - traefik.http.routers.junggomoa-front.tls.certresolver=le - traefik.http.routers.junggomoa-front.priority=10 - traefik.http.services.junggomoa-front.loadbalancer.server.port=3000 backend: build: context: . dockerfile: backend/Dockerfile image: junggomoa-backend:latest container_name: junggomoa-backend restart: always environment: - TZ=Asia/Seoul - SETTINGS_DB_PATH=/app/data/settings.db - DATABASE_URL=postgresql://tradeing:${POSTGRES_PASSWORD:-tradeing_pw}@tradeing-postgres:5432/tradeing - ENCRYPTION_KEY=${ENCRYPTION_KEY:-} - JWT_SECRET=${JWT_SECRET:-change-me-in-production} - TELEGRAM_TOKEN=${TELEGRAM_TOKEN:-} - TELEGRAM_CHAT_ID=${TELEGRAM_CHAT_ID:-} volumes: - ./data:/app/data depends_on: postgres: condition: service_healthy networks: - traefik-net - tradeing-internal labels: - traefik.enable=true - traefik.docker.network=traefik-net - traefik.http.routers.junggomoa-api.rule=(Host(`junggomoa.com`) || Host(`www.junggomoa.com`)) && PathPrefix(`/api`) - traefik.http.routers.junggomoa-api.entrypoints=websecure,web - traefik.http.routers.junggomoa-api.tls=true - traefik.http.routers.junggomoa-api.tls.certresolver=le - traefik.http.routers.junggomoa-api.priority=100 - traefik.http.services.junggomoa-api.loadbalancer.server.port=8000 postgres: image: postgres:16-alpine container_name: tradeing-postgres restart: always environment: - POSTGRES_USER=tradeing - POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-tradeing_pw} - POSTGRES_DB=tradeing - TZ=Asia/Seoul volumes: - ./data/pgdata:/var/lib/postgresql/data networks: - tradeing-internal healthcheck: test: ["CMD-SHELL", "pg_isready -U tradeing -d tradeing"] interval: 10s timeout: 5s retries: 5 networks: traefik-net: external: true tradeing-internal: driver: bridge