Files
homelab-docs/docs/containers/container-108.md

12 KiB
Raw Blame History

Контейнер 108 (Galene): Galene видеоконференции

Подробное описание LXC-контейнера 108 на Proxmox (192.168.1.108): сервер видеоконференций Galene (домен call.katykhin.ru). STUN/TURN вынесены на внешний VPS (coTURN), в контейнере — только Galene как systemd-сервис, без Docker.


Общие сведения

  • Хостнейм: galene
  • IP: 192.168.1.108/24
  • ОС: Debian 12 (bookworm)
  • Ресурсы: 1 core, 256 MB RAM (из архитектуры)
  • Доступ: с Proxmox — pct exec 108 -- bash или по SSH на 192.168.1.108, если настроен.

Диск контейнера: ~4 GB, занято ~1.2 GB (33%). Основной объём: система, код Galene в /opt/galene/ (~6.6 MB), данные в /opt/galene-data/ (~1.7 MB). Логи — в systemd journal (~8 MB). Следить за местом и ротацией journal (см. раздел «Логи и ротация» и TODO).


Доступ и логины

  • Debian (CT 108): логин root, пароль Galene108!.
  • Galene (веб): https://call.katykhin.ru (через NPM → 192.168.1.108:8443). Вход в группы — по паролям, заданным в конфигах групп в /opt/galene-data/groups/ (операторы и участники).

Сервисы (systemd, без Docker)

Сервис Назначение Порт (хост)
galene.service Galene Videoconference Server (galene-server) 8443 (HTTP)
coturn Не запущен (disabled) — TURN на внешнем VPS
ssh, cron, postfix@- Стандартные сервисы CT 22, 25

Galene слушает на 0.0.0.0:8443 по HTTP (-insecure). TLS обеспечивает NPM на контейнере 100 (https://call.katykhin.ru → proxy на 192.168.1.108:8443).


1. Galene (galene.service)

Unit: /etc/systemd/system/galene.service
Бинарник: /opt/galene-server (собран из исходников в /opt/galene/).
Рабочий каталог: /opt/galene-data.
Параметры запуска: -http 0.0.0.0:8443 -insecure -turn "" -static /opt/galene-data/static

  • -insecure — HTTP без TLS (TLS на NPM).
  • -turn "" — встроенный TURN не используется; ICE-серверы заданы в data/ice-servers.json (внешний coTURN на VPS).
  • Статика отдаётся из /opt/galene-data/static.

Структура данных на хосте:

  • /opt/galene-data/ — данные и конфиги:

    • data/ — глобальные настройки:
      • config.json — proxyURL (например https://call.katykhin.ru/).
      • ice-servers.json — список STUN/TURN (URL, username, credential для TURN на VPS). Содержит креды TURN — не публиковать.
      • cert.pem, key.pem — локальные сертификаты (для внутренних нужд; внешний HTTPS через NPM).
    • groups/ — конфиги групп (по одному JSON на группу): имя файла вида <groupname>-<suffix>.json. В каждом файле: пользователи и пароли (операторы/участники), wildcard-user, max-clients, allow-recording, autolock и т.д. Пароли пользователей групп хранятся в этих файлах — не публиковать.
    • static/ — копия/кастомизация статики из /opt/galene/static/ (HTML, CSS, JS для веб-клиента).
  • /opt/galene/ — исходный код Galene (репозиторий), бинарник galene-server собирается отсюда. При обновлении: пересборка и перезапуск сервиса.

Команды:

systemctl status galene
systemctl restart galene
journalctl -u galene.service -f
curl -s -k https://192.168.1.108:8443/  # или через NPM: https://call.katykhin.ru/

2. coTURN (не используется в CT)

Сервис coturn в контейнере установлен, но disabled и inactive. STUN/TURN для Galene вынесены на внешний сервер (VPS Миран: 185.147.80.190, см. VPS Миран: боты и STUN/TURN). Клиенты получают список STUN/TURN из ice-servers.json в /opt/galene-data/data/.

При необходимости поднять TURN локально — настроить coturn и указать его в ice-servers.json или в параметрах galene-server.


Порты (сводка на хосте)

Порт Сервис / примечание
8443 Galene (HTTP, TLS на NPM)
22 SSH
25 Postfix (localhost)

Логи и ротация

  • Базовая политика LXC: в контейнере настроен logrotate /etc/logrotate.d/homelab-lxc.conf — 14 дней, 50 MB, 5 архивов (системные логи в /var/log). Подробнее: Logrotate — базовая политика homelab.
  • Galene: логи пишутся в stdout/stderr и попадают в systemd journal (journalctl -u galene.service). Отдельных файловых логов в /opt/galene-data/ нет. На момент проверки журнал занимает ~8 MB.
  • Ротация journal: управляется настройками journald (например /etc/systemd/journald.conf: SystemMaxUse, MaxFileSec). Отдельного правила logrotate для Galene нет — ротация только за счёт journald. При долгой работе и активном трафике журнал может расти (см. TODO).
  • Системный logrotate в CT — стандартные правила (apt, dpkg, btmp, wtmp). Для Galene отдельного файла логов нет.

Риск: при большом количестве подключений и ошибок объём journal может вырасти. Рекомендуется ограничить размер журнала в journald.conf и при желании настроить выгрузку логов Galene в файл с logrotate (см. TODO).


Запуск и порядок поднятия

  1. Убедиться, что доступны каталоги /opt/galene и /opt/galene-data и в data/ есть config.json, ice-servers.json.
  2. Запуск сервиса: systemctl start galene (или при загрузке CT — systemctl enable galene уже выполнен, т.к. сервис активен).
  3. NPM на контейнере 100 должен проксировать https://call.katykhin.ru на 192.168.1.108:8443.

После смены конфигов в /opt/galene-data/data/ или в groups/: systemctl restart galene. После обновления кода в /opt/galene/ — пересобрать бинарник, заменить /opt/galene-server и перезапустить сервис.


Уязвимости и риски

  1. Пароли и креды в конфигах: В /opt/galene-data/data/ice-servers.json хранится TURN credential. В каждом файле в /opt/galene-data/groups/*.json — пароли пользователей (операторы, участники). Эти каталоги не должны попадать в публичный репозиторий. Ограничить права (например chmod 600 на файлы с паролями), хранить бэкапы в защищённом месте.
  2. Доступ по порту 8443: Galene слушает на всех интерфейсах (0.0.0.0:8443). Из LAN доступ по http://192.168.1.108:8443. Снаружи доступ только через NPM (https://call.katykhin.ru). Не пробрасывать 8443 в интернет напрямую.
  3. Логи в journal: Ротация только через journald; при необходимости ограничить SystemMaxUse и проверить, что старые логи не заполняют диск (см. TODO).
  4. Мало RAM (256 MB): Контейнер с небольшим объёмом памяти; при большом числе одновременных участников возможны проблемы. При необходимости увеличить память CT в Proxmox.

TODO по контейнеру 108

  • Базовая политика logrotate: для системных логов настроена (homelab-lxc.conf — 14 дней, 50 MB, 5 архивов). См. Logrotate — базовая политика homelab.

  • Ротация journal: Проверить/задать в /etc/systemd/journald.conf параметры SystemMaxUse=, MaxFileSec= (или аналог), чтобы журнал не разрастался бесконечно. После изменений — systemctl restart systemd-journald (учёт потери текущего лога при рестарте).

  • Права на конфиги: Ограничить доступ к файлам с паролями и кредами: chmod 600 на ice-servers.json, на файлы в groups/. Владелец root.

  • Мониторинг диска: Следить за местом (df -h) и размером журнала. При желании — оповещение при заполнении выше порога (например 80%).

  • Резервное копирование: Регулярный бэкап критичных данных (оценка размеров на момент документации):

    • /opt/galene-data — данные и конфиги: data/ (config.json, ice-servers.json, cert.pem, key.pem), groups/ (все JSON групп), static/ при наличии кастомизаций. ~1.7 MB. Обязательно; содержит пароли и TURN credential — хранить бэкапы в защищённом месте, не публиковать.
    • /opt/galene — исходный код и бинарник (или только скрипты сборки и версию). ~6.6 MB. Нужен для воспроизведения сборки galene-server; при использовании upstream репозитория можно восстанавливать из git, но локальные патчи стоит бэкапить.
    • /etc/systemd/system/galene.service — unit-файл. Небольшой размер; включить в бэкап конфигов системы.

    Восстановление: скопировать /opt/galene-data и при необходимости /opt/galene, установить unit, выполнить systemctl daemon-reload && systemctl start galene. TURN на VPS должен быть доступен и креды в ice-servers.json совпадать с настройками coTURN.


Связь с другими документами