Remove deprecated files related to homelab architecture, container context, and various scripts. This cleanup includes the removal of configuration files for Nextcloud, Gitea, and VPN setups, as well as documentation files that are no longer relevant. This helps streamline the project and eliminate outdated references.
This commit is contained in:
183
docs/containers/container-107.md
Normal file
183
docs/containers/container-107.md
Normal file
@@ -0,0 +1,183 @@
|
||||
# Контейнер 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`.
|
||||
|
||||
---
|
||||
|
||||
## Логи и ротация
|
||||
|
||||
- **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
|
||||
|
||||
- [ ] **Логи 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.
|
||||
|
||||
Reference in New Issue
Block a user