# Контейнер 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 (из [архитектуры](../architecture/architecture.md)) - **Доступ:** с 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 и т.д.). **Команды:** ```bash 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. **Команды:** ```bash 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; не публиковать). **Команды:** ```bash 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](../maintenance/logrotate/README.md). - **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. Запуск/перезапуск: ```bash 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:** - В LAN сервис доступен по http://192.168.1.107:3000. - Наружу следует пускать только через NPM (https://video.katykhin.ru), без прямого проброса порта 3000 на интернет. 4. **Обновления Invidious:** В репозитории `/opt/invidious` лежит копия официального кода. Образ используется `latest` — при обновлении нужно внимательно следить за совместимостью БД и параметров, и перед апдейтом делать бэкап БД (см. TODO по бэкапам). --- ## TODO по контейнеру 107 - [x] **Базовая политика logrotate:** для системных логов настроена (homelab-lxc.conf — 14 дней, 50 MB, 5 архивов). См. [Logrotate — базовая политика homelab](../maintenance/logrotate/README.md). - [ ] **Логи 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 нового образа, миграции, проверка конфигов и обратимости через бэкап БД). --- ## Связь с другими документами - [Архитектура и подключение](../architecture/architecture.md) — таблица контейнеров, домен video.katykhin.ru, схема сети. - [Контейнер 100 (nginx)](container-100.md) — NPM, через который проксируется video.katykhin.ru.