Как загружается конфигурация
При запуске slyber_turn ищет и загружает файл переменных окружения .env
- Путь, явно указанный в переменной окружения
ENV_FILE. - Файл
.envв текущей рабочей директории (./.env). - Файл
.env, лежащий в одной папке с исполняемым бинарным файломslyber_turn(с учетом символических ссылок). - Стандартный системный путь
/opt/slyber_turn/.env.
Поверх переменных окружения вы можете передать флаги командной строки (CLI) - они имеют наивысший приоритет и перезаписывают значения из .env.
Справочник переменных окружения (.env) и флагов CLI
1. Сетевые настройки и ретрансляция (TURN/STUN)
| Переменная .env | Флаг CLI | По умолчанию | Описание |
PUBLIC_IP | -public-ip | auto (или пусто) | Внешний публичный IPv4 адрес сервера. Если указано auto или оставлено пустым, сервер при старте автоматически определит свой внешний IP через STUN серверы (stun.l.google.com:19302, stun.cloudflare.com:3478, stun1.l.google.com:19302) с таймаутом 2 секунды. |
UDP_PORT | -udp-port | 3478 | Порт прослушивания STUN и TURN по протоколу UDP. |
TCP_PORT | -tcp-port | 3478 | Порт прослушивания 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 | -realm | turn.local | Доменная область аутентификации TURN (например, example.com или rtc.example.com). |
CREDENTIAL_TTL_SEC | — | 7200 (2 часа) | Время жизни (TTL) выдаваемых временных учетных данных в секундах. |
MAX_KBPS_PER_SESSION | -max-kbps | 0 (без лимита) | Максимальная пропускная способность на одну TURN-сессию (аллокацию) в килобитах в секунду (1 Kbps = 1000 bps). |
MAX_BPS_PER_ALLOCATION | — | 0 (без лимита) | Альтернативный способ задать лимит скорости на сессию в битах в секунду (используется, если не задан MAX_KBPS_PER_SESSION). |
3. Настройки TLS (turns: и HTTPS)
| Переменная .env | Флаг CLI | По умолчанию | Описание |
TLS_PORT | -tls-port | 5349 | TCP порт для зашифрованных соединений 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-enabled | true | Включает или полностью отключает встроенный HTTP API сервер. |
HTTP_PORT | -http-port | :8080 | Адрес и порт для HTTP API (например, :8080 или 127.0.0.1:8080). Если двоеточие опущено (например, 8080), оно добавится автоматически. |
HTTP_TLS | -http-tls | false | Включает HTTPS для встроенного HTTP API (использует те же сертификаты TLS_CERT_FILE/TLS_KEY_FILE или TLS_SELF_SIGNED). |
REQUIRE_SECRET | -require-secret | false | Строгий режим 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.