feat: 화상회의 단계 6 — 셀프호스팅 배포 구성/가이드

운영에서 LiveKit(SFU)을 직접 호스팅하기 위한 구성과 배포 가이드를 추가한다.
실제 배포는 서버/도메인/TLS 가 필요하므로, 클론 후 값만 채워 배포하는 템플릿 형태.

- docker-compose.yml: livekit 서비스를 opt-in 프로파일(selfhost-livekit)로 추가.
  기존 dev/운영 동작 불변(프로파일 미지정 시 미생성). 시그널링 7880 은 expose(프록시 TLS 라우팅),
  미디어 7881/tcp·7882/udp 는 호스트 공개. 키는 LIVEKIT_KEYS env 주입.
- livekit/livekit.prod.yaml: 단일 노드 운영 설정(use_external_ip, tcp/udp 포트).
  클러스터링용 redis 블록은 비밀값이라 주석으로 두고 배포 시 사본에 채움.
- .env.production.example: LIVEKIT_* 섹션(셀프호스팅/ Cloud 양쪽 안내).
- livekit/DEPLOY.md: 사전준비/키생성/기동/프록시(wss)/방화벽/검증(load-test)/
  멀티노드 클러스터링(Redis·캐스케이딩)/운영팁.
- .gitignore: livekit/*.local.yaml(클러스터 설정 사본) 제외.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-23 22:27:10 +09:00
parent b40e795664
commit c5a8fc8697
5 changed files with 219 additions and 0 deletions
+34
View File
@@ -0,0 +1,34 @@
# LiveKit 셀프호스팅 운영 설정 (단계 6)
# - 단일 노드 기준. 멀티 노드 클러스터링은 아래 redis 블록을 활성화한다(livekit/DEPLOY.md 참고).
# - API 키/시크릿은 환경변수 LIVEKIT_KEYS 로 주입한다(이 파일에 비밀값을 두지 않는다).
# - 시그널링(7880)은 리버스 프록시에서 TLS 종단 후 라우팅한다(wss://livekit.<도메인>).
# - 미디어(RTC)는 프록시를 거치지 않고 서버 공인 IP 로 직접 통신한다.
# 시그널링 / HTTP API (리버스 프록시 뒤)
port: 7880
rtc:
# ICE/TCP 폴백 포트 (UDP 차단 환경 대비)
tcp_port: 7881
# ICE/UDP 단일 mux 포트 (방화벽 단순화 — 이 포트만 열면 됨)
udp_port: 7882
# 운영: 서버의 공인 IP 를 ICE 후보로 자동 광고
use_external_ip: true
logging:
level: info
# 내장 TURN 은 기본 비활성. 엄격한 방화벽 뒤 클라이언트를 지원하려면
# DEPLOY.md 의 TURN/TLS 설정을 참고해 활성화한다.
turn:
enabled: false
# ── 멀티 노드 클러스터링(수평 확장) ──────────────────────────────
# 2대 이상의 LiveKit 노드를 Redis 로 묶어 트래픽을 분산한다.
# Redis 비밀번호가 들어가므로(비밀값) 이 블록은 커밋 파일에 두지 않고,
# 배포 시 이 파일을 복사한 사본(gitignore)에 채워 마운트한다. (livekit/DEPLOY.md 참고)
#
# redis:
# address: redis:6379
# db: 1 # 앱 캐시(db 0)와 분리
# password: <REDIS_PASSWORD>