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

Обновлено:

Как загружается конфигурация

При запуске slyber_turn ищет и загружает файл переменных окружения .env

  1. Путь, явно указанный в переменной окружения ENV_FILE.
  2. Файл .env в текущей рабочей директории (./.env).
  3. Файл .env, лежащий в одной папке с исполняемым бинарным файлом slyber_turn (с учетом символических ссылок).
  4. Стандартный системный путь /opt/slyber_turn/.env.

Поверх переменных окружения вы можете передать флаги командной строки (CLI) - они имеют наивысший приоритет и перезаписывают значения из .env.

Справочник переменных окружения (.env) и флагов CLI

1. Сетевые настройки и ретрансляция (TURN/STUN)

Переменная .envФлаг CLIПо умолчаниюОписание
PUBLIC_IP-public-ipauto (или пусто)Внешний публичный IPv4 адрес сервера. Если указано auto или оставлено пустым, сервер при старте автоматически определит свой внешний IP через STUN серверы (stun.l.google.com:19302, stun.cloudflare.com:3478, stun1.l.google.com:19302) с таймаутом 2 секунды.
UDP_PORT-udp-port3478Порт прослушивания STUN и TURN по протоколу UDP.
TCP_PORT-tcp-port3478Порт прослушивания STUN и TURN по протоколу TCP.
RELAY_MIN_PORT—49152Нижняя граница пула UDP портов, выделяемых для ретрансляции медиа потоков клиентов.
RELAY_MAX_PORT—65535Верхняя граница пула UDP портов ретрансляции. Общая емкость одновременных сессий равна RELAY_MAX_PORT - RELAY_MIN_PORT + 1.
TURN_THREADS—Число ядер CPU (runtime.NumCPU())Количество параллельных UDP слушателей (потоков). На Linux при значении > 1 активирует SO_REUSEPORT для распределения нагрузки между ядрами процессора.

2. Аутентификация и шейпинг трафика

Переменная .envФлаг CLIПо умолчаниюОписание
TURN_SECRET-secret(обязателен)Секретный ключ для HMAC-SHA1 генерации паролей и авторизации в HTTP API. Минимальная длина - 16 символов.
REALM-realmturn.localДоменная область аутентификации TURN (например, example.com или rtc.example.com).
CREDENTIAL_TTL_SEC—7200 (2 часа)Время жизни (TTL) выдаваемых временных учетных данных в секундах.
MAX_KBPS_PER_SESSION-max-kbps0 (без лимита)Максимальная пропускная способность на одну TURN-сессию (аллокацию) в килобитах в секунду (1 Kbps = 1000 bps).
MAX_BPS_PER_ALLOCATION—0 (без лимита)Альтернативный способ задать лимит скорости на сессию в битах в секунду (используется, если не задан MAX_KBPS_PER_SESSION).

3. Настройки TLS (turns: и HTTPS)

Переменная .envФлаг CLIПо умолчаниюОписание
TLS_PORT-tls-port5349TCP порт для зашифрованных соединений TURN over TLS (turns:). Включается автоматически, если указаны сертификаты или TLS_SELF_SIGNED=true.
TLS_CERT_FILE—""Путь к файлу TLS сертификата (например, fullchain.pem от Let's Encrypt).
TLS_KEY_FILE—""Путь к приватному ключу TLS сертификата (например, privkey.pem).
TLS_SELF_SIGNED—falseЕсли true (и не заданы файлы сертификатов), сервер автоматически сгенерирует в памяти самоподписанный сертификат ECDSA P-256 сроком на 1 год для домена REALM, localhost и PUBLIC_IP.
Горячее обновление сертификатов (Hot Reload): Когда заданы TLS_CERT_FILE и TLS_KEY_FILE, сервер проверяет время модификации файла сертификата раз в минуту и автоматически подгружает обновленный сертификат (например, после продления через Certbot) без перезапуска сервера и без разрыва текущих звонков.

4. Настройки HTTP API и фильтрации доступа

Переменная .envФлаг CLIПо умолчаниюОписание
HTTP_ENABLED-http-enabledtrueВключает или полностью отключает встроенный HTTP API сервер.
HTTP_PORT-http-port:8080Адрес и порт для HTTP API (например, :8080 или 127.0.0.1:8080). Если двоеточие опущено (например, 8080), оно добавится автоматически.
HTTP_TLS-http-tlsfalseВключает HTTPS для встроенного HTTP API (использует те же сертификаты TLS_CERT_FILE/TLS_KEY_FILE или TLS_SELF_SIGNED).
REQUIRE_SECRET-require-secretfalseСтрогий режим HTTP API: если true, любой запрос к /api/turn-credentials обязан содержать заголовок X-Turn-Secret или Authorization: Bearer <secret>.
ALLOWED_ORIGINS—*Список разрешенных CORS-доменов через запятую (например, [https://shomla.com](https://shomla.com), http://localhost:3000). Автоматически разрешает также все поддомены указанного домена.
ALLOWED_IPS—"" (все разрешены)Список IP-адресов или CIDR-подсетей через запятую (например, 198.51.100.25, 10.20.0.0/16), которым разрешен доступ к HTTP API без секретного ключа.
TURN_ALLOWED_PEER_IPS—"" (все разрешены)Белый список IP-адресов или CIDR-подсетей клиентов, которым разрешено проходить аутентификацию на самом TURN-сервере.

5. Хранение данных и логирование

Переменная .envФлаг CLIПо умолчаниюОписание
DATA_DIR—.Директория для сохранения файлов телеметрии и журнала событий (stats.json и events.jsonl). В systemd-сервисе по умолчанию /opt/slyber_turn.
LOG_FORMAT—textФормат системных логов в stdout: json (для систем сбора логов вроде Loki/ELK) или текстовый формат по умолчанию.

Валидация конфигурации при запуске

Перед стартом сервер выполняет строгую проверку параметров (cfg.Validate()) и завершит работу с понятной ошибкой, если:

  • Длина TURN_SECRET меньше 16 символов.
  • Не удалось определить PUBLIC_IP (неверный формат IP или недоступны внешние STUN-серверы в режиме auto).
  • Порты UDP_PORT, TCP_PORT, TLS_PORT или HTTP_PORT выходят за пределы 1–65535.
  • TLS_PORT совпадает с TCP_PORT.
  • UDP_PORT попадает внутрь диапазона релейных портов RELAY_MIN_PORT–RELAY_MAX_PORT.
  • HTTP_PORT конфликтует с TCP_PORT или TLS_PORT.
  • Включен HTTP_TLS=true, но не настроены ни сертификаты, ни TLS_SELF_SIGNED=true.