Introducción
El backend de Bedrud es una plataforma de reuniones en un solo binario escrita en Go 1.24+. Todas las dependencias - servidor de medios, frontend web, servidor TURN - están integradas en un solo ejecutable.
Tecnologías Principales
- Framework Principal: Fiber v2 (enrutador sin asignación de memoria, API estilo Express).
- Capa de Base de Datos: GORM con soporte para SQLite (estándar) y PostgreSQL (producción).
- Motor de Medios: LiveKit (integrado como binario hermano).
- Sistema de Autenticación: Autenticación multicapa compatible con JWT, OAuth2 (Google/GitHub/Twitter) y Passkeys FIDO2 sin contraseña.
- Recursos Estáticos Integrados: Utiliza el paquete
embedde Go 1.16+ para empaquetar el frontend de React (recursos del cliente pre-renderizados con SSR). - Despliegue: Instalador automático integrado para Debian/Ubuntu con orquestación mediante systemd y soporte para ACME (Let’s Encrypt).
¿Por qué esta arquitectura?
Las plataformas WebRTC normalmente ejecutan servicios separados para señalización, TURN, servicio web y gestión de base de datos. Bedrud consolida todos estos en un solo binario al:
- Extraer el binario del servidor de medios en tiempo de ejecución.
- Proxyar el tráfico de medios a través del puerto HTTP(S) principal.
- Automatizar la configuración a nivel de sistema operativo (SSL, systemd) desde el propio binario.
Arquitectura General
El backend sigue una arquitectura por capas estándar:
- Capa de Servidor (
internal/server): Configura la app de Fiber, rutas y middleware. - Capa de Handlers (
internal/handlers): Gestiona las solicitudes y respuestas HTTP. - Capa de Repositorio (
internal/repository): Maneja las consultas a la base de datos mediante GORM. - Capa de Modelos (
internal/models): Define las tablas de la base de datos y las estructuras de Go. - Capa de Servicio/Lógica: Integrada en los handlers y repositorios por simplicidad, con paquetes especializados como
internal/autheinternal/livekit.
Punto de Entrada Principal
La aplicación se inicia en server/cmd/bedrud/main.go. Tiene tres modos principales:
run: Inicia el servidor de reuniones completo.livekit: Inicia únicamente el servidor de medios integrado.install: Configura automáticamente el servidor en sistemas Debian/Ubuntu.
Secciones de la Documentación
- Estructura del Código: ¿Dónde se encuentra todo?
- Base de Datos y Modelos: ¿Cómo se almacenan los datos?
- Autenticación: ¿Cómo inician sesión los usuarios?
- API Handlers: ¿Cómo se procesan las solicitudes?
- Integración con LiveKit: ¿Cómo funciona el servidor de video?
- Conectividad WebRTC: ¿Cómo establecen los clientes las conexiones de medios? (STUN/ICE/TURN/SFU)
- Servidor TURN: Arquitectura del relay TURN, configuración y solución de problemas
- Instalación y Despliegue: ¿Cómo funciona el instalador automático?