Files
homelab-docs/docs/containers/container-107.md
Andrey 16c254510a Update documentation to centralize Vaultwarden integration details and enhance backup scripts
Refactor README, architecture, and backup documentation to emphasize the use of Vaultwarden for credential management across various services. Update scripts for Nextcloud, Gitea, Paperless, and others to reference Vaultwarden for sensitive information. Remove outdated references to previous backup strategies and ensure clarity on credential retrieval processes. This improves security practices and streamlines backup operations.
2026-02-28 00:52:56 +03:00

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.
  • Отдельных каталогов с логами Invidious на хосте нет — логи идут в stdout контейнера (см. раздел «Логи и ротация»).

Секреты: POSTGRES_USER, POSTGRES_PASSWORD, INVIDIOUS_COMPANION_KEY, HMAC_KEY берутся из Vaultwarden (объект INVIDIOUS). Деплой с хоста Proxmox:

/root/scripts/deploy-invidious-credentials.sh

Скрипт генерирует .env из Vaultwarden, атомарно пушит в CT 107, запускает docker compose up -d --force-recreate. Ротация: сменил пароль/ключи в Vaultwarden → запустил скрипт.

Команды:

# Деплой (с хоста Proxmox)
/root/scripts/deploy-invidious-credentials.sh

# Логи
pct exec 107 -- 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оба берутся из .env (генерируется из Vaultwarden).
  • Контейнер запущен с 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 — скрипт инициализации БД при первом запуске.

Переменные окружения: из .env (генерируется deploy-invidious-credentials.sh из Vaultwarden).

Команды:

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.


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

  • Базовая политика LXC: в контейнере настроен logrotate /etc/logrotate.d/homelab-lxc.conf — 14 дней, 50 MB, 5 архивов (системные логи в /var/log). Подробнее: Logrotate — базовая политика homelab.
  • 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. С хоста Proxmox: /root/scripts/deploy-invidious-credentials.sh (генерирует .env из Vaultwarden, пушит в CT 107, запускает compose).
  2. Порядок: invidious-dbinvidious (depends_on с healthcheck), параллельно Companion.

После изменения секретов в Vaultwarden: запустить deploy-invidious-credentials.sh снова.


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

  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

  • Базовая политика logrotate: для системных логов настроена (homelab-lxc.conf — 14 дней, 50 MB, 5 архивов). См. Logrotate — базовая политика homelab.
  • Логи 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 нового образа, миграции, проверка конфигов и обратимости через бэкап БД).

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