Bedrud Документация

Bedrud использует YAML-файлы конфигурации как для основного сервера, так и для встроенного медиасервера LiveKit.

См. также: Быстрый старт | Установка | Руководство по развёртыванию | Руководство по Docker

Минимальная конфигурация для production

Конфигурация по умолчанию подходит для разработки. Для production измените следующие значения в /etc/bedrud/config.yaml:

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

Перезапустите после изменений:

sudo systemctl restart bedrud livekit

Полная справка ниже.


Конфигурация сервера

Расположение: server/config.yaml (разработка) или /etc/bedrud/config.yaml (production)

Полная справка

server:
  port: 8090                    # HTTP порт
  host: "localhost"             # Адрес привязки
 
database:
  type: "sqlite"                # Тип базы данных: sqlite или postgres
  path: "data.db"               # Путь к файлу базы данных SQLite
 
logger:
  level: "debug"                # Уровень логирования: debug, info, warn, error
  outputPath: ""                # Путь к файлу логов (пусто = stdout)
 
livekit:
  host: "http://localhost:8090/livekit"  # Внешний URL LiveKit
  internalHost: "http://127.0.0.1:7880"  # Внутренний URL LiveKit
  apiKey: "devkey"              # API-ключ LiveKit
  apiSecret: "devsecret"        # API-секрет LiveKit
 
auth:
  jwtSecret: "your-jwt-secret"           # Секрет для подписи JWT-токенов
  tokenDuration: 24                       # Срок действия токена в часах
  sessionSecret: "your-session-secret"    # Секрет для cookie сессий
  frontendURL: "http://localhost:8090"    # URL фронтенда (для редиректов OAuth)
 
  # Провайдеры OAuth (опционально)
  google:
    clientId: ""
    clientSecret: ""
  github:
    clientId: ""
    clientSecret: ""
  twitter:
    clientKey: ""
    clientSecret: ""
 
cors:
  allowedOrigins: "http://localhost:8090,http://localhost:3000"  # Через запятую
  allowedHeaders: "Origin, Content-Type, Accept, Authorization"
  allowedMethods: "GET, POST, PUT, DELETE, OPTIONS"
  allowCredentials: true

Основные настройки

База данных

По умолчанию Bedrud использует SQLite с файлом по указанному пути path. Для production с высокой параллельностью переключитесь на PostgreSQL, указав строку подключения. При использовании PostgreSQL поле path содержит строку подключения, а не путь к файлу:

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

Аутентификация

jwtSecret используется для подписи access- и refresh-токенов. Измените его со значения по умолчанию в production.

Провайдеры OAuth опциональны. Если вы их не настроите, кнопки входа через соцсети не появятся в интерфейсе. Для каждого провайдера необходимо зарегистрировать OAuth-приложение в соответствующем сервисе и указать client ID и секрет.

CORS

Строка allowedOrigins (через запятую) должна содержать URL, по которому обслуживается фронтенд. В разработке это http://localhost:3000. В production укажите ваш домен (например, https://meet.example.com).


Конфигурация LiveKit

Расположение: server/config/livekit.yaml (разработка) или /etc/bedrud/livekit.yaml (production)

port: 7880                      # HTTP/WebSocket порт LiveKit
 
rtc:
  port_range_start: 50000       # Начало диапазона UDP-портов
  port_range_end: 60000         # Конец диапазона UDP-портов
  use_external_ip: true         # Использовать внешний IP для RTC
 
turn:
  enabled: true
  domain: "localhost"
  tls_port: 5349
  udp_port: 3478
 
keys:
  devkey: "devsecret"           # Должно совпадать с конфигурацией сервера
 
logging:
  level: info
 
room:
  auto_create: true              # Автосоздание комнат при подключении участников
  empty_timeout: 60              # Секунды до удаления пустой комнаты
  departure_timeout: 60          # Секунды хранения комнаты после ухода всех участников
  max_participants: 20           # Максимум участников в комнате (0 = без ограничений)
  enable_remote_unmute: true     # Разрешить серверное снятие мута у участников

Значения keys в livekit.yaml должны совпадать с livekit.apiKey и livekit.apiSecret в файле config.yaml сервера.

Диапазон портов RTC

LiveKit использует UDP-порты для медиапотоков. Диапазон по умолчанию 50000-60000 подходит для большинства конфигураций. Если сервер находится за файрволом, убедитесь, что эти порты открыты.

См. WebRTC-подключение для архитектуры и устранения неполадок.

Сервер TURN

Встроенный сервер TURN ретранслирует медиа для клиентов за строгими NAT или корпоративными файрволами. Он включён по умолчанию на портах 3478 (UDP) и 5349 (TLS).

TURN - это ретрансляция последнего рубежа - большинство клиентов (~80%) подключаются напрямую через UDP и никогда его не используют. Когда TURN активируется, сервер несёт всю нагрузку ретранслируемого медиатрафика.

Требование TLS: TURN/TLS (порт 5349) требует действительный TLS-сертификат. Для production установите turn.tls_port: 443 и укажите cert_file/key_file для вашего сертификата, либо разместите Layer 4 балансировщик нагрузки спереди с external_tls: true.

См. Руководство по серверу TURN для архитектуры, деталей конфигурации, расчёта пропускной способности и устранения неполадок.

Настройки комнат

Секция room: управляет поведением комнат конференций:

  • auto_create - Автоматически создавать комнаты при подключении участников (по умолчанию: true)
  • empty_timeout - Секунды до удаления комнаты, в которую никто не подключился (по умолчанию: 60)
  • departure_timeout - Секунды хранения комнаты активной после ухода всех участников (по умолчанию: 60)
  • max_participants - Максимум участников в комнате. Установите 0 для снятия ограничений (по умолчанию: 20)
  • enable_remote_unmute - Разрешить серверное управление мутом участников (по умолчанию: true)

Настройка для различных сценариев:

  • Командные совещания: max_participants: 10-20
  • Большие вебинары: max_participants: 100 (или 0 без ограничений)
  • Серверы с ограниченными ресурсами: Уменьшите max_participants для снижения нагрузки на CPU/память

Переменные окружения

Значения конфигурации можно переопределить через переменные окружения. Именование следует соглашению префиксов по секциям:

Для развёртывания в Docker см. Руководство по 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

Полная справка по переменным окружения

ПеременнаяПуть в YAMLОписание
SERVER_PORTserver.portHTTP-порт прослушивания
SERVER_ENABLE_TLSserver.enableTLSВключить HTTPS (true/false)
SERVER_CERT_FILEserver.certFileПуть к TLS-сертификату
SERVER_KEY_FILEserver.keyFileПуть к закрытому ключу TLS
SERVER_DOMAINserver.domainИмя домена
SERVER_EMAILserver.emailEmail для Let’s Encrypt
SERVER_USE_ACMEserver.useACMEВключить автоматический Let’s Encrypt (true/false)
SERVER_TRUSTED_PROXIESserver.trustedProxiesIP доверенных прокси через запятую
SERVER_PROXY_HEADERserver.proxyHeaderЗаголовок для определения IP клиента (например, X-Forwarded-For)
DB_HOSTdatabase.hostХост базы данных (PostgreSQL)
DB_PORTdatabase.portПорт базы данных
DB_USERdatabase.userПользователь базы данных
DB_PASSWORDdatabase.passwordПароль базы данных
DB_NAMEdatabase.dbnameИмя базы данных
DB_TYPEdatabase.typesqlite или postgres
DB_PATHdatabase.pathПуть к файлу SQLite или строка подключения PostgreSQL
LIVEKIT_HOSTlivekit.hostВнешний URL LiveKit
LIVEKIT_INTERNAL_HOSTlivekit.internalHostВнутренний URL LiveKit
LIVEKIT_API_KEYlivekit.apiKeyAPI-ключ LiveKit
LIVEKIT_API_SECRETlivekit.apiSecretAPI-секрет LiveKit
JWT_SECRETauth.jwtSecretСекрет для подписи JWT-токенов
AUTH_FRONTEND_URLauth.frontendURLURL фронтенда для редиректов OAuth
CORS_ALLOWED_ORIGINScors.allowedOriginsРазрешённые источники через запятую
CORS_ALLOWED_HEADERScors.allowedHeadersРазрешённые заголовки запросов
CORS_ALLOWED_METHODScors.allowedMethodsРазрешённые HTTP-методы
CORS_ALLOW_CREDENTIALScors.allowCredentialsРазрешить учётные данные (true/false)
CORS_EXPOSE_HEADERScors.exposeHeadersЗаголовки, доступные браузеру
CORS_MAX_AGEcors.maxAgeВремя кэширования preflight-запросов в секундах

Чек-лист для production

  • Измените jwtSecret и sessionSecret на надёжные случайные значения
  • Установите logger.level в info или warn
  • Настройте TLS (через установщик или обратный прокси)
  • Установите cors.allowedOrigins на ваш production-домен
  • Настройте провайдеры OAuth при необходимости
  • Откройте диапазон портов RTC LiveKit в файрволе
  • Настройте ротацию логов для /var/log/bedrud/

Полная инструкция по настройке production см. в Руководстве по развёртыванию.