Files
docs/content/common/config/config.md
T
2026-07-14 11:36:20 +08:00

24 KiB

title, icon, tags
title icon tags
config.yml material/file-cog
iptvc
конфигурация

:material-file-cog: Конфигурация config.yml

Программа читает настройки из YAML-файла config.yml в корне проекта. Путь к файлу можно задать через глобальный флаг --config.

Приоритет настроек

От низшего к высшему:

  1. Значения по умолчанию — встроены в код;
  2. config.yml — YAML-файл;
  3. Переменные окружения — переопределяют config.yml (если заданы);
  4. CLI-флаги — переопределяют переменные окружения и config.yml (если заданы явно).

Файл .env загружается автоматически, переменные из него применяются как переменные окружения.

Структура файла

app:
  timezone: GMT
  debug: false
  log_level: info
  playlists: ./playlists.ini
  tags: ./channels.json

server:
  host: localhost
  port: 8080

site:
  base-url: http://localhost:8080
  repo-url: https://git.axenov.dev/IPTV
  page-size: 0
  favicon:
  header:
    title: IPTV Checker
    navigation:
      - title: Документация
        url: /docs
        icon: document-text-outline
      - title: Telegram
        icon: paper-plane-outline
        children:
          - title: Канал
            url: https://t.me/iptv_aggregator
            icon: megaphone-outline
  footer-links:
    - title: Исходники
      url: https://git.axenov.dev/IPTV
      icon: code-slash-outline

check:
  start-on-serve: false
  playlists:
    user-agent:
      - Mozilla/5.0 WINK/1.31.1 (AndroidTV/9) HlsWinkPlayer
    timeout: 10000
    all-cooldown: 0
    one-cooldown: 0
    max-routines: 5
    per-routine: 1
  channels:
    user-agent: Mozilla/5.0 WINK/1.31.1 (AndroidTV/9) HlsWinkPlayer
    timeout: 10000
    byte-range: 512
    cooldown: 0
    max-routines: 50
    per-routine: 10

cache:
  enabled: false
  host: localhost
  port: 6379
  username:
  password:
  db: 0
  ttl: 1800

Секция app

Параметр Тип По умолчанию Описание
timezone string GMT Часовой пояс
debug bool false Режим отладки
log_level string info Уровень логирования
playlists string ./playlists.ini Путь к playlists.ini
tags string ./channels.json Путь к channels.json

Секция server

Параметр Тип По умолчанию Описание
host string (пусто) Хост для привязки
port uint 8080 Порт веб-сервера

Секция site

Настройки сайта: ссылки, заголовок, навигация, пагинация.

Параметр Тип По умолчанию Описание
base-url string http://localhost:8080 Базовый URL для формирования ссылок
repo-url string https://git.axenov.dev/IPTV Ссылка на репозиторий
page-size uint 0 Размер страницы (0 — без пагинации)
favicon string (пусто) Путь к иконке сайта

site.header

Настройки шапки сайта.

Параметр Тип По умолчанию Описание
title string IPTV Checker Заголовок сайта (в navbar и <title>)
navigation [Link] (см. ниже) Ссылки в шапке сайта

Ссылки в подвале сайта. Массив элементов Link.

Элемент навигации или подвала. Если задано children, рендерится как выпадающее меню.

Параметр Тип Описание
title string Текст ссылки
url string URL ссылки (можно опустить, если есть children)
icon string Имя иконки
children [Link] Дочерние ссылки (выпадающее меню, один уровень вложенности)

--8<-- "ionicons-name.md"

Пример:

site:
  header:
    navigation:
      - title: Документация
        url: /docs
        icon: document-text-outline
      - title: Telegram
        icon: paper-plane-outline
        children:
          - title: Канал
            url: https://t.me/iptv_aggregator
            icon: megaphone-outline
          - title: Чат
            url: https://t.me/iptv_aggregator_chat
            icon: chatbubbles-outline
  footer-links:
    - title: Исходники
      url: https://git.axenov.dev/IPTV
      icon: code-slash-outline
    - title: axenov.dev
      url: https://axenov.dev
      icon: person-outline

Секция check

Параметры проверки плейлистов и каналов. Поддерживаются скаляры и массивы.

check.start-on-serve

Параметр Тип По умолчанию Описание
start-on-serve bool false Запустить фоновую проверку при serve без флага --check

Типы значений

!!! info "timeout, max-routines, per-routine, byte-range" Эти параметры — всегда целые числа, не массивы.

!!! info "cooldown (all-cooldown, one-cooldown, channels.cooldown)" Эти параметры могут быть заданы:

- **скаляром** — фиксированное значение, например `all-cooldown: 10`;
- **массивом `[min, max]`** — случайное значение в диапазоне при каждой проверке, например `all-cooldown: [5, 15]`.

!!! info "user-agent" Параметр user-agent может быть задан:

- **строкой** — используется всегда одно значение;
- **массивом строк** — случайный выбор при каждом запросе.

!!! info "byte-range" Параметр byte-range — всегда целое число (не массив).

check.playlists

Параметры проверки плейлистов (загрузка m3u-файлов по URL или из ФС).

Параметр Тип По умолчанию Единица Описание
user-agent string | string[] Mozilla/5.0 ... User-Agent для HTTP-запросов
timeout int 10000 мс Таймаут запроса плейлиста
all-cooldown int | int[] 0 мс Задержка после проверки всех плейлистов
one-cooldown int | int[] 0 мс Задержка после проверки каждого плейлиста
max-routines int 5 шт Максимум одновременно проверяемых плейлистов
per-routine int 1 шт Количество плейлистов на одну процедуру проверки

check.channels

Параметры проверки каналов внутри плейлиста.

Параметр Тип По умолчанию Единица Описание
user-agent string | string[] Mozilla/5.0 ... User-Agent для HTTP-запросов
timeout int 10000 мс Таймаут запроса канала
byte-range int 512 байт Объём данных для загрузки от сервера
cooldown int | int[] 0 мс Задержка после проверки каждого канала
max-routines int 50 шт Максимум одновременно проверяемых каналов
per-routine int 10 шт Количество каналов на одну процедуру проверки

Секция cache

Параметр Тип По умолчанию Описание
enabled bool false Включить кеширование (KeyDB/Redis)
host string localhost Хост KeyDB/Redis
port uint 6379 Порт KeyDB/Redis
username string (пусто) Логин
password string (пусто) Пароль
db uint 0 Номер БД
ttl uint 1800 TTL записей (сек)

Валидация

При запуске конфигурация валидируется. Некорректные значения исправляются автоматически, каждое исправление логируется:

Проверка Действие
server.port = 0 или > 65535 сброс в 8080
site.base-url пусто автогенерация http://localhost:{port}
cache.host пусто (если cache включён) localhost
cache.port = 0 (если cache включён) 6379
cache.ttl = 0 (если cache включён) 1800
check.playlists.timeout <= 0 10000
check.channels.timeout <= 0 10000
check.*.cooldownmin > max swap
check.*.cooldown — выход за границы [0, 3600000] clamp
check.playlists.max-routines < 1 5
check.channels.max-routines < 1 50
check.playlists.per-routine < 1 1
check.channels.per-routine < 1 10
check.channels.byte-range <= 0 512
check.*.user-agent пусто дефолтный User-Agent

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

Переменные окружения переопределяют значения из config.yml.

Приложение

Переменная Соответствует в config.yml
APP_DEBUG app.debug
APP_LOG_LEVEL app.log_level
APP_TIMEZONE app.timezone
APP_PLAYLISTS app.playlists
APP_TAGS app.tags

Веб-сервер и сайт

Переменная Соответствует в config.yml
WEB_PORT server.port
WEB_HOST server.host
APP_URL site.base-url
PAGE_SIZE site.page-size
REPO_URL site.repo-url
SITE_FAVICON site.favicon
APP_TITLE site.header.title

Проверка

Переменная Соответствует в config.yml
CHECK_START_ON_SERVE check.start-on-serve

check.playlists

Переменная Соответствует в config.yml
CHECK_PLAYLISTS_TIMEOUT check.playlists.timeout
CHECK_PLAYLISTS_ALL_COOLDOWN check.playlists.all-cooldown (скаляр)
CHECK_PLAYLISTS_ALL_COOLDOWN_MIN check.playlists.all-cooldown (минимум диапазона)
CHECK_PLAYLISTS_ALL_COOLDOWN_MAX check.playlists.all-cooldown (максимум диапазона)
CHECK_PLAYLISTS_ONE_COOLDOWN check.playlists.one-cooldown (скаляр)
CHECK_PLAYLISTS_ONE_COOLDOWN_MIN check.playlists.one-cooldown (минимум диапазона)
CHECK_PLAYLISTS_ONE_COOLDOWN_MAX check.playlists.one-cooldown (максимум диапазона)
CHECK_PLAYLISTS_MAX_ROUTINES check.playlists.max-routines
CHECK_PLAYLISTS_PER_ROUTINE check.playlists.per-routine
CHECK_PLAYLISTS_USER_AGENT_1 check.playlists.user-agent (первый элемент)
CHECK_PLAYLISTS_USER_AGENT_2 check.playlists.user-agent (второй элемент)
CHECK_PLAYLISTS_USER_AGENT_N check.playlists.user-agent (N-й элемент)

check.channels

Переменная Соответствует в config.yml
CHECK_CHANNELS_TIMEOUT check.channels.timeout
CHECK_CHANNELS_BYTE_RANGE check.channels.byte-range
CHECK_CHANNELS_COOLDOWN check.channels.cooldown (скаляр)
CHECK_CHANNELS_COOLDOWN_MIN check.channels.cooldown (минимум диапазона)
CHECK_CHANNELS_COOLDOWN_MAX check.channels.cooldown (максимум диапазона)
CHECK_CHANNELS_MAX_ROUTINES check.channels.max-routines
CHECK_CHANNELS_PER_ROUTINE check.channels.per-routine
CHECK_CHANNELS_USER_AGENT_1 check.channels.user-agent (первый элемент)
CHECK_CHANNELS_USER_AGENT_2 check.channels.user-agent (второй элемент)
CHECK_CHANNELS_USER_AGENT_N check.channels.user-agent (N-й элемент)

!!! info "Диапазоны cooldown через env" Если заданы обе переменные _MIN и _MAX — используется диапазон. Если задана только скалярная переменная (без _MIN/_MAX) — используется фиксированное значение. Если задана только одна из _MIN/_MAX — переменная игнорируется.

!!! info "Массивы user-agent через env" Переменные читаются последовательно: _1, _2, _3, … Первая отсутствующая переменная останавливает чтение. Пустые значения пропускаются.

Кеш

Переменная Соответствует в config.yml
CACHE_ENABLED cache.enabled
CACHE_HOST cache.host
CACHE_PORT cache.port
CACHE_USERNAME cache.username
CACHE_PASSWORD cache.password
CACHE_DB cache.db
CACHE_TTL cache.ttl

CLI-флаги

CLI-флаги имеют наивысший приоритет и переопределяют значения из config.yml и переменных окружения. Все флаги используют zero-value по умолчанию: переопределение срабатывает, только если флаг задан явно (через cmd.Flags().Changed()).

Порядок применения в обработчиках команд:

app.Init()               → defaults → config.yml → env → logger
applyAppOverrides(cmd)   → app.* через Changed()
applyCacheOverrides(cmd) → cache.* через Changed()
applyCheckOverrides(cmd) → check.* через Changed()
app.InitCache()          → подключение к KeyDB/Redis

Глобальные флаги

Флаги путей

Доступны для check и serve.

Флаг Тип Соответствует в config.yml Описание
-i, --ini string app.playlists Путь к playlists.ini
-t, --tags string app.tags Путь к channels.json

Флаги итерации

Доступны для check и serve.

Флаг Тип По умолчанию Описание
-r, --random uint 0 Проверить N случайных плейлистов из ini-файла
--repeat uint 1 (check) / 0 (serve) Количество циклов (0 = бесконечно)
--every uint 5 (check) / 60 (serve) Секунд между циклами

Флаги проверки плейлистов

Доступны для check и serve. Переопределяют секцию check.playlists.

Флаг Тип Соответствует в config.yml Единица Описание
--playlists-timeout int check.playlists.timeout мс Таймаут запроса плейлиста
--playlists-all-cooldown int check.playlists.all-cooldown мс Задержка после всех плейлистов
--playlists-one-cooldown int check.playlists.one-cooldown мс Задержка после каждого плейлиста
--playlists-max-routines int check.playlists.max-routines шт Максимум параллельных проверок
--playlists-per-routine int check.playlists.per-routine шт Плейлистов на процедуру
--playlists-user-agent string[] check.playlists.user-agent User-Agent (можно несколько)

Флаги проверки каналов

Доступны для check и serve. Переопределяют секцию check.channels.

Флаг Тип Соответствует в config.yml Единица Описание
--channels-timeout int check.channels.timeout мс Таймаут запроса канала
--channels-byte-range int check.channels.byte-range байт Объём данных от сервера
--channels-cooldown int check.channels.cooldown мс Задержка после каждого канала
--channels-max-routines int check.channels.max-routines шт Максимум параллельных проверок
--channels-per-routine int check.channels.per-routine шт Каналов на процедуру
--channels-user-agent string[] check.channels.user-agent User-Agent (можно несколько)

Флаги кеша

Доступны для check и serve. Переопределяют секцию cache.

Флаг Тип Соответствует в config.yml Описание
--cache-enabled bool cache.enabled Включить кеш
--cache-host string cache.host Хост KeyDB/Redis
--cache-port uint cache.port Порт KeyDB/Redis
--cache-username string cache.username Логин
--cache-password string cache.password Пароль
--cache-db uint cache.db Номер БД
--cache-ttl uint cache.ttl TTL записей (сек)

Флаги только для serve

Флаг Тип Соответствует в config.yml Описание
-p, --port uint server.port Порт веб-сервера
--host string server.host Хост привязки
--check bool Включить фоновую проверку

Флаги только для check

Флаг Тип Описание
-j, --json bool Вывод результатов в JSON
-q, --quiet bool Подавить логи
-f, --file string[] Локальный m3u-файл
-u, --url string[] URL удалённого плейлиста
-c, --code string[] Код плейлиста из ini-файла