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

182 lines
13 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Контейнер 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.
- Отдельных каталогов с логами Invidious на хосте нет — логи идут в stdout контейнера (см. раздел «Логи и ротация»).
**Секреты:** `POSTGRES_USER`, `POSTGRES_PASSWORD`, `INVIDIOUS_COMPANION_KEY`, `HMAC_KEY` берутся из Vaultwarden (объект **INVIDIOUS**). Деплой с хоста Proxmox:
```bash
/root/scripts/deploy-invidious-credentials.sh
```
Скрипт генерирует `.env` из Vaultwarden, атомарно пушит в CT 107, запускает `docker compose up -d --force-recreate`. **Ротация:** сменил пароль/ключи в Vaultwarden → запустил скрипт.
**Команды:**
```bash
# Деплой (с хоста 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.
**Команды:**
```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` — скрипт инициализации БД при первом запуске.
**Переменные окружения:** из `.env` (генерируется `deploy-invidious-credentials.sh` из Vaultwarden).
**Команды:**
```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. С хоста Proxmox: `/root/scripts/deploy-invidious-credentials.sh` (генерирует `.env` из Vaultwarden, пушит в CT 107, запускает compose).
2. Порядок: `invidious-db``invidious` (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:**
- В 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.