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
+33
View File
@@ -150,6 +150,39 @@ services:
labels:
- "com.centurylinklabs.watchtower.enable=true"
# ----------------------------------------
# 5. LiveKit (화상회의 SFU) — 셀프호스팅 (opt-in 프로파일)
# 실행: docker compose --profile selfhost-livekit --env-file .env.production up -d --build
# 미사용시(예: LiveKit Cloud) 프로파일을 켜지 않으면 생성되지 않는다.
# 배포·클러스터링 가이드: livekit/DEPLOY.md
# ----------------------------------------
livekit:
image: livekit/livekit-server:v1.8.4
container_name: ${PROJECT_NAME}-livekit
profiles:
- selfhost-livekit
command: --config /etc/livekit/livekit.yaml
environment:
# 키/시크릿은 "key: secret" 형식으로 주입(콜론+공백 때문에 전체를 따옴표로 감쌈)
- "LIVEKIT_KEYS=${LIVEKIT_API_KEY}: ${LIVEKIT_API_SECRET}"
expose:
- "7880" # 시그널링/HTTP API — 리버스 프록시(TLS)에서 wss 로 라우팅
ports:
- "7881:7881" # ICE/TCP 폴백
- "7882:7882/udp" # ICE/UDP (mux)
volumes:
# 클러스터링 시에는 redis 비밀번호가 담긴 사본을 마운트(DEPLOY.md 참고)
- ./livekit/livekit.prod.yaml:/etc/livekit/livekit.yaml:ro
restart: unless-stopped
networks:
- app-network
- proxy
deploy:
resources:
limits:
cpus: '2.0'
memory: 2g
networks:
app-network:
driver: bridge