name: invyone

# invyone (= 옛 TEST-VEX, React + Java 풀스택) 도커 컴포즈
# 사무실 우분투 호스팅용. restart unless-stopped 로 항상 떠있게.
#
# 외부 노출 포트:
#   - frontend       : 9772
#   - backend-spring : 8083
#
# 컨테이너 내부 포트는 각 앱의 기본값 유지 (3000 / 8081)
# 모드: dev (volume mount + 자동 리로드). 코드 변경은 syncthing 통해 동기화됨.
#
# 띄우기:
#   cd ~/invyone && docker compose -f docker/dev/docker-compose.invyone.yml up -d
#
# 끄기:
#   cd ~/invyone && docker compose -f docker/dev/docker-compose.invyone.yml down

services:
  # ========================
  # Spring Boot 백엔드
  # ========================
  backend-spring:
    image: invyone-backend-spring
    build:
      context: ../../backend-spring
      dockerfile: ../docker/dev/backend-spring.Dockerfile
    container_name: invyone-backend-spring
    ports:
      - "8083:8081"
    environment:
      SPRING_PROFILES_ACTIVE: dev
      SERVER_PORT: 8081
      # DB 연결 정보는 backend-spring/src/main/resources/application.yml 사용 (단일 소스).
      # env 로 override 하고 싶으면 여기에 SPRING_DATASOURCE_URL/USERNAME/PASSWORD 를 다시 추가.
      # JWT_SECRET 은 docker/dev/.env 에서 주입 (이 파일은 git 추적, .env 는 gitignored + syncthing 동기화)
      JWT_SECRET: ${JWT_SECRET:?JWT_SECRET 환경변수 필요. docker/dev/.env 파일 확인}
      JWT_EXPIRATION: ${JWT_EXPIRATION:-86400000}
      CORS_ALLOWED_ORIGINS: ${CORS_ALLOWED_ORIGINS:-http://localhost:3000,http://localhost:9772,http://100.126.230.80:9772,http://*.invyone.com:[*],https://*.invyone.com:[*],http://*.invyone.com,https://*.invyone.com,http://*.nip.io:[*],http://*.sslip.io:[*]}
      FILE_UPLOAD_DIR: ./uploads
    volumes:
      - ../../backend-spring:/app
    networks:
      - invyone-net
    restart: unless-stopped
    healthcheck:
      # actuator 미설치 + spring security 가 / 와 /health 모두 403 처리.
      # 컨테이너 내부에서 8081 포트로 응답이 오기만 하면 (status 무관) OK 로 간주.
      test: ["CMD-SHELL", "curl -sS -o /dev/null http://localhost:8081/ || exit 1"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 120s

  # ========================
  # Next.js 프론트엔드
  # ========================
  frontend:
    image: invyone-frontend
    build:
      context: ../../frontend
      dockerfile: ../docker/dev/frontend.Dockerfile
    container_name: invyone-frontend
    ports:
      - "9772:3000"
    environment:
      NODE_ENV: development
      # 브라우저는 상대경로로 호출 → next dev server가 rewrites 로 컨테이너 내부 backend 로 프록시
      # (절대 URL 박으면 호스트/IP 가 머신마다 달라서 다른 머신에서 접속 시 깨짐)
      NEXT_PUBLIC_API_URL: /api
      # 서버사이드(SSR/rewrites)에서 backend 호출용 — 컨테이너 네트워크 내부 이름
      SERVER_API_URL: http://invyone-backend-spring:8081
      NODE_OPTIONS: --max-old-space-size=8192
      NEXT_TELEMETRY_DISABLED: "1"
      WATCHPACK_POLLING: "true"
    volumes:
      - ../../frontend:/app
      - /app/node_modules
      - /app/.next
    depends_on:
      - backend-spring
    networks:
      - invyone-net
    restart: unless-stopped

networks:
  invyone-net:
    name: invyone-net
    driver: bridge
