--- 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 } Часовой пояс, используемый в логах и при отображении времени проверок. --- ### `app.debug` { id=app-debug } Режим отладки. Включает расширенное логирование и дополнительные проверки в логике приложения. --- ### `app.log_level` { id=app-log-level } Уровень логирования. Допустимые значения: `debug`, `info`, `warn`, `error`. --- ### `app.playlists` { id=app-playlists } Путь к локальному [ini-файлу](../../common/formats/playlists.md) с описанием плейлистов. !!! info "Аргумент работает только для команд `check` и `serve --check`." --- ### `app.tags` { id=app-tags } Путь к локальному [json-файлу](../../common/formats/channels.md) с описанием тегов каналов. !!! info "Аргумент работает только для команд `check` и `serve --check`." --- ## Секция `server` { id=server } ### `server.host` { id=server-host } Хост для привязки веб-сервера. Пустая строка — слушать на всех интерфейсах. !!! info "Аргумент работает только для команды `serve`." --- ### `server.port` { id=server-port } Порт веб-сервера. !!! info "Аргумент работает только для команды `serve`." --- ## Секция `site` { id=site } Настройки внешнего вида и ссылок сайта: заголовок, навигация, пагинация, иконка. ### `site.base-url` { id=site-base-url } Базовый URL сайта. Используется при формировании абсолютных ссылок в шаблонах. --- ### `site.repo-url` { id=site-repo-url } Ссылка на исходный репозиторий (отображается в подвале). --- ### `site.page-size` { id=site-page-size } Размер страницы пагинации. При значении `0` пагинация отключена, на главной странице выводятся все плейлисты. --- ### `site.favicon` { id=site-favicon } Путь к файлу иконки сайта. Пустая строка — используется встроенная. --- ### `site.header.title` { id=site-header-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`."