Files
homelab-docs/docs/containers/container-107.md

13 KiB
Raw Blame History

Контейнер 107 (Invidious): Invidious, Companion, PostgreSQL

Подробное описание LXC-контейнера 107 на Proxmox (192.168.1.107): Invidious (альтернативный фронтенд YouTube), Invidious Companion и PostgreSQL 14. Домен: video.katykhin.ru.


Общие сведения

  • Хостнейм: misc
  • IP: 192.168.1.107/24
  • ОС: Debian 12 (bookworm)
  • Ресурсы: 1 core, 2 GB RAM (из архитектуры)
  • Доступ: с Proxmox — pct exec 107 -- bash или по SSH на 192.168.1.107, если настроен.

Диск контейнера: 15 GB, занято ~2.1 GB (16%). Основной объём: образы и тома Docker (~0.8 GB), код Invidious в /opt/invidious/ (~11 MB), данные PostgreSQL (~51 MB). Запас по месту большой, но при росте логов и БД всё равно стоит следить за заполнением (см. раздел «Логи и ротация» и TODO).


Доступ и логины

  • Debian (CT 107): логин root (пароль — в менеджере паролей или как настраивал при установке).
  • Invidious (веб): http://192.168.1.107:3000 (или через NPM: https://video.katykhin.ru). Пользовательские аккаунты и настройки создаются в самом Invidious.

Сервисы (Docker Compose)

Один проект: /opt/invidious/docker-compose.yml (внутри gitрепозитория Invidious: /opt/invidious/). Сеть: invidious_default (bridge).

Контейнер Образ Порты (хост) Назначение
invidious-invidious-1 quay.io/invidious/invidious:latest 3000 Веб-интерфейс Invidious, API
invidious-companion-1 quay.io/invidious/invidious-companion — (8282 внутри) Companionсервис для запросов к YouTube
invidious-invidious-db-1 postgres:14 БД Invidious

1. Invidious (основной сервис)

Каталог: /opt/invidious/
Compose: docker-compose.yml (лежит в корне репозитория).

Порты: 3000 (хост) → 3000 (контейнер). NPM (контейнер 100) проксирует https://video.katykhin.ru → 192.168.1.107:3000.

Тома и конфиги:

  • Invidious не использует отдельные bindтома для конфигов/данных — данные хранятся в PostgreSQL (invidious_postgresdata), а конфиг задаётся через переменную INVIDIOUS_CONFIG в compose (inline YAML).
  • Отдельных каталогов с логами Invidious на хосте нет — логи идут в stdout контейнера (см. раздел «Логи и ротация»).

Основная конфигурация (в docker-compose.yml, секция environment / INVIDIOUS_CONFIG):

  • db: dbname=invidious, user=kemal, password=kemal, host=invidious-db, port=5432, check_tables=true.
  • invidious_companion: URL сервиса companion (http://companion:8282/companion).
  • invidious_companion_key и SERVER_SECRET_KEY (в companion) — общий секрет между Invidious и Companion (сейчас заданы прямо в compose; не выкладывать в публичный репозиторий).
  • external_port: 443, domain: "video.katykhin.ru", https_only: true — Invidious знает про внешний домен и порт, отдаёт ссылки на https.
  • Прочие опции (feeds, captions, hmac_key, default_user_preferences и т.д.).

Команды:

cd /opt/invidious && docker compose up -d
docker logs invidious-invidious-1
curl -s http://127.0.0.1:3000/api/v1/stats

2. Invidious Companion

Образ: quay.io/invidious/invidious-companion:latest.
Порты: 8282 (внутри docker-сети). НСЛУШАЕТ напрямую на хосте; Invidious обращается к нему по имени companion в сети invidious_default.

Тома:

  • volume companioncache/var/tmp/youtubei.js (кэш jsресурсов YouTube / youtubei).

Безопасность:

  • SERVER_SECRET_KEY совпадает с invidious_companion_key в конфиге Invidious — это shared secret для обмена.
  • Контейнер запущен с read_only: true, cap_drop: [ALL], no-new-privileges:true — хорошая практика sandboxing.

Команды:

docker logs invidious-companion-1

3. PostgreSQL (invidious-db)

Образ: postgres:14.
Том: volume postgresdata/var/lib/postgresql/data. На хосте: /var/lib/docker/volumes/invidious_postgresdata/_data (~51 MB).
Дополнительные mounts:

  • /opt/invidious/config/sql/config/sql — SQLскрипты инициализации/миграций из репозитория Invidious (~40 KB).
  • /opt/invidious/docker/init-invidious-db.sh/docker-entrypoint-initdb.d/init-invidious-db.sh — скрипт инициализации БД при первом запуске.

Переменные окружения: POSTGRES_DB=invidious, POSTGRES_USER=kemal, POSTGRES_PASSWORD=kemal (заданы в compose; не публиковать).

Команды:

docker exec invidious-invidious-db-1 pg_isready -U kemal
docker exec invidious-invidious-db-1 psql -U kemal -d invidious -c '\\dt'

Порты (сводка на хосте)

Порт Сервис / примечание
3000 Invidious (веб, API)

Companion и PostgreSQL доступны только внутри docker-сети invidious_default.


Логи и ротация

  • Invidious и Companion: логи идут в stdout контейнеров и сохраняются драйвером Docker json-file. В compose для invidious и companion заданы опции:
    • max-size: "1G", max-file: "4" — максимум ~4 GB логов на контейнер. На момент проверки общий размер /var/lib/docker ~774 MB, запас по логам большой.
  • PostgreSQL: контейнер invidious-db использует json-file без ограничений (Config:{}) — логи БД могут разрастаться (см. TODO).

Системный logrotate в CT — только стандартные правила (apt, dpkg, btmp, wtmp). Отдельных правил для Docker или PostgreSQL нет.

Вывод: для Invidious и Companion уже есть базовая защита от разрастания логов (1G×4), но для БД и общего Dockerдвижка ротация не настроена централизованно.


Запуск и порядок поднятия

  1. Зайти в каталог: cd /opt/invidious.
  2. Проверить/при необходимости подредактировать docker-compose.yml (секция INVIDIOUS_CONFIG, домен video.katykhin.ru, секреты).
  3. Запуск/перезапуск:
    docker compose up -d
    
    Порядок: сначала поднимается invidious-db, затем invidious (depends_on с healthcheck), параллельно Companion.

После изменения конфигурации (секция INVIDIOUS_CONFIG или окружения Companion/DB):
cd /opt/invidious && docker compose up -d — конфигурация применяется при перезапуске контейнеров.


Уязвимости и риски

  1. Секреты и пароли в docker-compose.yml:
    В INVIDIOUS_CONFIG заданы:
    • пароли БД (user/password kemal),
    • invidious_companion_key,
    • hmac_key и др. чувствительные значения.
      Файл лежит только на сервере; его нельзя публиковать. Рекомендуется:
    • ограничить права на /opt/invidious/docker-compose.yml (например chmod 600, владелец root),
    • при переносе конфигурации использовать приватные репозитории или отдельные .env/секреты.
  2. PostgreSQL логи без лимитов:
    Контейнер invidious-db использует json-file без max-size/max-file — логи БД со временем могут занять существенный объём, особенно при ошибках или verboseрежиме (см. TODO).
  3. Доступ к Invidious:
  4. Обновления Invidious:
    В репозитории /opt/invidious лежит копия официального кода. Образ используется latest — при обновлении нужно внимательно следить за совместимостью БД и параметров, и перед апдейтом делать бэкап БД (см. TODO по бэкапам).

TODO по контейнеру 107

  • Логи PostgreSQL: Добавить ограничение логов для контейнера invidious-invidious-db-1:
    либо через logging в docker-compose.yml (аналогично invidious/companion, но с меньшим лимитом, например max-size: "200m", max-file: "5"), либо через глобальный /etc/docker/daemon.json. После изменения — перезапустить контейнер.
  • Права на конфиги: Ограничить доступ к docker-compose.yml и, при необходимости, к другим файлам с секретами (chmod 600, владелец root), убедиться, что эти файлы не попадают в публичные репозитории.
  • Мониторинг диска: Сейчас используется ~2.1 GB из 15 GB, но при росте логов/БД стоит настроить оповещение при заполнении >80% и периодически проверять du -sh /var/lib/docker /var/lib/docker/volumes/invidious_postgresdata/_data.
  • Резервное копирование: Регулярный бэкап критичных данных (оценка размеров на момент документации): - /var/lib/docker/volumes/invidious_postgresdata/_data — БД Invidious (~51 MB).
    Рекомендуемый способ — логический дамп: bash docker exec invidious-invidious-db-1 pg_dump -U kemal invidious > backup_invidious_$(date +%Y%m%d).sql и хранить дампы вне контейнера (на Proxmoxхосте/внешнем хранилище). - /opt/invidious — код Invidious, docker-compose.yml, config/sql, docker/init-invidious-db.sh (~11 MB).
    Важно сохранить локальные правки (особенно секцию INVIDIOUS_CONFIG и домен/HTTPSнастройки). - /var/lib/docker/volumes/invidious_companioncache/_data — кэш Companion (~4 KB). Бэкап не критичен; при потере восстановится автоматически.
  • Документация по обновлению: Зафиксировать отдельной заметкой процедуру апдейта Invidious (pull нового образа, миграции, проверка конфигов и обратимости через бэкап БД).

Связь с другими документами