bf2321f2d5
LiveKit(SFU)에 미디어 전송을 위임하고, 앱은 입장 토큰 발급 + 회의 화면만 담당하는 구조로 단계 1(기본 연결)을 구현한다. 백엔드 - meeting 모듈: POST /api/meetings/token (JWT 인증) livekit-server-sdk 로 입장 JWT 발급(identity=userId, name, grants: roomJoin/publish/subscribe/publishData, TTL 1h). 단계 2에서 역할별 분기 예정. 프론트 - useMeeting(토큰 발급), useLiveKitRoom(연결/참여자/컨트롤 상태) - ParticipantTile(카메라/마이크 트랙 attach, 본인 거울·음소거, 이니셜 플레이스홀더) - MeetingPage(로비 + 영상 그리드), 라우트 /meeting/:room?, 사이드바 네비 추가 - VITE_LIVEKIT_URL 주입(build arg + dev 런타임 env) 인프라/설정 - 개발 미디어 서버는 LiveKit Cloud 사용(로컬 self-host 는 WSL2/Docker Desktop WebRTC 네트워킹 제약으로 제외). env 만으로 운영 전환 가능. - livekit/livekit.yaml 은 단계 6 셀프호스팅 참고용으로 보관. - 화상회의_화면명세.md: 현재 화면 기능/구조/데이터 계약 문서(UI 개편 참고). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
60 lines
2.1 KiB
YAML
60 lines
2.1 KiB
YAML
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 |