Files
docs/content/common/config/config.md
T

647 lines
21 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
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
tabs:
raw:
visible: true
legal:
visible: true
text: |
<p>Юридический текст с <a href="/terms">условиями использования</a>.</p>
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) в подвале сайта.
---
### `site.tabs.raw.visible` { id=site-tabs-raw-visible }
<!-- md:default true -->
Отображать вкладку «Исходный плейлист».
---
### `site.tabs.legal.visible` { id=site-tabs-legal-visible }
<!-- md:default true -->
Отображать вкладку «Юридическая информация».
---
### `site.tabs.legal.text` { id=site-tabs-legal-text }
HTML-контент вкладки «Юридическая информация».
Предназначена для вывода информации о правообладателях и контактах для связи с администратором сайта для решения правовых вопросов.
---
### Тип `Link` { id=link }
Элемент навигации или подвала.
Если задано `children`, рендерится как выпадающее меню.
| Поле | Тип | Описание |
| ---------- | ------ | ----------------------------------------------------------- |
| `title` | string | Текст ссылки |
| `url` | string | URL ссылки (можно опустить, если есть `children`) |
| `icon` | string | Имя иконки |
| `children` | Link[] | Дочерние ссылки (выпадающее меню, один уровень вложенности) |
--8<-- "icons.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: bullhorn-variant-outline
- title: Telegram
icon: bullhorn-variant-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`."