--- icon: material/upload-network tags: ["iptvc", "docker", "deploy"] --- # :material-upload-network: Развёртывание и доставка обновлений В этом разделе описан фактический порядок настройки окружения `iptv` с приложением `iptvc`, хранилищем KeyDB и сайтом документации. ## Требования { id="requirements" } - [Docker](https://docs.docker.com/engine/install/) с плагином `docker compose` версии 2 - Git и доступ к репозиторию `git.axenov.dev/IPTV` - Права на запись в каталог данных KeyDB - Доступ к registry `git.axenov.dev`, если вы публикуете образ `iptvc` !!! warning "Только docker compose v2" Используйте команду `docker compose`. Устаревшая команда `docker-compose` в этом сценарии не поддерживается. ## Подготовка репозитория { id="repository" } Клонируйте основной репозиторий и перейдите в его каталог: ```bash git clone https://git.axenov.dev/IPTV.git cd IPTV ``` В корне проекта должны находиться `compose.yml`, `.env`, `config.yml`, `playlists.ini`, `channels.json` и каталог `docker/keydb`. Исходный код приложения располагается в `iptvc/`, а документации — в `docs/`. ## Настройка файлов { id="configuration" } Создайте файлы локальной конфигурации на основе примеров: ```bash cp .env.example .env cp iptvc/config.yml.example config.yml ``` Отредактируйте `config.yml`. В контейнере `iptvc` он подключается как `/app/config.yml`. Минимально проверьте следующие параметры: - `app.playlists` — путь к файлу плейлистов; - `app.tags` — путь к файлу тегов каналов; - `server.host` и `server.port` — адрес и порт веб-интерфейса; - `cache.enabled` и параметры `cache` — использование KeyDB; - `site.base-url` — внешний адрес приложения. Скопируйте входные данные плейлистов в корень окружения: ```bash cp /path/to/playlists.ini ./playlists.ini cp /path/to/channels.json ./channels.json ``` Эти файлы монтируются в контейнер как `/app/playlists.ini` и `/app/channels.json`. В `.env` задаются параметры приложения из `iptvc/.env.example`, включая `APP_URL`, `SERVER_PORT`, `CACHE_ENABLED`, `CACHE_HOST`, `CACHE_PORT`, `CACHE_DB` и `CACHE_TTL`. Для подключения к KeyDB из контейнера укажите имя сервиса `keydb` в `CACHE_HOST`, а не `localhost`. ## Состав окружения { id="services" } Файл `compose.yml` запускает три сервиса: | Сервис | Образ | Назначение | | --- | --- | --- | | `iptvc` | `git.axenov.dev/iptv/iptvc:latest` | Веб-интерфейс и фоновая проверка плейлистов | | `keydb` | `eqalpha/keydb:latest` | Кеш результатов проверки | | `docs` | `git.axenov.dev/iptv/iptv-docs:latest` | Сайт документации | Сервис `iptvc` публикует порт `8800`, а `docs` — порт `8801`. KeyDB публикует порт, заданный `KEYDB_PORT`, по умолчанию `6379`. Сервис `iptvc` зависит от `keydb` и запускается с командой `serve --check --repeat 0`. Это поднимает веб-сервер и запускает бесконечную фоновую проверку. ## Запуск { id="start" } После подготовки файлов соберите и запустите окружение из корня проекта: ```bash docker compose up -d --build ``` Проверьте состояние контейнеров и журналы: ```bash docker compose ps docker compose logs -f iptvc ``` Веб-интерфейс приложения доступен на `http://localhost:8800`. Документация доступна на `http://localhost:8801`. Для остановки окружения выполните: ```bash docker compose down ``` ## Сборка образа iptvc { id="image" } Для публикации образа используйте скрипт `iptvc/build-docker-image.sh`. Скрипт вычисляет версию из Git, собирает образы с тегами `iptvc:<тег>` и `git.axenov.dev/iptv/iptvc:<тег>`, а затем отправляет registry-тег в registry: ```bash cd iptvc ./build-docker-image.sh latest ``` Для публикации релизного тега: ```bash ./build-docker-image.sh v1.2.3 ``` По умолчанию скрипт собирает Linux-образ для `amd64`. Платформу можно изменить переменными окружения: ```bash GOOS=linux GOARCH=arm64 ./build-docker-image.sh v1.2.3 ``` Перед публикацией войдите в registry, если это требуется вашей настройкой: ```bash docker login git.axenov.dev ``` !!! warning "Рабочее дерево Git" Скрипт переключается на Git-тег, переданный первым аргументом, или на тег, возвращённый `git describe`. Перед запуском сохраните локальные изменения и убедитесь, что нужный тег существует. ## Обновление { id="update" } После изменения конфигурации или исходного кода пересоберите и перезапустите сервисы: ```bash docker compose up -d --build ``` Чтобы пересобрать только приложение `iptvc`: ```bash docker compose build iptvc docker compose up -d iptvc ``` Чтобы использовать опубликованный образ вместо локальной сборки, загрузите его и пересоздайте сервис: ```bash docker compose pull iptvc docker compose up -d iptvc ``` Обновление документации выполняется пересборкой сервиса `docs`: ```bash docker compose build docs docker compose up -d docs ``` ## Диагностика { id="diagnostics" } Для просмотра журналов отдельных сервисов используйте: ```bash docker compose logs -f iptvc docker compose logs -f keydb docker compose logs -f docs ``` Для проверки конфигурации Compose выполните: ```bash docker compose config ``` Если `iptvc` не подключается к кешу, проверьте, что в `.env` параметр `CACHE_HOST` имеет значение `keydb`, а сервис `keydb` запущен.