578 lines
19 KiB
Markdown
578 lines
19 KiB
Markdown
---
|
|
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: 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
|
|
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
|
|
```
|
|
|
|
Каждый параметр ниже описан отдельной секцией с указанием значения по умолчанию, переменной окружения и соответствующего 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 WEB_HOST -->
|
|
<!-- md:arg --host -->
|
|
|
|
Хост для привязки веб-сервера.
|
|
Пустая строка — слушать на всех интерфейсах.
|
|
|
|
!!! info "Аргумент работает только для команды `serve`."
|
|
|
|
---
|
|
|
|
### `server.port` { id=server-port }
|
|
|
|
<!-- md:default 8080 -->
|
|
<!-- md:env WEB_PORT -->
|
|
<!-- md:arg -p, --port -->
|
|
|
|
Порт веб-сервера.
|
|
|
|
!!! info "Аргумент работает только для команды `serve`."
|
|
|
|
---
|
|
|
|
## Секция `site` { id=site }
|
|
|
|
Настройки внешнего вида и ссылок сайта: заголовок, навигация, пагинация, иконка.
|
|
|
|
### `site.base-url` { id=site-base-url }
|
|
|
|
<!-- md:default http://localhost:8080 -->
|
|
<!-- md:env APP_URL -->
|
|
|
|
Базовый URL сайта.
|
|
Используется при формировании абсолютных ссылок в шаблонах.
|
|
|
|
---
|
|
|
|
### `site.repo-url` { id=site-repo-url }
|
|
|
|
<!-- md:default https://git.axenov.dev/IPTV -->
|
|
<!-- md:env REPO_URL -->
|
|
|
|
Ссылка на исходный репозиторий (отображается в подвале).
|
|
|
|
---
|
|
|
|
### `site.page-size` { id=site-page-size }
|
|
|
|
<!-- md:default 0 -->
|
|
<!-- md:env PAGE_SIZE -->
|
|
|
|
Размер страницы пагинации.
|
|
При значении `0` пагинация отключена, на главной странице выводятся все плейлисты.
|
|
|
|
---
|
|
|
|
### `site.favicon` { id=site-favicon }
|
|
|
|
<!-- md:default -->
|
|
<!-- md:env SITE_FAVICON -->
|
|
|
|
Путь к файлу иконки сайта. Пустая строка — используется встроенная.
|
|
|
|
---
|
|
|
|
### `site.header.title` { id=site-header-title }
|
|
|
|
<!-- md:default IPTV Checker -->
|
|
<!-- md:env APP_TITLE -->
|
|
|
|
Заголовок сайта, отображается в `<title>` и в navbar.
|
|
|
|
---
|
|
|
|
### `site.header.navigation` { id=site-header-navigation }
|
|
|
|
Массив элементов [`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:
|
|
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` { 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 10000 -->
|
|
<!-- 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 0 -->
|
|
<!-- 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 0 -->
|
|
<!-- 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 5 -->
|
|
<!-- 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 10000 -->
|
|
<!-- md:env CHECK_PLAYLISTS_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 1800 -->
|
|
<!-- md:env CACHE_TTL -->
|
|
<!-- md:arg --cache-ttl -->
|
|
|
|
TTL записей кеша, секунды.
|
|
|
|
!!! info "Аргумент работает только для команд `check` и `serve --check`."
|