services: frontend: # dev에서는 Docker Desktop 시작 시 자동 실행 방지 (수동 up 때만 실행) restart: "no" build: target: build-stage command: npm run dev -- --host 0.0.0.0 --port 80 ports: - "${FRONTEND_PORT}:80" environment: - CHOKIDAR_USEPOLLING=true - WATCHPACK_POLLING=true # 화상회의 — 브라우저가 접속할 LiveKit URL(개발은 LiveKit Cloud 사용). # 런타임 env 로 주입해 이미지 재빌드 없이 .env 변경 + 컨테이너 재생성만으로 반영된다. - VITE_LIVEKIT_URL=${LIVEKIT_WS_URL} volumes: - ./${FRONTEND_DIR}:/app - /app/node_modules # dev에서는 리버스 프록시 미사용 — base의 networks 목록을 덮어씀 networks: !override - app-network backend: # dev에서는 Docker Desktop 시작 시 자동 실행 방지 (수동 up 때만 실행) restart: "no" build: target: builder command: npm run start:dev ports: - "${BACKEND_PORT}:${BACKEND_PORT}" - "${WEBSOCKET_PORT}:${WEBSOCKET_PORT}" environment: - CHOKIDAR_USEPOLLING=true - WATCHPACK_POLLING=true volumes: - ./${BACKEND_DIR}:/app - /app/node_modules # dev에서는 리버스 프록시 미사용 — base의 networks 목록을 덮어씀 networks: !override - app-network # 화상회의는 개발에서 LiveKit Cloud 를 사용한다(로컬 SFU 컨테이너 없음). # WSL2/Docker Desktop 의 WebRTC 네트워킹 제약을 우회하고, 운영 전환도 env 만 바꾸면 된다. # 셀프호스팅(문서 단계 6)으로 갈 때 livekit/livekit.yaml 을 참고해 서비스를 다시 추가한다. db: # dev에서는 Docker Desktop 시작 시 자동 실행 방지 (base 의 always 를 덮어씀) restart: "no" ports: - "${DB_PORT}:5432" redis: # dev에서는 Docker Desktop 시작 시 자동 실행 방지 (base 의 always 를 덮어씀) restart: "no" ports: - "${REDIS_PORT}:6379" # base의 proxy 외부 네트워크 의존을 dev에서 제거 networks: proxy: !reset null