Files
comrelay/livekit/nginx.livekit.conf.example
ttipo 3ec7e76f7c docs: LiveKit 셀프호스팅(AWS EC2+도커 nginx) 구성 완성
- livekit/nginx.livekit.conf.example: 도커 nginx용 wss 리버스 프록시 참조 설정 추가
  (docker DNS resolver+변수 proxy_pass로 부팅 순서 의존 제거, TLS 종단·WS 업그레이드)
- DEPLOY.md: AWS EC2+도커 nginx 4-1장 추가, 참조 설정 파일로 연결
- .env.production.example: LiveKit 섹션을 셀프호스팅 우선으로 정리, 키 생성 원라이너 추가

애플리케이션 코드 변경 없음(백엔드 토큰 오프라인 서명·프론트 env 주입뿐).
운영은 selfhost-livekit 프로파일 + EC2 보안그룹/EIP 구성으로 가동.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-25 11:30:32 +09:00

75 lines
3.2 KiB
Plaintext

# LiveKit 시그널링(wss) 리버스 프록시 — 도커 컨테이너 nginx 용 참조 설정
#
# 사용법:
# 1) 이 파일을 운영 nginx 의 conf.d 에 복사: nginx.livekit.conf (.example 제거)
# 2) <도메인> / 인증서 경로를 실제 값으로 치환
# 3) nginx 컨테이너를 base compose 의 외부 `proxy` 네트워크에 join (아래 주석 참고)
# 4) docker compose ... exec nginx nginx -s reload (또는 컨테이너 재기동)
#
# 전제(자세한 내용: livekit/DEPLOY.md 4·4-1장):
# - LiveKit 컨테이너는 `selfhost-livekit` 프로파일로 기동되어 `proxy` 네트워크에 있다.
# - nginx 컨테이너도 같은 `proxy` 네트워크에 있어야 `livekit` 이름이 해석된다.
# (호스트 설치형 nginx 라면 docker-compose 의 livekit 7880 을 ports 로 publish 한 뒤
# proxy_pass 를 http://127.0.0.1:7880 으로 바꾼다.)
# - 미디어(RTC: 7881/tcp, 7882/udp)는 이 프록시를 거치지 않고 서버 공인 IP 로 직접 통신한다.
# HTTP → HTTPS 강제 리다이렉트 (Let's Encrypt 갱신 경로는 통과)
server {
listen 80;
server_name livekit.<도메인>;
location /.well-known/acme-challenge/ {
root /var/www/certbot;
}
location / {
return 301 https://$host$request_uri;
}
}
# 시그널링(wss) 종단 → LiveKit 7880
server {
listen 443 ssl;
http2 on;
server_name livekit.<도메인>;
# 이 서브도메인용 인증서 (certbot 등으로 발급)
ssl_certificate /etc/letsencrypt/live/livekit.<도메인>/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/livekit.<도메인>/privkey.pem;
# 도커 내장 DNS — `livekit` 업스트림을 런타임에 해석해 부팅 순서 의존을 제거한다.
# (이 줄과 변수 proxy_pass 가 없으면 livekit 컨테이너가 늦게 뜰 때 nginx 가 부팅 실패한다.)
resolver 127.0.0.11 valid=30s;
location / {
set $lk http://livekit:7880; # 변수로 받아 런타임 해석
proxy_pass $lk;
# WebSocket 업그레이드 (시그널링)
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme; # TLS 종단이므로 백엔드에 https 알림
# 장수명 WebSocket 유지
proxy_read_timeout 600s;
proxy_send_timeout 600s;
}
}
# ─────────────────────────────────────────────────────────────────────────────
# nginx 컨테이너를 `proxy` 네트워크에 연결하는 예 (운영 nginx 의 compose 발췌):
#
# services:
# nginx:
# # ...
# networks:
# - proxy # base compose 의 external proxy 네트워크
# networks:
# proxy:
# external: true
# ─────────────────────────────────────────────────────────────────────────────