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>
71 lines
2.8 KiB
Bash
71 lines
2.8 KiB
Bash
# ==========================================
|
|
# 루트 .env (development) — 모든 설정의 단일 진실 공급원(SSOT)
|
|
# docker-compose 가 이 값을 backend/frontend/db/redis 에 주입한다.
|
|
# .example 을 복사해 만들고 실제 값으로 채운다. (커밋 금지)
|
|
# ==========================================
|
|
|
|
# ==========================================
|
|
# 프로젝트 전역
|
|
# ==========================================
|
|
PROJECT_NAME=comrelay
|
|
APP_ENV=development
|
|
BUILD_MODE=development
|
|
FRONTEND_DIR=frontend
|
|
BACKEND_DIR=backend
|
|
|
|
# ==========================================
|
|
# 포트
|
|
# ==========================================
|
|
FRONTEND_PORT=5273
|
|
BACKEND_PORT=3100
|
|
WEBSOCKET_PORT=3101
|
|
DB_PORT=5532
|
|
REDIS_PORT=6479
|
|
|
|
# ==========================================
|
|
# Database (PostgreSQL)
|
|
# ==========================================
|
|
DB_IMAGE=postgres:15-alpine
|
|
DB_USER=dev_ttipo
|
|
DB_PASSWORD=change-me-db-password
|
|
DB_NAME=comrelay_db
|
|
DB_DATA_DIR=./data/postgres
|
|
|
|
# ==========================================
|
|
# Redis
|
|
# ==========================================
|
|
REDIS_IMAGE=redis:7-alpine
|
|
REDIS_PASSWORD=change-me-redis-password
|
|
REDIS_DATA_DIR=./data/redis
|
|
|
|
# ==========================================
|
|
# API 경로
|
|
# ==========================================
|
|
# BACKEND_API_URL: 프론트 빌드에 주입(VITE_API_BASE_URL)
|
|
# CORS_ORIGIN : 백엔드가 허용할 프론트 오리진
|
|
BACKEND_API_URL=http://localhost:3100/api
|
|
CORS_ORIGIN=http://localhost:5273
|
|
|
|
# ==========================================
|
|
# AI (백엔드·프론트 공통)
|
|
# ==========================================
|
|
# AI_TIMEOUT_MS: AI 요청 타임아웃(ms). 백엔드 Claude 호출 abort + 프론트 axios 에 동일 적용.
|
|
# 프론트에는 build arg VITE_AI_TIMEOUT_MS 로 주입된다.
|
|
AI_TIMEOUT_MS=60000
|
|
|
|
# ==========================================
|
|
# 화상회의 (LiveKit Cloud)
|
|
# ==========================================
|
|
# 개발은 LiveKit Cloud(무료 dev)를 사용한다. https://cloud.livekit.io 에서 프로젝트 생성 후
|
|
# Settings → Keys 에서 발급된 값을 채운다. 코드 변경 없이 env 만으로 동작한다.
|
|
# LIVEKIT_API_KEY / LIVEKIT_API_SECRET : 백엔드 입장 토큰(JWT) 서명용 (절대 커밋 금지)
|
|
# LIVEKIT_WS_URL : 브라우저 → LiveKit 접속 URL. Cloud 는 wss://<project>.livekit.cloud
|
|
# (build arg/런타임 env 로 VITE_LIVEKIT_URL 에 주입)
|
|
# LIVEKIT_URL : 백엔드 → LiveKit 서버 API(RoomService 등) 주소. 보통 LIVEKIT_WS_URL 과 동일.
|
|
# (단계 1 토큰 발급은 오프라인이라 아직 미사용)
|
|
# 운영: .env.production 에 운영용 키/URL 만 넣으면 그대로 전환된다(셀프호스팅 시 자체 URL/키 사용).
|
|
LIVEKIT_API_KEY=APIxxxxxxxxxxxx
|
|
LIVEKIT_API_SECRET=your-livekit-cloud-api-secret
|
|
LIVEKIT_WS_URL=wss://your-project.livekit.cloud
|
|
LIVEKIT_URL=wss://your-project.livekit.cloud
|