restreamer-ui-v2/docker-compose.yml
Cesar Mendivil 00e98a19b3 feat: add InternalWHIP component and associated tests
- Implemented the InternalWHIP component for managing WHIP server configurations.
- Added functionality to load live WHIP state from Core and handle OBS URL generation.
- Included polling for active streams and notifying parent components of state changes.
- Created comprehensive tests for the InternalWHIP component covering various scenarios including fallback mechanisms and state changes.

test: add integration tests for WHIP source component

- Developed end-to-end tests for the InternalWHIP component to verify its behavior under different configurations.
- Ensured that the component correctly handles the loading of WHIP state, displays appropriate messages, and emits the correct onChange events.

test: add Settings WHIP configuration tests

- Implemented tests for the WHIP settings tab to validate loading and saving of WHIP configurations.
- Verified that the correct values are sent back to the Core when the user saves changes.
- Ensured that the UI reflects the current state of the WHIP configuration after Core restarts or changes.
2026-03-14 12:27:53 -07:00

80 lines
4.7 KiB
YAML

services:
restreamer-ui:
# NOTA: Primero compila con: yarn build
# Luego construye la imagen con: docker build --tag restreamer-ui-v2:latest .
# O usa el script: build-docker.bat
image: restreamer-ui-v2:latest
container_name: restreamer-ui
restart: unless-stopped
ports:
- "3000:3000"
environment:
# ── Restreamer Core ────────────────────────────────────────────────────
# URL del Core al que se conecta la UI. Dejar vacío para auto-detectar
# desde window.location (cuando la UI está embebida dentro del Core).
CORE_ADDRESS: "https://restreamer.nextream.sytes.net"
# ── yt-dlp / stream extractor ──────────────────────────────────────────
# Host:puerto del servicio extractor (usado por Caddy para reverse_proxy).
# Caddy expondrá el servicio en http://localhost:3000/yt-stream/
#YTDLP_HOST: "100.73.244.28:8080"
YTDLP_HOST: "192.168.1.20:8282"
# YTDLP_URL: URL completa del servicio yt-dlp vista desde el NAVEGADOR.
# Dejar vacío → la UI usará /yt-stream/ (Caddy proxy, mismo origen = sin CORS).
YTDLP_URL: ""
# ── Facebook OAuth2 microserver ────────────────────────────────────────
# Dejar vacío → Caddy proxy /fb-server → localhost:3002 (sin CORS)
FB_SERVER_URL: ""
# URL EXACTA registrada en Facebook como "Valid OAuth Redirect URI"
# Debe coincidir con lo que tienes en developers.facebook.com
FB_OAUTH_CALLBACK_URL: "https://djmaster.nextream.sytes.net/oauth/facebook/callback.htm"
# URL EXACTA registrada en Google Console como "Authorized redirect URI"
# Debe coincidir con lo que tienes en console.cloud.google.com
YT_OAUTH_CALLBACK_URL: "https://djmaster.nextream.sytes.net/oauth2callback"
# Clave de cifrado para tokens almacenados (cámbiala en producción)
FB_ENCRYPTION_SECRET: "restreamer-ui-fb-secret-key-32x!"
# ── WebRTC Relay → FFmpeg → RTMP ──────────────────────────────────────
# Host del Restreamer Core para el relay RTMP (en Docker = nombre del servicio)
# Si la UI corre junto al Core en la misma red Docker, usar el service name.
# Si corre independiente, apuntar a la IP/hostname del Core.
RTMP_HOST: "restreamer.nextream.sytes.net"
RTMP_PORT: "1935"
RTMP_APP: "live"
# ── LiveKit ────────────────────────────────────────────────────────────
# Credenciales del servidor LiveKit (self-hosted o LiveKit Cloud)
LIVEKIT_API_KEY: "APIBTqTGxf9htMK"
LIVEKIT_API_SECRET: "0dOHWPffwneaPg7OYpe4PeAes21zLJfeYJB9cKzSTtXW"
LIVEKIT_WS_URL: "wss://livekit-server.nextream.sytes.net"
# ── Servidor egress (WHIP ingest + WHEP relay) ─────────────────────────────
# URL del servidor egress / dominio del UI.
# El Core usa esta URL para WHEP pull: <WHIP_SERVER_URL>/whep/rooms/<channelId>
# Caddy proxea /whep/* → egress y /w/* → livekit-ingress, todo bajo el mismo dominio.
WHIP_SERVER_URL: "https://djmaster.nextream.sytes.net"
# ── LiveKit Ingress WHIP (proxy interno) ──────────────────────────────────
# Host:puerto interno del servicio livekit-ingress.
# Caddy hace proxy /w/* → este host (OBS nunca lo ve directamente).
LIVEKIT_INGRESS_HOST: "192.168.1.20:8088"
LIVEKIT_INGRESS_INTERNAL_URL: "http://192.168.1.20:8088"
# URL pública del UI. Se usa para construir la WHIP URL que ve OBS.
# Dejar vacío = se auto-detecta del Host header de cada request.
UI_BASE_URL: "https://djmaster.nextream.sytes.net"
# ── Egress server WHEP (proxy interno) ──────────────────────────────────
# Caddy hace proxy /whep/* → este host.
# Core input: https://djmaster.nextream.sytes.net/whep/rooms/<channelId>
EGRESS_HOST: "llmchats-whep.zuqtxy.easypanel.host"
volumes:
# Persistencia de tokens OAuth2 (Facebook, YouTube, etc.)
- restreamer-ui-fb-data:/data/fb
# devices:
# - "/dev/video1:/dev/video1" # Descomentar si hay cámara USB disponible
volumes:
restreamer-ui-fb-data:
driver: local