186 lines
13 KiB
Markdown
186 lines
13 KiB
Markdown
# Контейнер 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.
|
||
|