BGPVR Ръководство за оператора
Ръководство за оператора

Инсталация

BGPVR работи като Docker контейнер. Приложението не пази състояние — всичко важно е в томовете, които монтирате.

На тази страница
  1. Минимален compose файл
  2. Томове — пътищата в контейнера са задължителни
  3. Обновяване на BGPVR до последната версия
  4. Хардуер
  5. Постоянен режим на NVIDIA (persistence mode)

Минимален compose файл

services:
  bgpvr:
    image: ghcr.io/bgpvr/bgpvr:latest
    container_name: bgpvr
    restart: unless-stopped
    network_mode: host
    environment:
      - BGPVR_DATA=/data
      - WEB_PORT=8095
    volumes:
      - /srv/bgpvr/data:/data
      - /srv/bgpvr/recordings:/data/dvr
      - /srv/bgpvr/picons:/data/picons
    devices:
      - /dev/dvb:/dev/dvb          # DVB тунери
      # - /dev/bus/usb:/dev/bus/usb  # USB четци за карти
      # - /dev/dri:/dev/dri          # Intel/AMD хардуерно прекодиране

За NVIDIA прекодиране добавете runtime: nvidia и NVIDIA_DRIVER_CAPABILITIES=compute,utility,video.

Зад обратно прокси: впишете го в BGPVR_TRUSTED_PROXIES

Ограниченията за вход и другите ограничения по адрес броят всеки посетител по адреса, който обратното прокси подава в X-Forwarded-For. Кажете на BGPVR кое прокси е ваше в environment на compose файла: BGPVR_TRUSTED_PROXIES=127.0.0.1/32 за nginx на същата машина, BGPVR_TRUSTED_PROXIES=<неговият IP>/32 за прокси другаде в мрежата ви или BGPVR_TRUSTED_PROXIES=none, ако нямате прокси. Администратор може да зададе същия списък в настройката trusted_proxy_cidrs през API за настройки; променливата на средата има предимство. Редът „Client address: …“ в лога при стартиране показва какво е в сила, а BGPVR записва подсказка с адреса на прокси, което още не е посочено.

Томове — пътищата в контейнера са задължителни

Пътищата на хоста избирате вие, но пътищата в контейнера трябва да съвпадат точно и да се виждат от всички BGPVR услуги.

Път в контейнераСъдържа
/dataБаза данни, настройки, HLS, логове — това не бива да губите
/data/dvrЗаписи (често на NAS)
/data/vodVOD библиотека
/data/piconsЛога на канали
/data/ai_outputМиниатюри, субтитри, AI отчети
Никога не използвайте Docker named volumes за /data

Използвайте bind mount към реална директория на хоста. Named volumes затрудняват значително архивирането, проверката и миграцията.

Проверете след инсталация

Отворете Наблюдение → Технически → Съхранение в конзолата. Всички пътища трябва да се виждат. Ако някой показва „Needs Mount“, поправете compose файла, преди да разчитате на DVR обработка, миниатюри или VOD.

Обновявайте само когато нищо не се записва

Преди да изтеглите нов образ и да пресъздадете контейнера, проверете, че не тече запис (DVR показва какво се записва) и че няма AI задача в обработка (Наблюдение → Технически → AI опашка или броячът Processing в Настройки → AI Processing → Processing Queue). Чакащите задачи преживяват рестарта. Запис, прекъснат от рестарт, продължава като втори файл с дупка. Първото стартиране на 2.9.275 или по-нова версия премества програмните данни в отделна база (epg.db), затова предвидете няколко минути престой.

Обновяване на BGPVR до последната версия

Обновяването означава да изтеглите новите образи и да пресъздадете контейнерите. Всичко, което BGPVR пази (настройки, абонати, канали, записи), е в папките, които сте монтирали, и остава непроменено. Правете го в спокоен момент.

  1. Уверете се, че нищо не се записва. Проверете DVR и AI опашката, както е описано в предупреждението по-горе.
  2. Направете резервно копие. В конзолата отворете Архивиране и натиснете „Backup now“ (как), след което свалете („Download“) новия файл на друг компютър (как). Копието съдържа базата данни и двата тайни ключа. Записите, VOD файловете и логата на каналите не са в него.
  3. Запишете версията, която използвате. Версията на BGPVR е малкият ред най-долу в страничното меню, под Изход.
  4. Изтеглете и рестартирайте. На сървъра, в папката с Вашите файлове docker-compose.yml и .env, изпълнете:
    docker compose pull
    docker compose up -d
    Първата команда сваля най-новите образи на всяка услуга във файла, втората пресъздава контейнерите, които са се променили. Ако във Вашия файл е посочен таг на версия вместо latest, първо сменете тага.
  5. Изчакайте и влезте. Сървърът се рестартира, затова потоците на живо спират за кратко, а запис, който тече в този момент, продължава като втори файл, с пропуск. След обновяване първото стартиране може да отнеме малко повече, докато BGPVR обнови базата си.
  6. Проверете. Редът най-долу в страничното меню показва новата версия, а Лиценз показва Вашия план както преди.

Отдалечените възли се обновяват от конзолата: възел, чийто агент е по-стар от този на сървъра, показва „Обнови агента“ на страница Възли (как). Настройките на тунерите и записите на възела никога не се пипат.

Ако нещо не стане

  • Конзолата се отваря, но показва грешни данни или настройки: възстановете резервното копие от стъпка 2. Отворете Архивиране, натиснете „Restore“ на реда му и въведете RESTORE (как). Така се връща базата данни, а не записите Ви.
  • Конзолата не се отваря: на сървъра изпълнете docker compose ps и docker compose logs --tail 100 bgpvr, след което се свържете с поддръжката на BGPVR и изпратете изведеното.

Хардуер

  • Тунери: DVB-C/T/S адаптери през /dev/dvb.
  • Прекодиране: NVIDIA NVENC или Intel/AMD VAAPI/QSV през /dev/dri. По избор — работи и само с процесор.
  • Скоростта на диска е по-важна от размера. Бавни дискове под /data блокират записа, което се проявява като високо натоварване, а не като явна дискова грешка.

Няма формални минимални изисквания. За ориентир: една производствена инсталация ограничава AI обработката до 6 от 16 ядра, за да не отнема ресурси от живото излъчване, а всеки уеб зрител на живо заема около 40 MB RAM за сегментите си (вижте Настройки → Tuners & Sources → Web Player Quality → Segment storage).

Образи и watchdog

Образите ghcr.io/bgpvr/bgpvr, bgpvr-ai и bgpvr-node се изтеглят без вход. Условията за оператори са на bgpvr.com/terms. Контейнерът bgpvr-watchdog проверява приложението всяка минута и изпраща сигнали според Настройки → Notifications. След 3 пропуснати проверки и 45-секундно потвърждение рестартира контейнера bgpvr — най-много веднъж на 30 минути, и то само ако /var/run/docker.sock е монтиран в watchdog контейнера; без него само изпраща сигнали. Изключва се с настройката watchdog_self_heal.

Постоянен режим на NVIDIA (persistence mode)

Без него драйверът на NVIDIA изключва картата, щом никоя програма не я използва, и я стартира отново за следващата: всеки олекотен поток на запис (и проверката на картата преди него) чака около секунда повече. Конзолата го показва за всяка карта в Наблюдение → Технически → Изложен хардуер (включен ✓ или изключен), а когато някоя карта е изключена — и командата по-долу. Това е настройка на драйвера на NVIDIA на хоста: контейнерът на BGPVR само я чете.

Проверка на самия сървър (хоста, не в контейнера):

nvidia-smi --query-gpu=index,name,persistence_mode --format=csv

Бързият начин: скриптът, който идва с BGPVR (Ubuntu, Debian, Proxmox и други хостове със systemd и драйвера на NVIDIA). Включва постоянния режим веднага и след всяко рестартиране и показва всяка карта преди → след. Вземете го от образа на BGPVR (не от работещия контейнер, чиито файлове приложението може да промени) и го прочетете, преди да го пуснете със sudo:

docker run --rm --entrypoint cat "$(docker inspect -f '{{.Image}}' bgpvr)" \
    /app/scripts/host/gpu_persistence.sh > gpu_persistence.sh
less gpu_persistence.sh             # прочетете го първо
sudo bash gpu_persistence.sh enable     # status: показва · disable: връща

Същото на ръка (Ubuntu / Debian с драйвера на NVIDIA):

  1. Включване веднага: sudo nvidia-smi -pm 1
  2. Включен и след рестартиране: създайте /etc/systemd/system/nvidia-persistenced.service.d/bgpvr-persistence.conf със
    [Service]
    ExecStart=
    ExecStart=/usr/bin/nvidia-persistenced --user nvidia-persistenced --persistence-mode --verbose
    Празният ExecStart= изчиства реда на дистрибуцията (в Ubuntu той казва --no-persistence-mode). Махнете --user nvidia-persistenced, ако getent passwd nvidia-persistenced не извежда нищо.
  3. Заредете го: sudo systemctl daemon-reload && sudo systemctl enable nvidia-persistenced && sudo systemctl restart nvidia-persistenced
  4. Проверете: проверката по-горе показва Enabled за всяка карта, и след рестартиране; конзолата показва включен ✓.
  5. Връщане: sudo rm /etc/systemd/system/nvidia-persistenced.service.d/bgpvr-persistence.conf, после sudo systemctl daemon-reload && sudo systemctl restart nvidia-persistenced (връща се стойността по подразбиране на услугата; в Ubuntu тя е изключено)

Други системи

  • Unraid няма systemd: изпълнете веднъж nvidia-smi -pm 1 и добавете този ред в /boot/config/go, който се изпълнява при всяко стартиране.
  • TrueNAS SCALE връща системните си файлове при обновяване: добавете nvidia-smi -pm 1 като команда Post Init в System → Advanced → Init/Shutdown Scripts.
  • Proxmox и виртуални машини: направете го там, където работи драйверът на NVIDIA: във виртуалната машина, когато картата е подадена към нея, или на хоста на Proxmox, когато контейнери делят картата.
  • Synology DSM: непроверено. Където nvidia-smi работи през SSH, задача при стартиране в Control Panel → Task Scheduler, която изпълнява nvidia-smi -pm 1 като root, може да свърши работа; иначе го оставете изключен (олекотената версия пак работи, тръгва около секунда по-бавно).
  • Docker Desktop и Windows (WSL): драйверът на Windows управлява картата; тук няма нищо за правене.