--- 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 logLevel: info playlists: ./playlists.ini tags: ./channels.json server: host: "" port: 8800 site: baseUrl: http://localhost:8800 title: IPTV Checker meta: description: Самообновляемые бесплатные IPTV-плейлисты для домашнего просмотра keywords: iptv,плейлисты,m3u repo-url: https://git.axenov.dev/IPTV pageSize: 0 favicon: header: 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: false text: |

Юридический текст с условиями использования.

check: startOnServe: false playlists: userAgent: - Mozilla/5.0 WINK/1.31.1 (AndroidTV/9) HlsWinkPlayer timeout: 10 allCooldown: 1800 oneCooldown: 2 maxRoutines: 1 perRoutine: 1 channels: userAgent: Mozilla/5.0 WINK/1.31.1 (AndroidTV/9) HlsWinkPlayer timeout: 10 byteRange: 512 cooldown: 0 maxRoutines: 50 perRoutine: 10 cache: enabled: true host: cache port: 6379 username: password: db: 0 ttl: 3600 ``` Каждый параметр ниже описан отдельной секцией с указанием значения по умолчанию, переменной окружения и соответствующего CLI-флага. --- ## Секция `app` { id="app" } ### `app.timezone` { id="app-timezone" } Часовой пояс, используемый в логах и при отображении времени проверок. --- ### `app.debug` { id="app-debug" } Режим отладки. Включает расширенное логирование и дополнительные проверки в логике приложения. --- ### `app.logLevel` { id="app-log-level" } Уровень логирования. Допустимые значения: `debug`, `info`, `warn`, `error`. --- ### `app.playlists` { id="app-playlists" } Путь к локальному [ini-файлу](formats/playlists.md) с описанием плейлистов. !!! info "Аргумент работает только для команд `check` и `serve --check`." --- ### `app.tags` { id="app-tags" } Путь к локальному [json-файлу](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.baseUrl` { id="site-base-url" } Базовый URL сайта. Используется при формировании абсолютных ссылок в шаблонах. --- ### `site.repo-url` { id="site-repo-url" } Ссылка на исходный репозиторий (отображается в подвале). --- ### `site.pageSize` { id="site-page-size" } Размер страницы пагинации. При значении `0` пагинация отключена, на главной странице выводятся все плейлисты. --- ### `site.favicon` { id="site-favicon" } Путь к файлу иконки сайта. Пустая строка — используется встроенная. --- ### `site.meta` { id="site-meta" } Мета-теги `` и `` для HTML-шаблонов. | Поле | Переменная окружения | Описание | | ------------- | ----------------------- | ---------------------------- | | `description` | `SITE_META_DESCRIPTION` | Описание сайта в meta-тегах | | `keywords` | `SITE_META_KEYWORDS` | Ключевые слова через запятую | --- ### `site.title` { id="site-title" } Заголовок сайта, отображается в `` и в navbar. --- ### `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 false --> Отображать вкладку «Юридическая информация». --- ### `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<-- "../common/config/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.startOnServe` { 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.userAgent` { 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.allCooldown` { 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.oneCooldown` { 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.maxRoutines` { 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.perRoutine` { 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.userAgent` { 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.byteRange` { 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.maxRoutines` { 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.perRoutine` { 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" } Параметры подключения к кешу для хранения результатов проверок. --- ### `cache.enabled` { id="cache-enabled" } <!-- md:default true --> <!-- md:env CACHE_ENABLED --> <!-- md:arg --cache-enabled --> Включить использование внешнего кеша. !!! info "Аргумент работает только для команд `check` и `serve --check`." --- ### `cache.host` { id="cache-host" } <!-- md:default cache --> <!-- md:env CACHE_HOST --> <!-- md:arg --cache-host --> Хост кеша. !!! info "Аргумент работает только для команд `check` и `serve --check`." --- ### `cache.port` { id="cache-port" } <!-- md:default 6379 --> <!-- md:env CACHE_PORT --> <!-- md:arg --cache-port --> Порт кеша. !!! 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 --> Номер логической базы данных в кеше. !!! info "Аргумент работает только для команд `check` и `serve --check`." --- ### `cache.ttl` { id="cache-ttl" } <!-- md:default 3600 --> <!-- md:env CACHE_TTL --> <!-- md:arg --cache-ttl --> TTL записей кеша, секунды. !!! info "Аргумент работает только для команд `check` и `serve --check`."