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 livekitReferencia 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: trueConfiguraciones 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 servidorLas 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 a0para 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(o0para ilimitado) - Servidores con recursos limitados: Reduce
max_participantspara 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=prodsecretReferencia Completa de Variables de Entorno
| Var de Entorno | Ruta YAML | Descripción |
|---|---|---|
SERVER_PORT | server.port | Puerto de escucha HTTP |
SERVER_ENABLE_TLS | server.enableTLS | Habilitar HTTPS (true/false) |
SERVER_CERT_FILE | server.certFile | Ruta al certificado TLS |
SERVER_KEY_FILE | server.keyFile | Ruta a la clave privada TLS |
SERVER_DOMAIN | server.domain | Nombre de dominio |
SERVER_EMAIL | server.email | Correo electrónico para Let’s Encrypt |
SERVER_USE_ACME | server.useACME | Habilitar Let’s Encrypt automático (true/false) |
SERVER_TRUSTED_PROXIES | server.trustedProxies | IPs de proxies de confianza separadas por comas |
SERVER_PROXY_HEADER | server.proxyHeader | Header para leer la IP del cliente (p. ej., X-Forwarded-For) |
DB_HOST | database.host | Host de la base de datos (PostgreSQL) |
DB_PORT | database.port | Puerto de la base de datos |
DB_USER | database.user | Usuario de la base de datos |
DB_PASSWORD | database.password | Contraseña de la base de datos |
DB_NAME | database.dbname | Nombre de la base de datos |
DB_TYPE | database.type | sqlite o postgres |
DB_PATH | database.path | Ruta al archivo SQLite o cadena de conexión PostgreSQL |
LIVEKIT_HOST | livekit.host | URL externa de LiveKit |
LIVEKIT_INTERNAL_HOST | livekit.internalHost | URL interna de LiveKit |
LIVEKIT_API_KEY | livekit.apiKey | API key de LiveKit |
LIVEKIT_API_SECRET | livekit.apiSecret | API secret de LiveKit |
JWT_SECRET | auth.jwtSecret | Secreto para firmar tokens JWT |
AUTH_FRONTEND_URL | auth.frontendURL | URL del frontend para redirecciones OAuth |
CORS_ALLOWED_ORIGINS | cors.allowedOrigins | Orígenes permitidos separados por comas |
CORS_ALLOWED_HEADERS | cors.allowedHeaders | Headers de solicitud permitidos |
CORS_ALLOWED_METHODS | cors.allowedMethods | Métodos HTTP permitidos |
CORS_ALLOW_CREDENTIALS | cors.allowCredentials | Permitir credenciales (true/false) |
CORS_EXPOSE_HEADERS | cors.exposeHeaders | Headers expuestos al navegador |
CORS_MAX_AGE | cors.maxAge | Duración de caché preflight en segundos |
Lista de Verificación de Producción
- Cambiar
jwtSecretysessionSecreta valores aleatorios seguros - Establecer
logger.levelainfoowarn - Configurar TLS (vía instalador o proxy inverso)
- Establecer
cors.allowedOriginsa 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.