Миграция на zensical, актуализация под iptvc после рефакторинга

This commit is contained in:
2026-07-22 01:11:07 +08:00
parent 7d61aadc5d
commit 8d0f3ebcce
665 changed files with 7626 additions and 922 deletions
+615
View File
@@ -0,0 +1,615 @@
---
title: config.yml
icon: material/file-cog
tags: ["iptvc", "конфигурация"]
---
# :material-file-cog: Конфигурация config.yml
Программа читает настройки из YAML-файла `config.yml` в корне проекта.
Путь к файлу можно задать через глобальный флаг `--config`.
## Приоритет настроек
От низшего к высшему:
1. **Значения по умолчанию** — встроены в код;
2. **`config.yml`** — YAML-файл;
3. **Переменные окружения** — переопределяют `config.yml` (если заданы);
4. **CLI-флаги** — переопределяют переменные окружения и `config.yml` (если заданы явно).
Файл `.env` загружается автоматически, переменные из него применяются как переменные окружения.
## Структура файла
```yaml
app:
timezone: GMT
debug: false
log_level: info
playlists: ./playlists.ini
tags: ./channels.json
server:
host: ""
port: 8800
site:
base-url: http://localhost:8800
title: IPTV Checker
meta:
description: Самообновляемые бесплатные IPTV-плейлисты для домашнего просмотра
keywords: iptv,плейлисты,m3u
repo-url: https://git.axenov.dev/IPTV
page-size: 0
favicon:
header:
title: IPTV Checker
menu:
- title: Документация
url: /docs
icon: document-text-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: 10 # секунды
all-cooldown: 1800 # секунды
one-cooldown: 2 # секунды
max-routines: 1
per-routine: 1
channels:
user-agent: Mozilla/5.0 WINK/1.31.1 (AndroidTV/9) HlsWinkPlayer
timeout: 10 # секунды
byte-range: 512
cooldown: 0 # секунды
max-routines: 50
per-routine: 10
cache:
enabled: false
host: localhost
port: 6379
username:
password:
db: 0
ttl: 30 # секунды
```
Каждый параметр ниже описан отдельной секцией с указанием значения по умолчанию, переменной окружения и соответствующего CLI-флага.
---
## Секция `app` { id=app }
### `app.timezone` { id=app-timezone }
<!-- md:default GMT -->
<!-- md:env APP_TIMEZONE -->
Часовой пояс, используемый в логах и при отображении времени проверок.
---
### `app.debug` { id=app-debug }
<!-- md:default false -->
<!-- md:env APP_DEBUG -->
<!-- md:arg --debug -->
Режим отладки.
Включает расширенное логирование и дополнительные проверки в логике приложения.
---
### `app.log_level` { id=app-log-level }
<!-- md:default info -->
<!-- md:env APP_LOG_LEVEL -->
<!-- md:arg --log-level -->
Уровень логирования.
Допустимые значения: `debug`, `info`, `warn`, `error`.
---
### `app.playlists` { id=app-playlists }
<!-- md:default ./playlists.ini -->
<!-- md:env APP_PLAYLISTS -->
<!-- md:arg --ini -->
Путь к локальному [ini-файлу](../../common/formats/playlists.md) с описанием плейлистов.
!!! info "Аргумент работает только для команд `check` и `serve --check`."
---
### `app.tags` { id=app-tags }
<!-- md:default ./channels.json -->
<!-- md:env APP_TAGS -->
<!-- md:arg --tags -->
Путь к локальному [json-файлу](../../common/formats/channels.md) с описанием тегов каналов.
!!! info "Аргумент работает только для команд `check` и `serve --check`."
---
## Секция `server` { id=server }
### `server.host` { id=server-host }
<!-- md:default -->
<!-- md:env SERVER_HOST -->
<!-- md:arg --host -->
Хост для привязки веб-сервера.
Пустая строка — слушать на всех интерфейсах.
!!! info "Аргумент работает только для команды `serve`."
---
### `server.port` { id=server-port }
<!-- md:default 8800 -->
<!-- md:env SERVER_PORT -->
<!-- md:arg -p, --port -->
Порт веб-сервера.
!!! info "Аргумент работает только для команды `serve`."
---
## Секция `site` { id=site }
Настройки внешнего вида и ссылок сайта: заголовок, навигация, пагинация, иконка.
### `site.base-url` { id=site-base-url }
<!-- md:default http://localhost:8800 -->
<!-- md:env SITE_BASE_URL -->
Базовый URL сайта.
Используется при формировании абсолютных ссылок в шаблонах.
---
### `site.repo-url` { id=site-repo-url }
<!-- md:default https://git.axenov.dev/IPTV -->
<!-- md:env SITE_REPO_URL -->
Ссылка на исходный репозиторий (отображается в подвале).
---
### `site.page-size` { id=site-page-size }
<!-- md:default 0 -->
<!-- md:env SITE_PAGE_SIZE -->
Размер страницы пагинации.
При значении `0` пагинация отключена, на главной странице выводятся все плейлисты.
---
### `site.favicon` { id=site-favicon }
<!-- md:default -->
<!-- md:env SITE_FAVICON -->
Путь к файлу иконки сайта. Пустая строка — используется встроенная.
---
### `site.meta` { id=site-meta }
Мета-теги `<meta name="description">` и `<meta name="keywords">` для HTML-шаблонов.
| Поле | Переменная окружения | Описание |
| --- | --- | --- |
| `description` | `SITE_META_DESCRIPTION` | Описание сайта в meta-тегах |
| `keywords` | `SITE_META_KEYWORDS` | Ключевые слова через запятую |
---
### `site.title` { id=site-title }
<!-- md:default IPTV Checker -->
<!-- md:env SITE_TITLE -->
Заголовок сайта, отображается в `<title>` и в navbar.
---
### `site.header.title` { id=site-header-title }
<!-- md:default IPTV Checker -->
Заголовок сайта, отображается в `<title>` и в navbar.
Переопределяется переменной окружения `SITE_TITLE` (см. [`site.title`](#site-title)).
---
### `site.header.menu` { id=site-header-menu }
Массив элементов [`Link`](#link) в шапке сайта.
---
### `site.footer.links` { id=site-footer-links }
Массив элементов [`Link`](#link) в подвале сайта.
---
### Тип `Link` { id=link }
Элемент навигации или подвала.
Если задано `children`, рендерится как выпадающее меню.
| Поле | Тип | Описание |
| ---------- | ------ | ----------------------------------------------------------- |
| `title` | string | Текст ссылки |
| `url` | string | URL ссылки (можно опустить, если есть `children`) |
| `icon` | string | Имя иконки |
| `children` | Link[] | Дочерние ссылки (выпадающее меню, один уровень вложенности) |
--8<-- "ionicons-name.md"
```yaml title="Пример"
site:
header:
menu:
- title: Помощь
icon: help-circle-outline
children:
- title: Документация
url: https://m3u.su/docs
icon: document-text-outline
- title: Исходники
url: https://git.axenov.dev/IPTV
icon: code-slash-outline
- title: "@iptv_aggregator"
url: https://t.me/iptv_aggregator
icon: paper-plane-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
- title: "@iptv_aggregator"
url: https://t.me/iptv_aggregator
icon: megaphone-outline
```
---
## Секция `check` { id=check }
Параметры проверки плейлистов и каналов. Поддерживаются скаляры и массивы.
---
### `check.start-on-serve` { id=check-start-on-serve }
<!-- md:default false -->
<!-- md:env CHECK_START_ON_SERVE -->
Запустить фоновую проверку при `serve` без явного флага `--check`.
Независимый переключатель от CLI-флага `--check` — фоновая проверка стартует, если **хотя бы один** из них активен.
---
### `check.playlists` { id=check-playlists }
Параметры проверки плейлистов (загрузка m3u-файлов по URL или из ФС).
---
#### `check.playlists.user-agent` { id=check-playlists-user-agent }
<!-- md:default Mozilla/5.0 WINK/1.31.1 (AndroidTV/9) HlsWinkPlayer -->
<!-- md:env CHECK_PLAYLISTS_USER_AGENT_* -->
<!-- md:arg --playlists-user-agent -->
User-Agent для HTTP-запросов плейлистов.
!!! info "Необычный параметр"
Если значение параметра задано строкой, то в запросах к плейлистам будет использоваться только оно.
Если значение параметра задано массивом строк, то в запросах к плейлистам будет использоваться случайный из указанных.
!!! info "Необычная переменная"
В окружении может задаваться индексированными переменными:
- `CHECK_PLAYLISTS_USER_AGENT_1="value1"`
- `CHECK_PLAYLISTS_USER_AGENT_2="value2"`
- и т.д.; чтение останавливается на первой отсутствующей.
!!! info "Аргумент работает только для команд `check` и `serve --check`."
---
#### `check.playlists.timeout` { id=check-playlists-timeout }
<!-- md:default 10 -->
<!-- md:env CHECK_PLAYLISTS_TIMEOUT -->
<!-- md:arg --playlists-timeout -->
Таймаут HTTP-запроса плейлиста в секундах.
!!! info "Аргумент работает только для команд `check` и `serve --check`."
---
#### `check.playlists.all-cooldown` { id=check-playlists-all-cooldown }
<!-- md:default 1800 -->
<!-- md:env CHECK_PLAYLISTS_ALL_COOLDOWN -->
<!-- md:arg --playlists-all-cooldown -->
Задержка после проверки всех плейлистов в секундах.
!!! info "Необычная переменная"
Если значение переменной указано одним числом, то для задержки будет использоваться только оно.
Если значение переменной указано двумя числами через запятую, то будет использоваться случайная задержка в указанном диапазоне.
!!! info "Аргумент работает только для команд `check` и `serve --check`."
---
#### `check.playlists.one-cooldown` { id=check-playlists-one-cooldown }
<!-- md:default 2 -->
<!-- md:env CHECK_PLAYLISTS_ONE_COOLDOWN -->
<!-- md:arg --playlists-one-cooldown -->
Задержка после проверки каждого плейлиста в секундах.
!!! info "Необычная переменная"
Если значение переменной указано одним числом, то для задержки будет использоваться только оно.
Если значение переменной указано двумя числами через запятую, то будет использоваться случайная задержка в указанном диапазоне.
!!! info "Аргумент работает только для команд `check` и `serve --check`."
---
#### `check.playlists.max-routines` { id=check-playlists-max-routines }
<!-- md:default 1 -->
<!-- md:env CHECK_PLAYLISTS_MAX_ROUTINES -->
<!-- md:arg --playlists-max-routines -->
Максимальное количество параллельных потоков (рутин) проверки плейлистов.
!!! info "Аргумент работает только для команд `check` и `serve --check`."
---
#### `check.playlists.per-routine` { id=check-playlists-per-routine }
<!-- md:default 1 -->
<!-- md:env CHECK_PLAYLISTS_PER_ROUTINE -->
<!-- md:arg --playlists-per-routine -->
Максимальное количество плейлистов в каждом потоке (рутине) проверки.
!!! info "Аргумент работает только для команд `check` и `serve --check`."
---
### `check.channels` { id=check-channels }
Параметры проверки каналов внутри плейлиста.
---
#### `check.channels.user-agent` { id=check-channels-user-agent }
<!-- md:default Mozilla/5.0 WINK/1.31.1 (AndroidTV/9) HlsWinkPlayer -->
<!-- md:env CHECK_CHANNELS_USER_AGENT_* -->
<!-- md:arg --channels-user-agent -->
User-Agent для HTTP-запроса каждого канала каждого плейлиста.
!!! info "Необычный параметр"
Если значение параметра задано строкой, то в запросах к каналам будет использоваться только оно.
Если значение параметра задано массивом строк, то в запросах к каналам будет использоваться случайный из указанных.
!!! info "Необычная переменная"
В окружении может задаваться индексированными переменными:
- `CHECK_CHANNELS_USER_AGENT_1="value1"`
- `CHECK_CHANNELS_USER_AGENT_2="value2"`
- и т.д.; чтение останавливается на первой отсутствующей.
!!! info "Аргумент работает только для команд `check` и `serve --check`."
---
#### `check.channels.timeout` { id=check-channels-timeout }
<!-- md:default 10 -->
<!-- md:env CHECK_CHANNELS_TIMEOUT -->
<!-- md:arg --channels-timeout -->
Таймаут HTTP-запроса каждого канала каждого плейлиста в секундах.
!!! info "Аргумент работает только для команд `check` и `serve --check`."
---
#### `check.channels.byte-range` { id=check-channels-byte-range }
<!-- md:default 512 -->
<!-- md:env CHECK_CHANNELS_BYTE_RANGE -->
<!-- md:arg --channels-byte-range -->
Объём данных в байтах, запрашиваемых у сервера при проверке каждого канала каждого плейлиста.
Меньшее значение повышает риск ошибок в определении типа контента (mime-type).
Большее значение может приводить к повышенной нагрузке и увеличению времени проверки.
!!! info "Аргумент работает только для команд `check` и `serve --check`."
---
#### `check.channels.cooldown` { id=check-channels-cooldown }
<!-- md:default 0 -->
<!-- md:env CHECK_CHANNELS_COOLDOWN -->
<!-- md:arg --channels-cooldown -->
Задержка после проверки каждого канала каждого плейлиста в секундах.
!!! info "Необычная переменная"
Если значение переменной указано одним числом, то для задержки будет использоваться только оно.
Если значение переменной указано двумя числами через запятую, то будет использоваться случайная задержка в указанном диапазоне.
!!! info "Аргумент работает только для команд `check` и `serve --check`."
---
#### `check.channels.max-routines` { id=check-channels-max-routines }
<!-- md:default 50 -->
<!-- md:env CHECK_CHANNELS_MAX_ROUTINES -->
<!-- md:arg --channels-max-routines -->
Максимальное количество параллельных потоков (рутин) проверки каналов каждого плейлиста.
!!! info "Аргумент работает только для команд `check` и `serve --check`."
---
#### `check.channels.per-routine` { id=check-channels-per-routine }
<!-- md:default 10 -->
<!-- md:env CHECK_CHANNELS_PER_ROUTINE -->
<!-- md:arg --channels-per-routine -->
Максимальное количество каналов в каждом потоке (рутине) проверки каждого плейлиста.
!!! info "Аргумент работает только для команд `check` и `serve --check`."
---
## Секция `cache` { id=cache }
Параметры подключения к KeyDB/Redis для хранения результатов проверок.
---
### `cache.enabled` { id=cache-enabled }
<!-- md:default false -->
<!-- md:env CACHE_ENABLED -->
<!-- md:arg --cache-enabled -->
Включить использование внешнего кеша.
!!! info "Аргумент работает только для команд `check` и `serve --check`."
---
### `cache.host` { id=cache-host }
<!-- md:default localhost -->
<!-- md:env CACHE_HOST -->
<!-- md:arg --cache-host -->
Хост KeyDB/Redis.
!!! info "Аргумент работает только для команд `check` и `serve --check`."
---
### `cache.port` { id=cache-port }
<!-- md:default 6379 -->
<!-- md:env CACHE_PORT -->
<!-- md:arg --cache-port -->
Порт KeyDB/Redis.
!!! info "Аргумент работает только для команд `check` и `serve --check`."
---
### `cache.username` { id=cache-username }
<!-- md:default -->
<!-- md:env CACHE_USERNAME -->
<!-- md:arg --cache-username -->
Логин для подключения. Пустая строка — без аутентификации.
!!! info "Аргумент работает только для команд `check` и `serve --check`."
---
### `cache.password` { id=cache-password }
<!-- md:default -->
<!-- md:env CACHE_PASSWORD -->
<!-- md:arg --cache-password -->
Пароль для подключения.
!!! info "Аргумент работает только для команд `check` и `serve --check`."
---
### `cache.db` { id=cache-db }
<!-- md:default 0 -->
<!-- md:env CACHE_DB -->
<!-- md:arg --cache-db -->
Номер логической базы данных в KeyDB/Redis.
!!! info "Аргумент работает только для команд `check` и `serve --check`."
---
### `cache.ttl` { id=cache-ttl }
<!-- md:default 30 -->
<!-- md:env CACHE_TTL -->
<!-- md:arg --cache-ttl -->
TTL записей кеша, секунды.
!!! info "Аргумент работает только для команд `check` и `serve --check`."