배포 메인 서버 (6 서비스)

services:
  # === Reverse Proxy (SSL Termination) ===
  nginx:
    image: nginx:alpine
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx/prod.conf:/etc/nginx/nginx.conf:ro
      - ./certs:/etc/nginx/certs:ro
    depends_on:
      - spring-api
      - frontend
      - livekit
    deploy:
      resources:
        limits:
          memory: 128M
          cpus: '0.5'
    networks:
      - waddoc-net

  # === Frontend ===
  frontend:
    build:
      context: ../src/FE
      args:
        - VITE_API_URL=/api
    expose:
      - "3000"
    deploy:
      resources:
        limits:
          memory: 256M
          cpus: '0.5'
    networks:
      - waddoc-net

  # === Backend ===
  spring-api:
    build: ../src/BE
    expose:
      - "8080"
    environment:
      - SPRING_PROFILES_ACTIVE=prod
      - DB_HOST=postgres
      - DB_PASSWORD=${DB_PASSWORD}
      - REDIS_HOST=redis
      - REDIS_PASSWORD=${REDIS_PASSWORD}
      - AI_IDV_URL=http://${AI_SERVER_IP}:8000
      - AI_STT_URL=http://${AI_SERVER_IP}:8001
      - FILE_STORAGE_ROOT=/data/uploads
      - AI_FILE_TRANSFER_MODE=multipart
      - LIVEKIT_API_KEY=${LIVEKIT_API_KEY}
      - LIVEKIT_API_SECRET=${LIVEKIT_API_SECRET}
      - JWT_SECRET=${JWT_SECRET}
    volumes:
      - uploads:/data/uploads
    depends_on:
      - postgres
      - redis
    deploy:
      resources:
        limits:
          memory: 1G
          cpus: '2.0'
    networks:
      - waddoc-net

  # === Database ===
  postgres:
    image: postgres:16-alpine
    environment:
      POSTGRES_DB: ${POSTGRES_DB}
      POSTGRES_USER: ${POSTGRES_USER}
      POSTGRES_PASSWORD: ${DB_PASSWORD}
    volumes:
      - pg_data:/var/lib/postgresql/data
    expose:
      - "5432"
    deploy:
      resources:
        limits:
          memory: 1G
          cpus: '1.0'
        reservations:
          memory: 512M
    networks:
      - waddoc-net

  # === Cache ===
  redis:
    image: redis:7-alpine
    command: redis-server --requirepass ${REDIS_PASSWORD}
    volumes:
      - redis_data:/data
    expose:
      - "6379"
    deploy:
      resources:
        limits:
          memory: 256M
          cpus: '0.5'
    networks:
      - waddoc-net

  # === WebRTC ===
  livekit:
    image: livekit/livekit-server:latest
    expose:
      - "7880"
    ports:
      - "8881:7881"
      - "8882:7882/udp"
      - "8478:3478/udp"
    volumes:
      - ./livekit/livekit.yaml:/etc/livekit.yaml:ro
    environment:
      - LIVEKIT_KEYS=${LIVEKIT_API_KEY}:${LIVEKIT_API_SECRET}
      - LIVEKIT_CONFIG=/etc/livekit.yaml
    deploy:
      resources:
        limits:
          memory: 1G
          cpus: '1.0'
    networks:
      - waddoc-net

volumes:
  pg_data:
  redis_data:
  uploads:

networks:
  waddoc-net:
    driver: bridge