13 KiB
Контейнер 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 (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 и т.д.).
Команды:
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.
Команды:
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; не публиковать).
Команды:
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‑движка ротация не настроена централизованно.
Запуск и порядок поднятия
- Зайти в каталог:
cd /opt/invidious. - Проверить/при необходимости подредактировать
docker-compose.yml(секцияINVIDIOUS_CONFIG, домен video.katykhin.ru, секреты). - Запуск/перезапуск:
Порядок: сначала поднимается
docker compose up -dinvidious-db, затемinvidious(depends_on с healthcheck), параллельно Companion.
После изменения конфигурации (секция INVIDIOUS_CONFIG или окружения Companion/DB):
cd /opt/invidious && docker compose up -d — конфигурация применяется при перезапуске контейнеров.
Уязвимости и риски
- Секреты и пароли в docker-compose.yml:
ВINVIDIOUS_CONFIGзаданы:- пароли БД (user/password kemal),
invidious_companion_key,hmac_keyи др. чувствительные значения.
Файл лежит только на сервере; его нельзя публиковать. Рекомендуется:- ограничить права на
/opt/invidious/docker-compose.yml(например chmod 600, владелец root), - при переносе конфигурации использовать приватные репозитории или отдельные
.env/секреты.
- PostgreSQL логи без лимитов:
Контейнерinvidious-dbиспользует json-file без max-size/max-file — логи БД со временем могут занять существенный объём, особенно при ошибках или verbose‑режиме (см. TODO). - Доступ к Invidious:
- В LAN сервис доступен по http://192.168.1.107:3000.
- Наружу следует пускать только через NPM (https://video.katykhin.ru), без прямого проброса порта 3000 на интернет.
- Обновления 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 нового образа, миграции, проверка конфигов и обратимости через бэкап БД).
Связь с другими документами
- Архитектура и подключение — таблица контейнеров, домен video.katykhin.ru, схема сети.
- Контейнер 100 (nginx) — NPM, через который проксируется video.katykhin.ru.