This commit is contained in:
2026-07-13 12:30:05 +08:00
parent 7d61aadc5d
commit 81075ad481
661 changed files with 5468 additions and 872 deletions
+123
View File
@@ -0,0 +1,123 @@
---
icon: material/upload-network
tags: ["iptvc", "docker", "deploy"]
---
# :material-upload-network: Развёртывание и доставка обновлений
В этом разделе описано, как развернуть полную инфраструктуру проекта m3u.su на собственном сервере: веб-сервер, фоновую проверку плейлистов, кеш и документацию.
## Требования
- [Docker](https://docs.docker.com/engine/install/) с плагином `docker compose` (v2)
- Доступ к репозиториям `git.axenov.dev/IPTV`
## Структура окружения
Полное Docker-окружение описано в `compose.yml` и состоит из пяти сервисов:
| Сервис | Образ | Назначение |
| --------- | ---------------------------- | -------------------------------------- |
| `nginx` | `nginx:latest` | Reverse-proxy, порт 3000→80 |
| `keydb` | `eqalpha/keydb:latest` | Кеш (форк Redis), порт 6379 |
| `web` | PHP-FPM (сборка из `web/`) | Legacy веб-слой |
| `checker` | `iptvc` (сборка из `iptvc/`) | Фоновая проверка плейлистов |
| `docs` | MkDocs (сборка из `docs/`) | Статическая документация, порт 3001→80 |
## Переменные окружения
Перед запуском скопируйте `.env.example` в `.env` и при необходимости отредактируйте:
| Переменная | По умолчанию | Назначение |
| ----------------- | -------------------- | ----------------------------------------------- |
| `IPTV_ENV` | `dev` | Окружение (`dev`/`prod`), влияет на конфиги PHP |
| `KEYDB_UID` | `1000` | ID пользователя KeyDB |
| `KEYDB_GID` | `1000` | ID группы KeyDB |
| `KEYDB_PORT` | `6379` | Порт KeyDB на хосте |
| `KEYDB_USERNAME` | (пусто) | Логин KeyDB |
| `KEYDB_PASSWORD` | (пусто) | Пароль KeyDB |
| `CHECKER_DB` | `0` | Номер БД KeyDB для кеша |
| `CHECKER_TTL` | `1800` | TTL кеша в секундах |
| `CHECKER_WAIT` | `60` | Секунд между запусками `iptvc check` |
| `CHECKER_INIFILE` | `/app/playlists.ini` | Путь к `playlists.ini` в контейнере |
| `CHECKER_TAGFILE` | `/app/channels.json` | Путь к `channels.json` в контейнере |
## Управление через скрипт `iptv`
В корне репозитория находится bash-скрипт `iptv` для управления окружением:
```bash
./iptv init # клонировать подпроекты, собрать и запустить
./iptv up # построить и запустить контейнеры
./iptv down # остановить и удалить контейнеры
./iptv rebuild # down + up (с пересборкой образов)
./iptv restart # stop + start
./iptv stop # остановить контейнеры
./iptv start # запустить контейнеры
./iptv purge # удалить контейнеры и образы
./iptv logs <сервис> # логи сервиса
./iptv stats --no-stream # потребление ресурсов
./iptv exec <сервис> <команда> # команда в контейнере
./iptv exec --root <сервис> <команда> # от имени root
```
!!! warning "docker compose v2"
Скрипт использует `docker compose` (v2). `docker-compose` (v1) не поддерживается.
## Ручное управление
Без скрипта `iptv` можно управлять окружением напрямую:
```bash
# Запуск всех сервисов
docker compose up -d --build
# Остановка
docker compose down
// Логи конкретного сервиса
docker compose logs -f checker
// Перезапуск одного сервиса
docker compose restart checker
```
## Сервис `checker`
Контейнер `checker` запускает `iptvc` с командой:
```bash
check --repeat 0 --every ${CHECKER_WAIT:-60}
```
Это означает бесконечную (`--repeat 0`) фоновую проверку всех плейлистов из `playlists.ini` каждые 60 секунд (настраивается через `CHECKER_WAIT`).
Контейнер монтирует:
- `playlists/playlists.ini``/app/playlists.ini`
- `playlists/channels.json``/app/channels.json`
- `iptvc/config.yml``/app/config.yml` (только чтение)
Переменные окружения для кеша передаются автоматически из `.env`.
## Обновление
Чтобы обновить образы и пересобрать контейнеры:
```bash
./iptv rebuild
```
Или вручную:
```bash
docker compose pull
docker compose up -d --build
```
Для обновления только `iptvc`:
```bash
docker compose build checker
docker compose up -d checker
```