Перейти к содержанию

Развёртывание сайта

В этом разделе описан фактический порядок настройки iptvc, кеша и документации.

Базовый вариант развёртывания сервиса

Для запуска приложения не нужен репозиторий с исходниками. Достаточно скачать актуальный релиз для своей платформы.

Чтобы запустить его, достаточно расположить его в любой удобной директории на диске и выполнить команду:

./iptvc serve

Откройте в браузере адрес http://localhost:8800/ и убедитесь в работе сервиса.

Вы должны увидеть ошибку:

Не удалось загрузить список плейлистов. Проверьте наличие файла playlists.ini.

Всё верно. Для полноценной работы приложения в качестве веб-сервиса следует провести минимальные настройки.

Список плейлистов — playlists.ini

Синтаксис описан в этом разделе документации

Без этого файла нет смысла запускать веб-сервис.

Файл можно положить рядом с iptvc.

Как только вы подготовите файл, перезапустите сервис командой выше. Вы должны увидеть список плейлистов на главной странице.

Но все они будут серого цвета и будет доступна только базовая информация о них. Зато будут работать короткие ссылки и их уже можно будет казывать в своём любимом плеере.

Чтобы плейлисты позеленели, нужно запустить приложение в режиме активной проверки плейлистов:

./iptvc serve --check

У этой команды есть и другие аргументы

Полный список указан здесь: Команда serve. Они позволят, при необходимости, очень гибко настроить параметры сайта и режима проверки.

Список правил — channels.json

Синтаксис описан в этом разделе документации

Без этого файла можно жить: веб-сервис будет работать, плейлисты и каналы будут проверяться, короткие ссылки в вашем распоряжении.

Но все каналы будут помечены как #untagged. Это значит, что такие каналы можно будет искать только по названиям. Поиск по жанрам и странам будет недоступен.

Это может быть важно для разных пользователей.

Поэтому варианта здесь три:

  1. продолжать пользоваться сервисом как есть;
  2. подготовить свой файл channels.json согласно его правил синтаксиса;
  3. скачать готовый файл из репозитория: channels.json
Рекомендуется третий вариант

Файл в репозитории периодически обновляется по тем плейлистам, которые широко распространяются в сети. В нём собраны правла для многих телеканалов СНГ и Европы. Хотя и далеко не все. Поэтому, если вы умеете работать с регулярными выражениями, вы можете предложить свои правила в репозиторий.

Файл можно положить туда же — рядом с iptvc.

Когда файл будет готов, перезапустите приложение предыдущей командой.

Поздравляю, теперь у вас свой собственный рабочий агрегатор плейлистов. Вы можете его использовать в домашней сети или на своём ПК — для мониторинга состояния плейлистов или для просмотра.

Конфигурация приложения — config.yml

Синтаксис описан в этом разделе документации

Теперь можете приступить к конфигурации приложения.

Это позволит вам освободить руки и мозг, чтобы не запоминать и не писать длинные аргументы, а также изменять параметры, недоступные через в командной строке.

Файл можно положить туда же — рядом с iptvc.

Но постойте. Вы уже несколько раз перезапустили приложение, а результаты проверки плейлистов сбрасываются. А если вы перезагрузите компьютер, то придётся заново вручную запускать приложение.

Давайте это исправим в следующих шагах.

Docker Развёртывание через Docker

Установка docker осуществляется через brew или согласно официальной документации.

Для MacOS вместо Docker Desktop рекомендую OrbStack

Он быстрый, лёгкий, бесплатный и не жрёт столько ресурсов, как официальное приложение. В общем-то, сама по себе гуйня для докера бесполезна и не нужна, но на маке эта тулза поможет с запуском докера на сокете в пространстве текущего пользователя. К сожалению, иначе на маке докер работать в фоне не может из-за политик безопасности. Либо может, но это потребует кучу гемора на ровном месте.

Для работы iptvc нужно будет скачать ещё один файл из репозитория: compose.yml. Это конфигурация связки контейнеров, и iptvc будет запускаться в одном из них.

Скачивайте и кладите в ту же директорию, где остальные файлы.

Для теста запустите команду:

docker compose up -d --build

Она скачает образы, создаст контейнеры и запустит их. В результате вы сможете открыть в браузере http://localhost:8800/ и увидеть то же самое, что в прошлый раз.

Теперь подключим кэш.

Кэширование результатов

Для этого в compose используется Valkey. Это открытый форк Redis, продолжающий развитие за счёт сообщества и полностью поддерживающий его протокол.

Чтобы запустить связку iptvc + valkey, нужно выполнить два простых шага:

  • создать директорию cache рядом с iptvc
  • внести несколько правок в файл config.yml приложения как показано ниже:

    config.yml
    1
    2
    3
    4
    5
    6
    7
    8
    cache:
      enabled: true #(1)!
      host: cache #(2)!
      port: 6379
      username:
      password:
      db: 0
      ttl: 30
    
    1. О параметре: cache.enabled
    2. О параметре: cache.host

Остановите связку контейнеров и запустите вновь, чтобы применить обновлённую конфигурацию:

docker compose down; docker compose up -d --build

Проверьте состояние контейнеров и журналы:

docker compose ps
docker compose logs -f iptvc

Веб-интерфейс приложения доступен на http://localhost:8800.

Документация доступна на http://localhost:8801.

Для остановки окружения выполните:

docker compose down

Реверс-прокси и SSL

Для публикации приложения на домене с HTTPS настроим реверс-прокси, который будет терминировать SSL и проксировать запросы на контейнеры iptvc (порт 8800) и docs (порт 8801).

site.baseUrl

После настройки домена укажите внешний адрес в config.yml или .env:

site:
  baseUrl: https://example.com

Или через переменную окружения:

SITE_BASE_URL=https://example.com

О параметре: site.baseUrl

Ниже рассмотрены три варианта: nginx, Apache2 и Caddy.

Подготовка

Убедитесь, что:

  • домен example.com (и при необходимости docs.example.com) направляет A-запись на IP сервера;
  • порты 80 и 443 открыты в файрволе;
  • Docker-окружение запущено (docker compose up -d);
  • порты 8800 и 8801 доступны локально (проверьте curl -I http://localhost:8800).

nginx

Установите nginx и Certbot:

sudo apt update
sudo apt install -y nginx certbot python3-certbot-nginx

Создайте конфигурацию для приложения:

/etc/nginx/sites-available/iptvc
server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://127.0.0.1:8800;
        proxy_set_header Host              $host;
        proxy_set_header X-Real-IP         $remote_addr;
        proxy_set_header X-Forwarded-For   $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

При необходимости добавьте отдельный server-блок для документации:

/etc/nginx/sites-available/iptv-docs
server {
    listen 80;
    server_name docs.example.com;

    location / {
        proxy_pass http://127.0.0.1:8801;
        proxy_set_header Host              $host;
        proxy_set_header X-Real-IP         $remote_addr;
        proxy_set_header X-Forwarded-For   $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

Включите конфигурации и проверьте синтаксис:

sudo ln -s /etc/nginx/sites-available/iptvc     /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/iptv-docs /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

Получите SSL-сертификат через Certbot:

sudo certbot --nginx -d example.com -d docs.example.com

Certbot автоматически изменит конфигурацию nginx, добавит HTTPS и настройке редирект с HTTP на HTTPS.

Проверьте автоматическое продление:

sudo certbot renew --dry-run

Apache2

Установите Apache2 и Certbot:

sudo apt update
sudo apt install -y apache2 certbot python3-certbot-apache

Включите необходимые модули:

sudo a2enmod proxy proxy_http ssl rewrite headers
sudo systemctl restart apache2

Создайте конфигурацию виртуального хоста для приложения:

/etc/apache2/sites-available/iptvc.conf
<VirtualHost *:80>
    ServerName example.com

    ProxyPreserveHost On
    ProxyPass        / http://127.0.0.1:8800/
    ProxyPassReverse / http://127.0.0.1:8800/

    RequestHeader set X-Forwarded-Proto "http"
    RequestHeader set X-Forwarded-Port  "80"
</VirtualHost>

При необходимости добавьте виртуальный хост для документации:

/etc/apache2/sites-available/iptv-docs.conf
<VirtualHost *:80>
    ServerName docs.example.com

    ProxyPreserveHost On
    ProxyPass        / http://127.0.0.1:8801/
    ProxyPassReverse / http://127.0.0.1:8801/

    RequestHeader set X-Forwarded-Proto "http"
    RequestHeader set X-Forwarded-Port  "80"
</VirtualHost>

Включите конфигурации и проверьте синтаксис:

sudo a2ensite iptvc iptv-docs
sudo apache2ctl configtest
sudo systemctl reload apache2

Получите SSL-сертификат через Certbot:

sudo certbot --apache -d example.com -d docs.example.com

Certbot автоматически создаст HTTPS-виртуальные хосты и настроит редирект с HTTP на HTTPS.

Проверьте автоматическое продление:

sudo certbot renew --dry-run

Caddy

Caddy — современный веб-сервер с автоматическим управлением HTTPS-сертификатами через Let's Encrypt и ZeroSSL. В отличие от nginx и Apache2, Caddy не требует Certbot: сертификаты запрашиваются и продлеваются автоматически при старте.

Почему Caddy?

Caddy единственный из рассмотренных серверов получает и продлевает TLS-сертификаты без внешних инструментов. Достаточно указать доменное имя — и Caddy сам запросит сертификат, настроит редирект с HTTP на HTTPS и будет продлевать его до истечения. Это сильно упрощает эксплуатацию: меньше движущихся частей, меньше шагов настройки, меньше поводов для ошибок.

Установите Caddy согласно официальной документации:

sudo apt update
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https curl
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo apt update
sudo apt install -y caddy

Создайте или отредактируйте конфигурационный файл Caddyfile:

/etc/caddy/Caddyfile
1
2
3
4
5
6
7
example.com {
    reverse_proxy 127.0.0.1:8800
}

docs.example.com {
    reverse_proxy 127.0.0.1:8801
}

Проверьте конфигурацию и перезапустите Caddy:

sudo caddy validate --config /etc/caddy/Caddyfile
sudo systemctl reload caddy

При первом запуске Caddy автоматически запросит SSL-сертификаты для указанных доменов, настроит редирект с HTTP на HTTPS и будет продлевать сертификаты до истечения срока действия.

Проверьте статус сервиса:

sudo systemctl status caddy

Если потребуется просмотреть журналы:

sudo journalctl -u caddy -f

Проверка

После настройки откройте в браузере:

  • https://example.com — веб-интерфейс iptvc;
  • https://docs.example.com — сайт документации.

Убедитесь, что сертификат валиден, а редирект с HTTP на HTTPS работает.

Ограничение портов

После настройки реверс-прокси можно убрать публикацию портов 8800 и 8801 наружу в compose.yml, оставив их доступными только локально. Это предотвратит прямой доступ к сервисам в обход прокси.

Сборка образа iptvc

Для сборки и публикации образа используйте цели Makefile в каталоге iptvc/:

cd iptvc

# Сборка одноархитектурного образа (linux/amd64 по умолчанию)
make image

# Сборка под arm64
make image GOARCH=arm64

# Сборка с указанием тега
make image IMAGE_TAG=v1.2.3

Для публикации multi-arch манифеста (linux/amd64 + linux/arm64):

make image-all

Цель image-all всегда отправляет образ в registry — это ограничение docker buildx: multi-arch манифест нельзя загрузить в локальный Docker daemon.

Перед публикацией войдите в registry, если это требуется вашей настройкой:

docker login git.axenov.dev

Рабочее дерево Git

Версия и коммит вшиваются в бинарь из git describe и git rev-parse на хосте в момент запуска make. Перед сборкой убедитесь, что рабочая копия чистая и находится на нужном теге или коммите.

Обновление

После изменения конфигурации или исходного кода пересоберите и перезапустите сервисы:

docker compose up -d --build

Чтобы пересобрать только приложение iptvc:

docker compose build iptvc
docker compose up -d iptvc

Чтобы использовать опубликованный образ вместо локальной сборки, загрузите его и пересоздайте сервис:

docker compose pull iptvc
docker compose up -d iptvc

Обновление документации выполняется пересборкой сервиса docs:

docker compose build docs
docker compose up -d docs

Диагностика

Для просмотра журналов отдельных сервисов используйте:

docker compose logs -f iptvc
docker compose logs -f cache
docker compose logs -f docs

Для проверки конфигурации Compose выполните:

docker compose config

Если iptvc не подключается к кешу, проверьте, что в .env параметр CACHE_HOST имеет значение cache, а сервис cache запущен.