Введение
Бэкенд Bedrud - это платформа для встреч в виде единого бинарного файла, написанная на Go 1.24+. Все зависимости - медиасервер, веб-фронтенд, TURN-сервер - встроены в один исполняемый файл.
Ключевые технологии
- Основной фреймворк: Fiber v2 (маршрутизатор без аллокаций, API в стиле Express).
- Слой базы данных: GORM с поддержкой SQLite (стандарт) и PostgreSQL (продакшен).
- Медиадвижок: LiveKit (встроен как дочерний бинарный файл).
- Система авторизации: Многоуровневая аутентификация с поддержкой JWT, OAuth2 (Google/GitHub/Twitter) и беспарольных FIDO2 Passkeys.
- Встроенные статические ассеты: Использует пакет
embedиз Go 1.16+ для упаковки React-фронтенда (пре-рендеренные клиентские ассеты SSR). - Развёртывание: Интегрированный автоустановщик для Debian/Ubuntu с оркестрацией systemd и поддержкой ACME (Let’s Encrypt).
Почему такая архитектура?
Платформы WebRTC обычно запускают отдельные сервисы для сигнализации, TURN, веб-обслуживания и управления базой данных. Bedrud объединяет всё это в один бинарный файл путём:
- Извлечения бинарного файла медиасервера во время выполнения.
- Проксирования медиатрафика через основной HTTP(S)-порт.
- Автоматизации конфигурации на уровне ОС (SSL, systemd) через сам бинарный файл.
Высокоуровневая архитектура
Бэкенд следует стандартной многоуровневой архитектуре:
- Слой сервера (
internal/server): Настраивает приложение Fiber, маршруты и middleware. - Слой обработчиков (
internal/handlers): Управляет HTTP-запросами и ответами. - Слой репозитория (
internal/repository): Обрабатывает запросы к базе данных с использованием GORM. - Слой моделей (
internal/models): Определяет таблицы базы данных и структуры Go. - Слой сервисов/логики: Интегрирован в обработчики и репозитории для простоты, со специализированными пакетами вроде
internal/authиinternal/livekit.
Главная точка входа
Приложение запускается из server/cmd/bedrud/main.go. Есть три основных режима:
run: Запускает полный сервер встреч.livekit: Запускает только встроенный медиасервер.install: Автоматически настраивает сервер на системах Debian/Ubuntu.
Разделы документации
- Структура кода: Где находится всё необходимое?
- База данных и модели: Как хранятся данные?
- Аутентификация: Как пользователи входят в систему?
- API-обработчики: Как обрабатываются запросы?
- Интеграция LiveKit: Как работает видеосервер?
- Подключение WebRTC: Как клиенты устанавливают медиасоединения? (STUN/ICE/TURN/SFU)
- TURN-сервер: Архитектура TURN-ретрансляции, конфигурация и устранение неполадок
- Установка и развёртывание: Как работает автоустановщик?