Files
docs/content/iptvc/site/deploy.md
T
2026-07-15 20:01:26 +08:00

124 lines
5.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
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
```