Files
docs/content/iptvc/site/deploy.md
T

192 lines
7.2 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: Развёртывание и доставка обновлений
В этом разделе описан фактический порядок настройки окружения `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`, включая `SITE_BASE_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` запущен.