Skip to content

Server Admin Panel

Панель администрирования подключённого RoqueOS-сервера, встроенная в приложение (Launchpad → Server Admin). Заменяет legacy HTML в <your-server>:27021/admin — он продолжает работать как fallback (экстренные случаи, скрипты), но нативная панель — место где всё происходит каждый день.

Всегда доступные секции

СекцияЧто делает
МониторингCPU/RAM/Диск/Docker live, топ контейнеров
API KeysСоздание/отзыв ключей, просмотр разрешений, логи по ключу
История использованияЛоги по API Key (request count, уникальные IP, активность)
Cloudflare TunnelСтатус tunnel, создание/удаление маршрутов, список поддоменов
СетьНастроенный LAN IP, другие LAN сохранены для прямого доступа
СубтитрыOpenSubtitles / Subdl провайдеры для Video Player
Ресурсы и версияВерсия сервера, доступно обновление, активные функции

Секция Server Admin Monitor — CPU/RAM/Disk в реальном времени

Multi-tenant секции (закрытые флагом)

5 дополнительных секций появляются только когда флаг multiTenant активирован в Admin Panel → Settings → Cloud feature flags:

СекцияЧто делает
Пользователи и приглашенияПригласите людей использовать сервер вместе с вами
Разрешения приложенийШаблоны policy (Разрешительный / Стандарт / Ограничительный)
Использование ресурсовCPU/RAM/диск/полоса агрегированы (LGPD-friendly)
АлертыПравила "уведомлять когда использование > X%" через email/Slack
Лог аудитаКто что сделал и когда (метаданные, никогда содержимое)

Почему закрыто флагом

Multi-tenant требует новую схему (Firestore + SQLite на сервере), которая ещё не plug-and-play во всех deploys. Держать включённым по умолчанию выставит UI без готового backend. Когда модуль members будет released в roqueos-server, флаг станет ON по умолчанию.

Как включить сейчас (только Admin Panel — не по пользователю):

  1. Логин admin в /app
  2. Launchpad → Admin Panel
  3. Settings → прокрутите до Cloud Product (продвинутые функции)
  4. Включите Multi-tenant (members + разрешения + алерты) → Save
  5. Вернитесь в Server Admin Panel → sidebar показывает 5 новых элементов

Пользователи и приглашения

Empty state когда никого не приглашено

  • Кнопка "Пригласить пользователя" открывает модал с email + role (Owner/Admin/User)
  • Email отправляется через SMTP сервера со ссылкой принятия
  • После принятия пользователь попадает в список с бэйджем статуса (Ожидание/Активен/Отозван)
  • Меню действий по строке позволяет Отозвать доступ (возвращает в список отозванных, не удаляет данные)

Roles:

  • Owner: вы (1 на сервер)
  • Admin: управляет другими пользователями и policies, видит всё
  • User: использует приложения согласно активной policy

Разрешения приложений

Шаблоны Разрешительный / Стандарт / Ограничительный

3 предварительно настроенных шаблона:

ШаблонКто что видит
РазрешительныйВсе приложения открыты всем roles. Маленькая доверенная команда.
СтандартAdmin видит всё. User видит продуктивность, медиа, утилиты (не Server Admin).
ОграничительныйUser видит только Finder, Notes, Browser и Chat. Всё остальное скрыто.

Применение шаблона разрушительно — переписывает существующие per-user overrides. Поэтому есть обязательный модал подтверждения:

Confirm модал перед применением шаблона

Модал перечисляет 3 последствия действия:

  1. ✓ Переписывает policies сервера на выбранный шаблон
  2. ⚠ Удаляет все существующие per-user overrides (нельзя отменить)
  3. ⟲ Backup предыдущего состояния остаётся в /admin/policies/history на 30 дней

Пользователь должен кликнуть Применить шаблон (красная кнопка) для подтверждения. Отмена — это default.

Использование ресурсов

CPU/RAM/Диск/Bandwidth с LGPD дисклеймером

Карточки показывающие агрегированное потребление:

  • CPU: % использования хоста среднее
  • Память RAM: GB используется / всего
  • Диск: GB используется / всего выделено
  • Месячный bandwidth: GB передано / квота Hetzner (20 TB на стандартном плане)

Полоса окрашенная по threshold:

  • < 75%: синий градиент (здоровый)
  • 75-90%: оранжевый градиент (внимание)
  • 90%+: красный градиент (критический)

LGPD приватность (синий дисклеймер в footer): мы собираем ТОЛЬКО агрегированные метрики (% CPU, MB RAM). Никогда содержимое файлов, сессий или разговоров пользователей.

Алерты

Empty state с обязательным LGPD баннером

LGPD баннер в header (синий, всегда видимый):

LGPD приватность — Alerts наблюдают ТОЛЬКО агрегированные метрики (% CPU, MB RAM). НИКОГДА содержимое файлов, сессий или разговоров пользователя.

Создать правило:

  • Метрика: CPU / RAM / Диск / Bandwidth
  • Оператор:
  • Threshold: number
  • Канал: email (default), Slack/Discord webhook (планируется)
  • Статус: Активен / Деактивирован (toggle на строке)

Когда trigger fire, alert отправляется через SMTP сервера + записывается в Audit Log.

Лог аудита

Таблица административных событий

LGPD баннер: лог записывает ТОЛЬКО метаданные действия (кто, когда, тип) — НИКОГДА содержимое которое было манипулировано.

Записываемые события:

  • member.invited (email + role)
  • member.revoked
  • policy.template_applied (какой шаблон)
  • policy.override_changed (пользователь X, app Y, before/after)
  • alert.triggered (правило X, значение Y)
  • apikey.created / apikey.revoked
  • server.config.changed

Retention: 400 дней (соответствует требованию Google Cloud Data Access Audit Log стандарта LGPD).

Публичная демо

Хотите попробовать без установки? https://demo.level-hard.com — публичный демо-сервер, обновляемый founder с cleanup-demo.sh (ежедневный cron). Лимиты:

  • Не-admin: может использовать приложения но не видит Server Admin (security gate в windowManagement.js:88)
  • Multi-tenant намеренно OFF в демо (избегает загрязнения)
  • Контейнеры + файлы чистятся ежедневно

Чтобы протестировать multi-tenant нужно установить свой через install.sh и переключить флаг.

Перекрёстные ссылки

  • Add Server Wizard — как подключить только что установленный сервер
  • Тома и бэкап — где живут данные multi-tenant таблиц
  • RoqueOS Cloud — managed версия которая уже идёт с активированным multi-tenant
  • Memory multi_user_roles_decision.md (внутренняя) — рациональ LGPD + архитектура