--- 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 ```