--- icon: simple/dotenv tags: ["iptvc", "переменные окружения"] --- # :simple-dotenv: Переменные окружения Переменные окружения переопределяют значения из [`config.yml`](config.md). Файл `.env` загружается автоматически при запуске. Приоритет: **defaults → config.yml → env → CLI-флаги**. ## Приложение | Имя | Тип | Умолчание | Назначение | | ---------------- | ------ | ----------------------- | ----------------------------------------- | | `APP_DEBUG` | bool | `false` | Режим отладки | | `APP_LOG_LEVEL` | string | `info` | Уровень логирования (`debug`, `info`, `warn`, `error`) | | `APP_TIMEZONE` | string | `GMT` | Часовой пояс | | `APP_PLAYLISTS` | string | `./playlists.ini` | Путь к `playlists.ini` | | `APP_TAGS` | string | `./channels.json` | Путь к `channels.json` | ## Веб-сервер и сайт | Имя | Тип | Умолчание | Назначение | | ---------------- | ------ | ----------------------------- | ----------------------------------- | | `WEB_PORT` | uint | `8080` | Порт веб-сервера | | `WEB_HOST` | string | (пусто) | Хост для привязки | | `APP_URL` | string | `http://localhost:8080` | Базовый URL для ссылок | | `PAGE_SIZE` | uint | `0` | Размер страницы (0 — без пагинации) | | `REPO_URL` | string | `https://git.axenov.dev/IPTV` | Ссылка на репозиторий | | `SITE_FAVICON` | string | (пусто) | Путь к иконке сайта | | `APP_TITLE` | string | `IPTV Checker` | Заголовок сайта | ## Проверка | Имя | Тип | Умолчание | Назначение | | ----------------------- | --- | --------- | ------------------------------------------------------- | | `CHECK_START_ON_SERVE` | bool | `false` | Запустить фоновую проверку при `serve` без флага `--check` | ### `check.playlists` | Имя | Тип | Умолчание | Назначение | | --- | --- | --- | --- | | `CHECK_PLAYLISTS_TIMEOUT` | int | `10000` | Таймаут запроса плейлиста (мс) | | `CHECK_PLAYLISTS_ALL_COOLDOWN` | int | `0` | Задержка после всех плейлистов (мс, скаляр) | | `CHECK_PLAYLISTS_ALL_COOLDOWN_MIN` | int | `0` | Минимум задержки после всех плейлистов (мс) | | `CHECK_PLAYLISTS_ALL_COOLDOWN_MAX` | int | `0` | Максимум задержки после всех плейлистов (мс) | | `CHECK_PLAYLISTS_ONE_COOLDOWN` | int | `0` | Задержка после каждого плейлиста (мс, скаляр) | | `CHECK_PLAYLISTS_ONE_COOLDOWN_MIN` | int | `0` | Минимум задержки после каждого плейлиста (мс) | | `CHECK_PLAYLISTS_ONE_COOLDOWN_MAX` | int | `0` | Максимум задержки после каждого плейлиста (мс) | | `CHECK_PLAYLISTS_MAX_ROUTINES` | int | `5` | Максимум параллельных проверок плейлистов | | `CHECK_PLAYLISTS_PER_ROUTINE` | int | `1` | Плейлистов на процедуру | | `CHECK_PLAYLISTS_USER_AGENT_1` | string | `Mozilla/5.0 …` | Первый User-Agent для запросов плейлистов | | `CHECK_PLAYLISTS_USER_AGENT_2` | string | — | Второй User-Agent (и т.д.) | ### `check.channels` | Имя | Тип | Умолчание | Назначение | | --- | --- | --- | --- | | `CHECK_CHANNELS_TIMEOUT` | int | `10000` | Таймаут запроса канала (мс) | | `CHECK_CHANNELS_BYTE_RANGE` | int | `512` | Объём данных от сервера (байт) | | `CHECK_CHANNELS_COOLDOWN` | int | `0` | Задержка после каждого канала (мс, скаляр) | | `CHECK_CHANNELS_COOLDOWN_MIN` | int | `0` | Минимум задержки после каждого канала (мс) | | `CHECK_CHANNELS_COOLDOWN_MAX` | int | `0` | Максимум задержки после каждого канала (мс) | | `CHECK_CHANNELS_MAX_ROUTINES` | int | `50` | Максимум параллельных проверок каналов | | `CHECK_CHANNELS_PER_ROUTINE` | int | `10` | Каналов на процедуру | | `CHECK_CHANNELS_USER_AGENT_1` | string | `Mozilla/5.0 …` | Первый User-Agent для запросов каналов | | `CHECK_CHANNELS_USER_AGENT_2` | string | — | Второй User-Agent (и т.д.) | ## Кеширование Кеш хранится в СУБД redis или keydb. | Имя | Тип | Умолчание | Назначение | | ---------------- | ------ | ----------- | ---------------------------------- | | `CACHE_ENABLED` | bool | `false` | Включает кеширование | | `CACHE_HOST` | string | `localhost` | Имя хоста СУБД | | `CACHE_PORT` | uint | `6379` | Порт СУБД | | `CACHE_USERNAME` | string | (пусто) | Логин пользователя в СУБД | | `CACHE_PASSWORD` | string | (пусто) | Пароль пользователя в СУБД | | `CACHE_DB` | uint | `0` | Номер БД в СУБД для кеша | | `CACHE_TTL` | uint | `1800` | Время жизни ключей кеша в секундах | ## Правила ### Диапазоны cooldown Поля `all-cooldown`, `one-cooldown` и `channels.cooldown` поддерживают скаляр и диапазон `[min, max]`. Через env-переменные: - Заданы **обе** `_MIN` и `_MAX` → диапазон (случайное значение при каждой проверке). - Задана только **скалярная** переменная (без суффикса) → фиксированное значение. - Задана только **одна** из `_MIN` / `_MAX` → переменная игнорируется. ```shell title="Скаляр" CHECK_PLAYLISTS_ALL_COOLDOWN=500 ``` ```shell title="Диапазон" CHECK_PLAYLISTS_ALL_COOLDOWN_MIN=100 CHECK_PLAYLISTS_ALL_COOLDOWN_MAX=2000 ``` ### Массивы user-agent Поля `user-agent` поддерживают массив строк. Через env задаются индексированными переменными `_1`, `_2`, `_3`, … - Чтение останавливается на первой отсутствующей переменной. - Пустые значения пропускаются. ```shell title="Два User-Agent" CHECK_PLAYLISTS_USER_AGENT_1=Mozilla/5.0 WINK/1.31.1 (AndroidTV/9) HlsWinkPlayer CHECK_PLAYLISTS_USER_AGENT_2=curl/8.0 ```