24 KiB
title, icon, tags
| title | icon | tags | ||
|---|---|---|---|---|
| config.yml | material/file-cog |
|
:material-file-cog: Конфигурация config.yml
Программа читает настройки из YAML-файла config.yml в корне проекта.
Путь к файлу можно задать через глобальный флаг --config.
Приоритет настроек
От низшего к высшему:
- Значения по умолчанию — встроены в код;
config.yml— YAML-файл;- Переменные окружения — переопределяют
config.yml(если заданы); - 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] | (см. ниже) | Ссылки в шапке сайта |
site.footer-links
Ссылки в подвале сайта. Массив элементов 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.*.cooldown — min > 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-файла |