This commit is contained in:
2026-08-03 12:53:34 +08:00
parent 89b303fed3
commit c91ff4c103
26 changed files with 396 additions and 362 deletions
+54 -53
View File
@@ -36,7 +36,7 @@ tags: ["iptvc", "serve", "сайт"]
## Шаг 2. Добавляем плейлисты
Список плейлистов описывается в файле [`playlists.ini`](../../ref/formats/playlists.md).
Список плейлистов описывается в файле [`playlists.ini`](../../reference/formats/playlists.md).
Создадим его рядом с `iptvc`:
```ini title="playlists.ini"
@@ -66,7 +66,7 @@ pls = 'https://example.com/movies.m3u'
Чтобы статусы появились, нужно включить фоновую проверку.
!!! tip "Путь к ini-файлу"
Если файл лежит не рядом с программой, укажите путь через флаг [`-i`](../commands/serve.md#ini) или в [`config.yml`](../../ref/config.md) → `app.playlists`.
Если файл лежит не рядом с программой, укажите путь через флаг [`-i`](../commands/serve.md#ini) или в [`config.yml`](../../reference/config.md) → `app.playlists`.
---
@@ -92,11 +92,11 @@ pls = 'https://example.com/movies.m3u'
./iptvc serve --check --repeat 1
```
Если не хочется каждый раз писать `--check`, можно включить проверку через [`config.yml`](../../ref/config.md):
Если не хочется каждый раз писать `--check`, можно включить проверку через [`config.yml`](../../reference/config.md):
```yaml title="config.yml"
check:
start-on-serve: true
startOnServe: true
```
Тогда обычный `./iptvc serve` автоматически запустит фоновую проверку.
@@ -106,14 +106,14 @@ check:
## Шаг 4. Настраиваем внешний вид сайта
Сайт можно настроить под себя: заголовок, иконку, навигацию в шапке и ссылки в подвале.
Всё это — в секции [`site`](../../ref/config.md) файла `config.yml`.
Всё это — в секции [`site`](../../reference/config.md) файла `config.yml`.
```yaml title="config.yml"
site:
base-url: http://localhost:8800
baseUrl: http://localhost:8800
repo-url: https://git.axenov.dev/IPTV
page-size: 20 # пагинация по 20 плейлистов на страницу (0 — без пагинации)
favicon: /favicon.ico # путь к иконке
pageSize: 20 # пагинация по 20 плейлистов на страницу (0 — без пагинации)
favicon: ./favicon.ico # путь к иконке
header:
title: Мой IPTV # заголовок в шапке и вкладке браузера
menu:
@@ -141,8 +141,8 @@ site:
--8<-- "icons.md"
!!! note "base-url"
Параметр `base-url` используется для формирования внутренних ссылок.
!!! note "baseUrl"
Параметр `baseUrl` используется для формирования внутренних ссылок.
Если публикуете сайт на домене, укажите его здесь, например `https://my-iptv.ru`.
---
@@ -150,7 +150,7 @@ site:
## Шаг 5. Добавляем теги каналам
Теги помогают посетителям находить каналы по темам: спорт, фильмы, музыка и так далее.
Правила описываются в файле [`channels.json`](../../ref/formats/channels.md).
Правила описываются в файле [`channels.json`](../../reference/formats/channels.md).
```json title="channels.json"
[
@@ -169,30 +169,30 @@ site:
]
```
Путь к файлу указывается в [`config.yml`](../../ref/config.md) → `app.tags` или через флаг [`-t`](../commands/serve.md#tags):
Путь к файлу указывается в [`config.yml`](../../reference/config.md) → `app.tags` или через флаг [`-t`](../commands/serve.md#tags):
```bash
./iptvc serve --check -t /path/to/channels.json
```
Полный список доступных тегов — в [справочнике по channels.json](../../ref/formats/channels.md#доступные-теги).
Полный список доступных тегов — в [справочнике по channels.json](../../reference/formats/channels.md#доступные-теги).
---
## Шаг 6. Подключаем кеш (KeyDB/Redis)
## Шаг 6. Подключаем кеш Valkey
По умолчанию результаты проверки хранятся только в оперативной памяти.
Если программу перезапустить — все результаты пропадут, и плейлисты снова станут `unknown` до следующей проверки.
Кеш решает эту проблему: результаты сохраняются в KeyDB (или Redis) и переживают перезапуск.
Включается одной строкой в [`config.yml`](../../ref/config.md):
Кеш решает эту проблему: результаты сохраняются в кеше и переживают перезапуск.
Включается в [`config.yml`](../../reference/config.md):
```yaml title="config.yml"
cache:
enabled: true
host: localhost
host: cache
port: 6379
ttl: 1800 # секунды (по умолчанию 30)
ttl: 3600 # секунды (по умолчанию 3600)
```
Или через переменные окружения:
@@ -204,11 +204,12 @@ CACHE_ENABLED=true CACHE_TTL=3600 ./iptvc serve --check
Или через флаги:
```bash
./iptvc serve --check --cache-enabled --cache-host 192.168.1.10 --cache-ttl 3600
./iptvc serve --check --cache-enabled --cache-host 192.168.1.10 --cache-ttl 1800
```
!!! tip "KeyDB или Redis"
KeyDB — это форк Redis, полностью совместимый по протоколу.
!!! tip "Valkey, KeyDB или Redis"
Valkey — это открытый форк Redis, а KeyDB — ещё один форк.
Все они полностью совместимы по протоколу.
Подойдёт любой из них.
Если кеш включён, но сервер недоступен — сайт продолжит работать, просто без кеширования.
@@ -217,18 +218,18 @@ CACHE_ENABLED=true CACHE_TTL=3600 ./iptvc serve --check
## Шаг 7. Тонкая настройка проверки
Когда плейлистов много, полезно управлять параллелизмом, таймаутами и задержками.
Все параметры — в секции [`check`](../../ref/config.md) файла `config.yml`.
Все параметры — в секции [`check`](../../reference/config.md) файла `config.yml`.
### Параллелизм
```yaml title="config.yml"
check:
playlists:
max-routines: 10 # сколько плейлистов проверять одновременно
per-routine: 5 # сколько плейлистов в одной процедуре
maxRoutines: 10 # сколько плейлистов проверять одновременно
perRoutine: 5 # сколько плейлистов в одной процедуре
channels:
max-routines: 100 # сколько каналов проверять одновременно
per-routine: 20 # сколько каналов в одной процедуре
maxRoutines: 100 # сколько каналов проверять одновременно
perRoutine: 20 # сколько каналов в одной процедуре
```
Чем больше значения — тем быстрее проверка, но выше нагрузка на процессор и сеть.
@@ -242,11 +243,11 @@ check:
timeout: 10 # секунд на загрузку плейлиста
channels:
timeout: 10 # секунд на проверку одного канала
byte-range: 512 # сколько байт скачать от сервера канала
byteRange: 512 # сколько байт скачать от сервера канала
```
Если плейлисты или каналы медленные, увеличьте `timeout`.
Если сервер блокирует большие запросы — уменьшите `byte-range`.
Если сервер блокирует большие запросы — уменьшите `byteRange`.
### Задержки (cooldown)
@@ -256,8 +257,8 @@ check:
```yaml title="config.yml"
check:
playlists:
all-cooldown: 5 # 5 секунд после всех плейлистов
one-cooldown: [1, 3] # 1–3 секунды после каждого плейлиста
allCooldown: 5 # 5 секунд после всех плейлистов
oneCooldown: [1, 3] # 1–3 секунды после каждого плейлиста
channels:
cooldown: 0 # 0 секунд после каждого канала
```
@@ -270,14 +271,14 @@ check:
```yaml title="config.yml"
check:
playlists:
user-agent:
userAgent:
- Mozilla/5.0 WINK/1.31.1 (AndroidTV/9) HlsWinkPlayer
- Mozilla/5.0 (Linux; Android 11) AppleWebKit/537.36
channels:
user-agent: Mozilla/5.0 (Linux; Android 11) AppleWebKit/537.36
userAgent: Mozilla/5.0 (Linux; Android 11) AppleWebKit/537.36
```
Все эти параметры можно также задавать через [переменные окружения](../../ref/config.md) или [CLI-флаги](../commands/serve.md) — они имеют наивысший приоритет.
Все эти параметры можно также задавать через [переменные окружения](../../reference/config.md) или [CLI-флаги](../commands/serve.md) — они имеют наивысший приоритет.
---
@@ -289,7 +290,7 @@ check:
app:
timezone: GMT+3
debug: false
log_level: info
logLevel: info
playlists: ./playlists.ini
tags: ./channels.json
@@ -298,10 +299,10 @@ server:
port: 8800
site:
base-url: https://my-iptv.ru
baseUrl: https://my-iptv.ru
repo-url: https://git.axenov.dev/IPTV
page-size: 20
favicon: /favicon.ico
pageSize: 20
favicon: ./favicon.ico
header:
title: Мой IPTV
menu:
@@ -330,27 +331,27 @@ site:
icon: person-outline
check:
start-on-serve: true
startOnServe: true
playlists:
user-agent:
userAgent:
- Mozilla/5.0 WINK/1.31.1 (AndroidTV/9) HlsWinkPlayer
- Mozilla/5.0 (Linux; Android 11) AppleWebKit/537.36
timeout: 10
all-cooldown: 5
one-cooldown: [1, 3]
max-routines: 10
per-routine: 5
allCooldown: 5
oneCooldown: [1, 3]
maxRoutines: 10
perRoutine: 5
channels:
user-agent: Mozilla/5.0 (Linux; Android 11) AppleWebKit/537.36
userAgent: Mozilla/5.0 (Linux; Android 11) AppleWebKit/537.36
timeout: 10
byte-range: 512
byteRange: 512
cooldown: 0
max-routines: 100
per-routine: 20
maxRoutines: 100
perRoutine: 20
cache:
enabled: true
host: localhost
host: cache
port: 6379
ttl: 3600
```
@@ -361,7 +362,7 @@ cache:
./iptvc serve
```
Поскольку `start-on-serve: true`, фоновая проверка запустится автоматически.
Поскольку `startOnServe: true`, фоновая проверка запустится автоматически.
Кеш включён, так что результаты переживут перезапуск.
Сайт доступен на `http://0.0.0.0:8800`.
@@ -385,11 +386,11 @@ services:
environment:
- CHECK_START_ON_SERVE=true
- CACHE_ENABLED=true
- CACHE_HOST=keydb
- CACHE_HOST=cache
- CACHE_PORT=6379
keydb:
image: eqalpha/keydb:latest
cache:
image: valkey/valkey:latest
restart: unless-stopped
```
@@ -414,4 +415,4 @@ docker compose up -d
| Пауза 2 минуты между циклами | `./iptvc serve --check --playlists-all-cooldown 120` |
| Подробные логи | `./iptvc serve --check --verbose` |
Полный список параметров — в [справочнике по `config.yml`](../../ref/config.md), [переменным окружения](../../ref/config.md) и [команде `serve`](../commands/serve.md).
Полный список параметров — в [справочнике по `config.yml`](../../reference/config.md), [переменным окружения](../../reference/config.md) и [команде `serve`](../commands/serve.md).