Bedrud Documentación

Bedrud utiliza archivos de configuración YAML tanto para el servidor principal como para el servidor de medios LiveKit integrado.

Ver también: Inicio Rápido | Instalación | Guía de Implementación | Guía de Docker

Configuración Mínima de Producción

La configuración predeterminada funciona para desarrollo. Para producción, cambia estos valores en /etc/bedrud/config.yaml:

auth:
  jwtSecret: "change-to-random-string-32-chars"
  sessionSecret: "change-to-another-random-string"

Reinicia después de los cambios:

sudo systemctl restart bedrud livekit

Referencia completa a continuación.


Configuración del Servidor

Ubicación: server/config.yaml (desarrollo) o /etc/bedrud/config.yaml (producción)

Referencia Completa

server:
  port: 8090                    # Puerto HTTP
  host: "localhost"             # Dirección de enlace
 
database:
  type: "sqlite"                # Tipo de base de datos: sqlite o postgres
  path: "data.db"               # Ruta al archivo de base de datos SQLite
 
logger:
  level: "debug"                # Nivel de registro: debug, info, warn, error
  outputPath: ""                # Ruta al archivo de registro (vacío = stdout)
 
livekit:
  host: "http://localhost:8090/livekit"  # URL externa de LiveKit
  internalHost: "http://127.0.0.1:7880"  # URL interna de LiveKit
  apiKey: "devkey"              # API key de LiveKit
  apiSecret: "devsecret"        # API secret de LiveKit
 
auth:
  jwtSecret: "your-jwt-secret"           # Secreto para firmar tokens JWT
  tokenDuration: 24                       # Expiración del token en horas
  sessionSecret: "your-session-secret"    # Secreto para cookies de sesión
  frontendURL: "http://localhost:8090"    # URL del frontend (para redirecciones OAuth)
 
  # Proveedores OAuth (opcional)
  google:
    clientId: ""
    clientSecret: ""
  github:
    clientId: ""
    clientSecret: ""
  twitter:
    clientKey: ""
    clientSecret: ""
 
cors:
  allowedOrigins: "http://localhost:8090,http://localhost:3000"  # Separados por comas
  allowedHeaders: "Origin, Content-Type, Accept, Authorization"
  allowedMethods: "GET, POST, PUT, DELETE, OPTIONS"
  allowCredentials: true

Configuraciones Clave

Base de Datos

Por defecto, Bedrud utiliza SQLite con un archivo en la path configurada. Para producción con mayor concurrencia, cambia a PostgreSQL proporcionando una cadena de conexión. Al usar PostgreSQL, el campo path contiene una cadena de conexión, no una ruta de archivo:

database:
  type: "postgres"
  path: "postgres://user:password@localhost:5432/bedrud?sslmode=disable"

Autenticación

El jwtSecret se usa para firmar tokens de acceso y de actualización. Cámbialo del valor predeterminado en producción.

Los proveedores OAuth son opcionales. Si no los configuras, los botones de inicio de sesión social no aparecerán en la interfaz. Cada proveedor requiere registrar una app OAuth con el servicio respectivo y proporcionar el client ID y el secret.

CORS

La cadena allowedOrigins (separada por comas) debe incluir la URL donde se sirve tu frontend. En desarrollo, es http://localhost:3000. En producción, establécela a tu dominio (por ejemplo, https://meet.example.com).


Configuración de LiveKit

Ubicación: server/config/livekit.yaml (desarrollo) o /etc/bedrud/livekit.yaml (producción)

port: 7880                      # Puerto HTTP/WebSocket de LiveKit
 
rtc:
  port_range_start: 50000       # Inicio del rango de puertos UDP
  port_range_end: 60000         # Fin del rango de puertos UDP
  use_external_ip: true         # Usar IP externa para RTC
 
turn:
  enabled: true
  domain: "localhost"
  tls_port: 5349
  udp_port: 3478
 
keys:
  devkey: "devsecret"           # Debe coincidir con la configuración del servidor
 
logging:
  level: info
 
room:
  auto_create: true              # Crear salas automáticamente cuando los participantes se unen
  empty_timeout: 60              # Segundos antes de eliminar una sala vacía
  departure_timeout: 60          # Segundos para mantener la sala después de que todos los participantes salgan
  max_participants: 20           # Máximo de participantes por sala (0 = ilimitado)
  enable_remote_unmute: true     # Permitir silenciar/desilenciar participantes desde el servidor

Las keys en livekit.yaml deben coincidir con livekit.apiKey y livekit.apiSecret en el config.yaml del servidor.

Rango de Puertos RTC

LiveKit utiliza puertos UDP para los flujos de medios. El rango predeterminado 50000-60000 funciona para la mayoría de configuraciones. Si está detrás de un firewall, asegúrate de que estos puertos estén abiertos.

Consulta Conectividad WebRTC para la arquitectura y solución de problemas.

Servidor TURN

El servidor TURN integrado retransmite medios para clientes detrás de NAT restrictivos o firewalls corporativos. Está habilitado por defecto en los puertos 3478 (UDP) y 5349 (TLS).

TURN es un relay de último recurso: la mayoría de los clientes (~80%) se conectan directamente vía UDP y nunca lo usan. Cuando TURN se activa, el servidor soporta todo el ancho de banda de los medios retransmitidos.

Requisito de TLS: TURN/TLS (puerto 5349) necesita un certificado TLS válido. Para producción, establece turn.tls_port: 443 y apunta cert_file/key_file a tu certificado, o coloca un balanceador de carga de capa 4 delante con external_tls: true.

Consulta la Guía del Servidor TURN para arquitectura, detalles de configuración, cálculos de ancho de banda y solución de problemas.

Configuración de Salas

La sección room: controla el comportamiento de las salas de reuniones:

  • auto_create - Crear salas automáticamente cuando los participantes se unen (predeterminado: true)
  • empty_timeout - Segundos antes de eliminar una sala que nunca fue ocupada (predeterminado: 60)
  • departure_timeout - Segundos para mantener la sala activa después de que todos los participantes salgan (predeterminado: 60)
  • max_participants - Máximo de participantes por sala. Establece a 0 para sin límite (predeterminado: 20)
  • enable_remote_unmute - Permitir silenciar/desilenciar participantes desde el servidor (predeterminado: true)

Ajuste para capacidad:

  • Reuniones de equipos pequeños: max_participants: 10-20
  • Webinars grandes: max_participants: 100 (o 0 para ilimitado)
  • Servidores con recursos limitados: Reduce max_participants para disminuir el uso de CPU/memoria

Variables de Entorno

Los valores de configuración se pueden sobreescribir con variables de entorno. La nomenclatura sigue una convención de prefijo por sección:

Para despliegues con Docker, consulta la Guía de Docker.

export SERVER_PORT=8090
export DB_PATH=/var/lib/bedrud/bedrud.db
export JWT_SECRET=production-secret
export LIVEKIT_HOST=http://localhost:8090/livekit
export LIVEKIT_API_KEY=prodkey
export LIVEKIT_API_SECRET=prodsecret

Referencia Completa de Variables de Entorno

Var de EntornoRuta YAMLDescripción
SERVER_PORTserver.portPuerto de escucha HTTP
SERVER_ENABLE_TLSserver.enableTLSHabilitar HTTPS (true/false)
SERVER_CERT_FILEserver.certFileRuta al certificado TLS
SERVER_KEY_FILEserver.keyFileRuta a la clave privada TLS
SERVER_DOMAINserver.domainNombre de dominio
SERVER_EMAILserver.emailCorreo electrónico para Let’s Encrypt
SERVER_USE_ACMEserver.useACMEHabilitar Let’s Encrypt automático (true/false)
SERVER_TRUSTED_PROXIESserver.trustedProxiesIPs de proxies de confianza separadas por comas
SERVER_PROXY_HEADERserver.proxyHeaderHeader para leer la IP del cliente (p. ej., X-Forwarded-For)
DB_HOSTdatabase.hostHost de la base de datos (PostgreSQL)
DB_PORTdatabase.portPuerto de la base de datos
DB_USERdatabase.userUsuario de la base de datos
DB_PASSWORDdatabase.passwordContraseña de la base de datos
DB_NAMEdatabase.dbnameNombre de la base de datos
DB_TYPEdatabase.typesqlite o postgres
DB_PATHdatabase.pathRuta al archivo SQLite o cadena de conexión PostgreSQL
LIVEKIT_HOSTlivekit.hostURL externa de LiveKit
LIVEKIT_INTERNAL_HOSTlivekit.internalHostURL interna de LiveKit
LIVEKIT_API_KEYlivekit.apiKeyAPI key de LiveKit
LIVEKIT_API_SECRETlivekit.apiSecretAPI secret de LiveKit
JWT_SECRETauth.jwtSecretSecreto para firmar tokens JWT
AUTH_FRONTEND_URLauth.frontendURLURL del frontend para redirecciones OAuth
CORS_ALLOWED_ORIGINScors.allowedOriginsOrígenes permitidos separados por comas
CORS_ALLOWED_HEADERScors.allowedHeadersHeaders de solicitud permitidos
CORS_ALLOWED_METHODScors.allowedMethodsMétodos HTTP permitidos
CORS_ALLOW_CREDENTIALScors.allowCredentialsPermitir credenciales (true/false)
CORS_EXPOSE_HEADERScors.exposeHeadersHeaders expuestos al navegador
CORS_MAX_AGEcors.maxAgeDuración de caché preflight en segundos

Lista de Verificación de Producción

  • Cambiar jwtSecret y sessionSecret a valores aleatorios seguros
  • Establecer logger.level a info o warn
  • Configurar TLS (vía instalador o proxy inverso)
  • Establecer cors.allowedOrigins a tu dominio de producción
  • Configurar proveedores OAuth si es necesario
  • Abrir el rango de puertos RTC de LiveKit en tu firewall
  • Configurar rotación de registros para /var/log/bedrud/

Para la configuración completa de producción, consulta la Guía de Implementación.