wip1
This commit is contained in:
@@ -0,0 +1,436 @@
|
||||
---
|
||||
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
|
||||
- title: Telegram
|
||||
icon: paper-plane-outline
|
||||
children:
|
||||
- title: Канал
|
||||
url: https://t.me/iptv_aggregator
|
||||
icon: megaphone-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
|
||||
```
|
||||
|
||||
## Секция `app`
|
||||
|
||||
| Параметр | Тип | По умолчанию | Описание |
|
||||
| ----------- | ------ | ----------------- | ---------------------- |
|
||||
| `timezone` | string | `GMT` | Часовой пояс |
|
||||
| `debug` | bool | `false` | Режим отладки |
|
||||
| `log_level` | string | `info` | Уровень логирования |
|
||||
| `playlists` | string | `./playlists.ini` | Путь к `playlists.ini` |
|
||||
| `tags` | string | `./channels.json` | Путь к `channels.json` |
|
||||
|
||||
## Секция `server`
|
||||
|
||||
| Параметр | Тип | По умолчанию | Описание |
|
||||
| -------- | ------ | ------------ | ----------------- |
|
||||
| `host` | string | (пусто) | Хост для привязки |
|
||||
| `port` | uint | `8080` | Порт веб-сервера |
|
||||
|
||||
## Секция `site`
|
||||
|
||||
Настройки сайта: ссылки, заголовок, навигация, пагинация.
|
||||
|
||||
| Параметр | Тип | По умолчанию | Описание |
|
||||
| ----------- | ------ | ----------------------------- | ----------------------------------- |
|
||||
| `base-url` | string | `http://localhost:8080` | Базовый URL для формирования ссылок |
|
||||
| `repo-url` | string | `https://git.axenov.dev/IPTV` | Ссылка на репозиторий |
|
||||
| `page-size` | uint | `0` | Размер страницы (0 — без пагинации) |
|
||||
| `favicon` | string | (пусто) | Путь к иконке сайта |
|
||||
|
||||
### `site.header`
|
||||
|
||||
Настройки шапки сайта.
|
||||
|
||||
| Параметр | Тип | По умолчанию | Описание |
|
||||
| ------------ | ------ | -------------- | -------------------------------------- |
|
||||
| `title` | string | `IPTV Checker` | Заголовок сайта (в navbar и `<title>`) |
|
||||
| `navigation` | [Link] | (см. ниже) | Ссылки в шапке сайта |
|
||||
|
||||
### `site.footer-links`
|
||||
|
||||
Ссылки в подвале сайта. Массив элементов `Link`.
|
||||
|
||||
### Тип `Link`
|
||||
|
||||
Элемент навигации или подвала. Если задано `children`, рендерится как выпадающее меню.
|
||||
|
||||
| Параметр | Тип | Описание |
|
||||
| ---------- | ------ | ----------------------------------------------------------- |
|
||||
| `title` | string | Текст ссылки |
|
||||
| `url` | string | URL ссылки (можно опустить, если есть `children`) |
|
||||
| `icon` | string | Имя иконки |
|
||||
| `children` | [Link] | Дочерние ссылки (выпадающее меню, один уровень вложенности) |
|
||||
|
||||
--8<-- "ionicons-name.md"
|
||||
|
||||
Пример:
|
||||
|
||||
```yaml
|
||||
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`
|
||||
|
||||
Параметры проверки плейлистов и каналов. Поддерживаются скаляры и массивы.
|
||||
|
||||
### `check.start-on-serve`
|
||||
|
||||
| Параметр | Тип | По умолчанию | Описание |
|
||||
| ---------------- | ---- | ------------ | ---------------------------------------------------------- |
|
||||
| `start-on-serve` | bool | `false` | Запустить фоновую проверку при `serve` без флага `--check` |
|
||||
|
||||
### Типы значений
|
||||
|
||||
!!! info "timeout, max-routines, per-routine, byte-range"
|
||||
Эти параметры — всегда целые числа, не массивы.
|
||||
|
||||
!!! info "cooldown (all-cooldown, one-cooldown, channels.cooldown)"
|
||||
Эти параметры могут быть заданы:
|
||||
|
||||
- **скаляром** — фиксированное значение, например `all-cooldown: 10`;
|
||||
- **массивом `[min, max]`** — случайное значение в диапазоне при каждой проверке, например `all-cooldown: [5, 15]`.
|
||||
|
||||
!!! info "user-agent"
|
||||
Параметр `user-agent` может быть задан:
|
||||
|
||||
- **строкой** — используется всегда одно значение;
|
||||
- **массивом строк** — случайный выбор при каждом запросе.
|
||||
|
||||
!!! info "byte-range"
|
||||
Параметр `byte-range` — всегда целое число (не массив).
|
||||
|
||||
### `check.playlists`
|
||||
|
||||
Параметры проверки плейлистов (загрузка m3u-файлов по URL или из ФС).
|
||||
|
||||
| Параметр | Тип | По умолчанию | Единица | Описание |
|
||||
| -------------- | ------------------ | ----------------- | ------- | ------------------------------------------------ |
|
||||
| `user-agent` | string \| string[] | `Mozilla/5.0 ...` | — | User-Agent для HTTP-запросов |
|
||||
| `timeout` | int | `10000` | мс | Таймаут запроса плейлиста |
|
||||
| `all-cooldown` | int \| int[] | `0` | мс | Задержка после проверки всех плейлистов |
|
||||
| `one-cooldown` | int \| int[] | `0` | мс | Задержка после проверки каждого плейлиста |
|
||||
| `max-routines` | int | `5` | шт | Максимум одновременно проверяемых плейлистов |
|
||||
| `per-routine` | int | `1` | шт | Количество плейлистов на одну процедуру проверки |
|
||||
|
||||
### `check.channels`
|
||||
|
||||
Параметры проверки каналов внутри плейлиста.
|
||||
|
||||
| Параметр | Тип | По умолчанию | Единица | Описание |
|
||||
| -------------- | ------------------ | ----------------- | ------- | --------------------------------------------- |
|
||||
| `user-agent` | string \| string[] | `Mozilla/5.0 ...` | — | User-Agent для HTTP-запросов |
|
||||
| `timeout` | int | `10000` | мс | Таймаут запроса канала |
|
||||
| `byte-range` | int | `512` | байт | Объём данных для загрузки от сервера |
|
||||
| `cooldown` | int \| int[] | `0` | мс | Задержка после проверки каждого канала |
|
||||
| `max-routines` | int | `50` | шт | Максимум одновременно проверяемых каналов |
|
||||
| `per-routine` | int | `10` | шт | Количество каналов на одну процедуру проверки |
|
||||
|
||||
## Секция `cache`
|
||||
|
||||
| Параметр | Тип | По умолчанию | Описание |
|
||||
| ---------- | ------ | ------------ | ---------------------------------- |
|
||||
| `enabled` | bool | `false` | Включить кеширование (KeyDB/Redis) |
|
||||
| `host` | string | `localhost` | Хост KeyDB/Redis |
|
||||
| `port` | uint | `6379` | Порт KeyDB/Redis |
|
||||
| `username` | string | (пусто) | Логин |
|
||||
| `password` | string | (пусто) | Пароль |
|
||||
| `db` | uint | `0` | Номер БД |
|
||||
| `ttl` | uint | `1800` | TTL записей (сек) |
|
||||
|
||||
## Валидация
|
||||
|
||||
При запуске конфигурация валидируется.
|
||||
Некорректные значения исправляются автоматически, каждое исправление логируется:
|
||||
|
||||
| Проверка | Действие |
|
||||
| ---------------------------------------------------- | --------------------------------------- |
|
||||
| `server.port` = 0 или > 65535 | сброс в `8080` |
|
||||
| `site.base-url` пусто | автогенерация `http://localhost:{port}` |
|
||||
| `cache.host` пусто (если cache включён) | `localhost` |
|
||||
| `cache.port` = 0 (если cache включён) | `6379` |
|
||||
| `cache.ttl` = 0 (если cache включён) | `1800` |
|
||||
| `check.playlists.timeout` <= 0 | `10000` |
|
||||
| `check.channels.timeout` <= 0 | `10000` |
|
||||
| `check.*.cooldown` — `min > max` | swap |
|
||||
| `check.*.cooldown` — выход за границы `[0, 3600000]` | clamp |
|
||||
| `check.playlists.max-routines` < 1 | `5` |
|
||||
| `check.channels.max-routines` < 1 | `50` |
|
||||
| `check.playlists.per-routine` < 1 | `1` |
|
||||
| `check.channels.per-routine` < 1 | `10` |
|
||||
| `check.channels.byte-range` <= 0 | `512` |
|
||||
| `check.*.user-agent` пусто | дефолтный User-Agent |
|
||||
|
||||
## Переменные окружения
|
||||
|
||||
Переменные окружения переопределяют значения из `config.yml`.
|
||||
|
||||
### Приложение
|
||||
|
||||
| Переменная | Соответствует в `config.yml` |
|
||||
| --------------- | ---------------------------- |
|
||||
| `APP_DEBUG` | `app.debug` |
|
||||
| `APP_LOG_LEVEL` | `app.log_level` |
|
||||
| `APP_TIMEZONE` | `app.timezone` |
|
||||
| `APP_PLAYLISTS` | `app.playlists` |
|
||||
| `APP_TAGS` | `app.tags` |
|
||||
|
||||
### Веб-сервер и сайт
|
||||
|
||||
| Переменная | Соответствует в `config.yml` |
|
||||
| -------------- | ---------------------------- |
|
||||
| `WEB_PORT` | `server.port` |
|
||||
| `WEB_HOST` | `server.host` |
|
||||
| `APP_URL` | `site.base-url` |
|
||||
| `PAGE_SIZE` | `site.page-size` |
|
||||
| `REPO_URL` | `site.repo-url` |
|
||||
| `SITE_FAVICON` | `site.favicon` |
|
||||
| `APP_TITLE` | `site.header.title` |
|
||||
|
||||
### Проверка
|
||||
|
||||
| Переменная | Соответствует в `config.yml` |
|
||||
| ---------------------- | ---------------------------- |
|
||||
| `CHECK_START_ON_SERVE` | `check.start-on-serve` |
|
||||
|
||||
#### `check.playlists`
|
||||
|
||||
| Переменная | Соответствует в `config.yml` |
|
||||
| ---------------------------------- | --------------------------------------------------- |
|
||||
| `CHECK_PLAYLISTS_TIMEOUT` | `check.playlists.timeout` |
|
||||
| `CHECK_PLAYLISTS_ALL_COOLDOWN` | `check.playlists.all-cooldown` (скаляр) |
|
||||
| `CHECK_PLAYLISTS_ALL_COOLDOWN_MIN` | `check.playlists.all-cooldown` (минимум диапазона) |
|
||||
| `CHECK_PLAYLISTS_ALL_COOLDOWN_MAX` | `check.playlists.all-cooldown` (максимум диапазона) |
|
||||
| `CHECK_PLAYLISTS_ONE_COOLDOWN` | `check.playlists.one-cooldown` (скаляр) |
|
||||
| `CHECK_PLAYLISTS_ONE_COOLDOWN_MIN` | `check.playlists.one-cooldown` (минимум диапазона) |
|
||||
| `CHECK_PLAYLISTS_ONE_COOLDOWN_MAX` | `check.playlists.one-cooldown` (максимум диапазона) |
|
||||
| `CHECK_PLAYLISTS_MAX_ROUTINES` | `check.playlists.max-routines` |
|
||||
| `CHECK_PLAYLISTS_PER_ROUTINE` | `check.playlists.per-routine` |
|
||||
| `CHECK_PLAYLISTS_USER_AGENT_1` | `check.playlists.user-agent` (первый элемент) |
|
||||
| `CHECK_PLAYLISTS_USER_AGENT_2` | `check.playlists.user-agent` (второй элемент) |
|
||||
| `CHECK_PLAYLISTS_USER_AGENT_N` | `check.playlists.user-agent` (N-й элемент) |
|
||||
|
||||
#### `check.channels`
|
||||
|
||||
| Переменная | Соответствует в `config.yml` |
|
||||
| ----------------------------- | ---------------------------------------------- |
|
||||
| `CHECK_CHANNELS_TIMEOUT` | `check.channels.timeout` |
|
||||
| `CHECK_CHANNELS_BYTE_RANGE` | `check.channels.byte-range` |
|
||||
| `CHECK_CHANNELS_COOLDOWN` | `check.channels.cooldown` (скаляр) |
|
||||
| `CHECK_CHANNELS_COOLDOWN_MIN` | `check.channels.cooldown` (минимум диапазона) |
|
||||
| `CHECK_CHANNELS_COOLDOWN_MAX` | `check.channels.cooldown` (максимум диапазона) |
|
||||
| `CHECK_CHANNELS_MAX_ROUTINES` | `check.channels.max-routines` |
|
||||
| `CHECK_CHANNELS_PER_ROUTINE` | `check.channels.per-routine` |
|
||||
| `CHECK_CHANNELS_USER_AGENT_1` | `check.channels.user-agent` (первый элемент) |
|
||||
| `CHECK_CHANNELS_USER_AGENT_2` | `check.channels.user-agent` (второй элемент) |
|
||||
| `CHECK_CHANNELS_USER_AGENT_N` | `check.channels.user-agent` (N-й элемент) |
|
||||
|
||||
!!! info "Диапазоны cooldown через env"
|
||||
Если заданы обе переменные `_MIN` и `_MAX` — используется диапазон.
|
||||
Если задана только скалярная переменная (без `_MIN`/`_MAX`) — используется фиксированное значение.
|
||||
Если задана только одна из `_MIN`/`_MAX` — переменная игнорируется.
|
||||
|
||||
!!! info "Массивы user-agent через env"
|
||||
Переменные читаются последовательно: `_1`, `_2`, `_3`, …
|
||||
Первая отсутствующая переменная останавливает чтение.
|
||||
Пустые значения пропускаются.
|
||||
|
||||
### Кеш
|
||||
|
||||
| Переменная | Соответствует в `config.yml` |
|
||||
| ---------------- | ---------------------------- |
|
||||
| `CACHE_ENABLED` | `cache.enabled` |
|
||||
| `CACHE_HOST` | `cache.host` |
|
||||
| `CACHE_PORT` | `cache.port` |
|
||||
| `CACHE_USERNAME` | `cache.username` |
|
||||
| `CACHE_PASSWORD` | `cache.password` |
|
||||
| `CACHE_DB` | `cache.db` |
|
||||
| `CACHE_TTL` | `cache.ttl` |
|
||||
|
||||
## CLI-флаги
|
||||
|
||||
CLI-флаги имеют наивысший приоритет и переопределяют значения из `config.yml` и переменных окружения. Все флаги используют zero-value по умолчанию: переопределение срабатывает, только если флаг задан явно (через `cmd.Flags().Changed()`).
|
||||
|
||||
Порядок применения в обработчиках команд:
|
||||
|
||||
```
|
||||
app.Init() → defaults → config.yml → env → logger
|
||||
applyAppOverrides(cmd) → app.* через Changed()
|
||||
applyCacheOverrides(cmd) → cache.* через Changed()
|
||||
applyCheckOverrides(cmd) → check.* через Changed()
|
||||
app.InitCache() → подключение к KeyDB/Redis
|
||||
```
|
||||
|
||||
### Глобальные флаги
|
||||
|
||||
### Флаги путей
|
||||
|
||||
Доступны для `check` и `serve`.
|
||||
|
||||
| Флаг | Тип | Соответствует в `config.yml` | Описание |
|
||||
| -------------- | ------ | ---------------------------- | ---------------------- |
|
||||
| `-i`, `--ini` | string | `app.playlists` | Путь к `playlists.ini` |
|
||||
| `-t`, `--tags` | string | `app.tags` | Путь к `channels.json` |
|
||||
|
||||
### Флаги итерации
|
||||
|
||||
Доступны для `check` и `serve`.
|
||||
|
||||
| Флаг | Тип | По умолчанию | Описание |
|
||||
| ---------------- | ---- | ------------------------------ | --------------------------------------------- |
|
||||
| `-r`, `--random` | uint | `0` | Проверить N случайных плейлистов из ini-файла |
|
||||
| `--repeat` | uint | `1` (`check`) / `0` (`serve`) | Количество циклов (0 = бесконечно) |
|
||||
| `--every` | uint | `5` (`check`) / `60` (`serve`) | Секунд между циклами |
|
||||
|
||||
### Флаги проверки плейлистов
|
||||
|
||||
Доступны для `check` и `serve`. Переопределяют секцию `check.playlists`.
|
||||
|
||||
| Флаг | Тип | Соответствует в `config.yml` | Единица | Описание |
|
||||
| -------------------------- | -------- | ------------------------------ | ------- | -------------------------------- |
|
||||
| `--playlists-timeout` | int | `check.playlists.timeout` | мс | Таймаут запроса плейлиста |
|
||||
| `--playlists-all-cooldown` | int | `check.playlists.all-cooldown` | мс | Задержка после всех плейлистов |
|
||||
| `--playlists-one-cooldown` | int | `check.playlists.one-cooldown` | мс | Задержка после каждого плейлиста |
|
||||
| `--playlists-max-routines` | int | `check.playlists.max-routines` | шт | Максимум параллельных проверок |
|
||||
| `--playlists-per-routine` | int | `check.playlists.per-routine` | шт | Плейлистов на процедуру |
|
||||
| `--playlists-user-agent` | string[] | `check.playlists.user-agent` | — | User-Agent (можно несколько) |
|
||||
|
||||
### Флаги проверки каналов
|
||||
|
||||
Доступны для `check` и `serve`. Переопределяют секцию `check.channels`.
|
||||
|
||||
| Флаг | Тип | Соответствует в `config.yml` | Единица | Описание |
|
||||
| ------------------------- | -------- | ----------------------------- | ------- | ------------------------------ |
|
||||
| `--channels-timeout` | int | `check.channels.timeout` | мс | Таймаут запроса канала |
|
||||
| `--channels-byte-range` | int | `check.channels.byte-range` | байт | Объём данных от сервера |
|
||||
| `--channels-cooldown` | int | `check.channels.cooldown` | мс | Задержка после каждого канала |
|
||||
| `--channels-max-routines` | int | `check.channels.max-routines` | шт | Максимум параллельных проверок |
|
||||
| `--channels-per-routine` | int | `check.channels.per-routine` | шт | Каналов на процедуру |
|
||||
| `--channels-user-agent` | string[] | `check.channels.user-agent` | — | User-Agent (можно несколько) |
|
||||
|
||||
### Флаги кеша
|
||||
|
||||
Доступны для `check` и `serve`. Переопределяют секцию `cache`.
|
||||
|
||||
| Флаг | Тип | Соответствует в `config.yml` | Описание |
|
||||
| ------------------ | ------ | ---------------------------- | ----------------- |
|
||||
| `--cache-enabled` | bool | `cache.enabled` | Включить кеш |
|
||||
| `--cache-host` | string | `cache.host` | Хост KeyDB/Redis |
|
||||
| `--cache-port` | uint | `cache.port` | Порт KeyDB/Redis |
|
||||
| `--cache-username` | string | `cache.username` | Логин |
|
||||
| `--cache-password` | string | `cache.password` | Пароль |
|
||||
| `--cache-db` | uint | `cache.db` | Номер БД |
|
||||
| `--cache-ttl` | uint | `cache.ttl` | TTL записей (сек) |
|
||||
|
||||
### Флаги только для `serve`
|
||||
|
||||
| Флаг | Тип | Соответствует в `config.yml` | Описание |
|
||||
| -------------- | ------ | ---------------------------- | ------------------------- |
|
||||
| `-p`, `--port` | uint | `server.port` | Порт веб-сервера |
|
||||
| `--host` | string | `server.host` | Хост привязки |
|
||||
| `--check` | bool | — | Включить фоновую проверку |
|
||||
|
||||
### Флаги только для `check`
|
||||
|
||||
| Флаг | Тип | Описание |
|
||||
| --------------- | -------- | -------------------------- |
|
||||
| `-j`, `--json` | bool | Вывод результатов в JSON |
|
||||
| `-q`, `--quiet` | bool | Подавить логи |
|
||||
| `-f`, `--file` | string[] | Локальный m3u-файл |
|
||||
| `-u`, `--url` | string[] | URL удалённого плейлиста |
|
||||
| `-c`, `--code` | string[] | Код плейлиста из ini-файла |
|
||||
@@ -0,0 +1,116 @@
|
||||
---
|
||||
icon: simple/dotenv
|
||||
tags: ["iptvc", "переменные окружения"]
|
||||
---
|
||||
|
||||
# :simple-dotenv: Переменные окружения
|
||||
|
||||
Переменные окружения переопределяют значения из [`config.yml`](config.md).
|
||||
Файл `.env` загружается автоматически при запуске.
|
||||
|
||||
Приоритет: **defaults → config.yml → env → CLI-флаги**.
|
||||
|
||||
## Приложение
|
||||
|
||||
| Имя | Тип | Умолчание | Назначение |
|
||||
| ---------------- | ------ | ----------------------- | ----------------------------------------- |
|
||||
| `APP_DEBUG` | bool | `false` | Режим отладки |
|
||||
| `APP_LOG_LEVEL` | string | `info` | Уровень логирования (`debug`, `info`, `warn`, `error`) |
|
||||
| `APP_TIMEZONE` | string | `GMT` | Часовой пояс |
|
||||
| `APP_PLAYLISTS` | string | `./playlists.ini` | Путь к `playlists.ini` |
|
||||
| `APP_TAGS` | string | `./channels.json` | Путь к `channels.json` |
|
||||
|
||||
## Веб-сервер и сайт
|
||||
|
||||
| Имя | Тип | Умолчание | Назначение |
|
||||
| ---------------- | ------ | ----------------------------- | ----------------------------------- |
|
||||
| `WEB_PORT` | uint | `8080` | Порт веб-сервера |
|
||||
| `WEB_HOST` | string | (пусто) | Хост для привязки |
|
||||
| `APP_URL` | string | `http://localhost:8080` | Базовый URL для ссылок |
|
||||
| `PAGE_SIZE` | uint | `0` | Размер страницы (0 — без пагинации) |
|
||||
| `REPO_URL` | string | `https://git.axenov.dev/IPTV` | Ссылка на репозиторий |
|
||||
| `SITE_FAVICON` | string | (пусто) | Путь к иконке сайта |
|
||||
| `APP_TITLE` | string | `IPTV Checker` | Заголовок сайта |
|
||||
|
||||
## Проверка
|
||||
|
||||
| Имя | Тип | Умолчание | Назначение |
|
||||
| ----------------------- | --- | --------- | ------------------------------------------------------- |
|
||||
| `CHECK_START_ON_SERVE` | bool | `false` | Запустить фоновую проверку при `serve` без флага `--check` |
|
||||
|
||||
### `check.playlists`
|
||||
|
||||
| Имя | Тип | Умолчание | Назначение |
|
||||
| --- | --- | --- | --- |
|
||||
| `CHECK_PLAYLISTS_TIMEOUT` | int | `10000` | Таймаут запроса плейлиста (мс) |
|
||||
| `CHECK_PLAYLISTS_ALL_COOLDOWN` | int | `0` | Задержка после всех плейлистов (мс, скаляр) |
|
||||
| `CHECK_PLAYLISTS_ALL_COOLDOWN_MIN` | int | `0` | Минимум задержки после всех плейлистов (мс) |
|
||||
| `CHECK_PLAYLISTS_ALL_COOLDOWN_MAX` | int | `0` | Максимум задержки после всех плейлистов (мс) |
|
||||
| `CHECK_PLAYLISTS_ONE_COOLDOWN` | int | `0` | Задержка после каждого плейлиста (мс, скаляр) |
|
||||
| `CHECK_PLAYLISTS_ONE_COOLDOWN_MIN` | int | `0` | Минимум задержки после каждого плейлиста (мс) |
|
||||
| `CHECK_PLAYLISTS_ONE_COOLDOWN_MAX` | int | `0` | Максимум задержки после каждого плейлиста (мс) |
|
||||
| `CHECK_PLAYLISTS_MAX_ROUTINES` | int | `5` | Максимум параллельных проверок плейлистов |
|
||||
| `CHECK_PLAYLISTS_PER_ROUTINE` | int | `1` | Плейлистов на процедуру |
|
||||
| `CHECK_PLAYLISTS_USER_AGENT_1` | string | `Mozilla/5.0 …` | Первый User-Agent для запросов плейлистов |
|
||||
| `CHECK_PLAYLISTS_USER_AGENT_2` | string | — | Второй User-Agent (и т.д.) |
|
||||
|
||||
### `check.channels`
|
||||
|
||||
| Имя | Тип | Умолчание | Назначение |
|
||||
| --- | --- | --- | --- |
|
||||
| `CHECK_CHANNELS_TIMEOUT` | int | `10000` | Таймаут запроса канала (мс) |
|
||||
| `CHECK_CHANNELS_BYTE_RANGE` | int | `512` | Объём данных от сервера (байт) |
|
||||
| `CHECK_CHANNELS_COOLDOWN` | int | `0` | Задержка после каждого канала (мс, скаляр) |
|
||||
| `CHECK_CHANNELS_COOLDOWN_MIN` | int | `0` | Минимум задержки после каждого канала (мс) |
|
||||
| `CHECK_CHANNELS_COOLDOWN_MAX` | int | `0` | Максимум задержки после каждого канала (мс) |
|
||||
| `CHECK_CHANNELS_MAX_ROUTINES` | int | `50` | Максимум параллельных проверок каналов |
|
||||
| `CHECK_CHANNELS_PER_ROUTINE` | int | `10` | Каналов на процедуру |
|
||||
| `CHECK_CHANNELS_USER_AGENT_1` | string | `Mozilla/5.0 …` | Первый User-Agent для запросов каналов |
|
||||
| `CHECK_CHANNELS_USER_AGENT_2` | string | — | Второй User-Agent (и т.д.) |
|
||||
|
||||
## Кеширование
|
||||
|
||||
Кеш хранится в СУБД redis или keydb.
|
||||
|
||||
| Имя | Тип | Умолчание | Назначение |
|
||||
| ---------------- | ------ | ----------- | ---------------------------------- |
|
||||
| `CACHE_ENABLED` | bool | `false` | Включает кеширование |
|
||||
| `CACHE_HOST` | string | `localhost` | Имя хоста СУБД |
|
||||
| `CACHE_PORT` | uint | `6379` | Порт СУБД |
|
||||
| `CACHE_USERNAME` | string | (пусто) | Логин пользователя в СУБД |
|
||||
| `CACHE_PASSWORD` | string | (пусто) | Пароль пользователя в СУБД |
|
||||
| `CACHE_DB` | uint | `0` | Номер БД в СУБД для кеша |
|
||||
| `CACHE_TTL` | uint | `1800` | Время жизни ключей кеша в секундах |
|
||||
|
||||
## Правила
|
||||
|
||||
### Диапазоны cooldown
|
||||
|
||||
Поля `all-cooldown`, `one-cooldown` и `channels.cooldown` поддерживают скаляр и диапазон `[min, max]`.
|
||||
|
||||
Через env-переменные:
|
||||
|
||||
- Заданы **обе** `_MIN` и `_MAX` → диапазон (случайное значение при каждой проверке).
|
||||
- Задана только **скалярная** переменная (без суффикса) → фиксированное значение.
|
||||
- Задана только **одна** из `_MIN` / `_MAX` → переменная игнорируется.
|
||||
|
||||
```shell title="Скаляр"
|
||||
CHECK_PLAYLISTS_ALL_COOLDOWN=500
|
||||
```
|
||||
|
||||
```shell title="Диапазон"
|
||||
CHECK_PLAYLISTS_ALL_COOLDOWN_MIN=100
|
||||
CHECK_PLAYLISTS_ALL_COOLDOWN_MAX=2000
|
||||
```
|
||||
|
||||
### Массивы user-agent
|
||||
|
||||
Поля `user-agent` поддерживают массив строк. Через env задаются индексированными переменными `_1`, `_2`, `_3`, …
|
||||
|
||||
- Чтение останавливается на первой отсутствующей переменной.
|
||||
- Пустые значения пропускаются.
|
||||
|
||||
```shell title="Два User-Agent"
|
||||
CHECK_PLAYLISTS_USER_AGENT_1=Mozilla/5.0 WINK/1.31.1 (AndroidTV/9) HlsWinkPlayer
|
||||
CHECK_PLAYLISTS_USER_AGENT_2=curl/8.0
|
||||
```
|
||||
Reference in New Issue
Block a user