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 |
| Ресурсы и версия | Версия сервера, доступно обновление, активные функции |

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 — не по пользователю):
- Логин admin в
/app - Launchpad → Admin Panel
- Settings → прокрутите до Cloud Product (продвинутые функции)
- Включите Multi-tenant (members + разрешения + алерты) → Save
- Вернитесь в Server Admin Panel → sidebar показывает 5 новых элементов
Пользователи и приглашения

- Кнопка "Пригласить пользователя" открывает модал с 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. Поэтому есть обязательный модал подтверждения:

Модал перечисляет 3 последствия действия:
- ✓ Переписывает policies сервера на выбранный шаблон
- ⚠ Удаляет все существующие per-user overrides (нельзя отменить)
- ⟲ Backup предыдущего состояния остаётся в
/admin/policies/historyна 30 дней
Пользователь должен кликнуть Применить шаблон (красная кнопка) для подтверждения. Отмена — это default.
Использование ресурсов

Карточки показывающие агрегированное потребление:
- CPU: % использования хоста среднее
- Память RAM: GB используется / всего
- Диск: GB используется / всего выделено
- Месячный bandwidth: GB передано / квота Hetzner (20 TB на стандартном плане)
Полоса окрашенная по threshold:
- < 75%: синий градиент (здоровый)
- 75-90%: оранжевый градиент (внимание)
- 90%+: красный градиент (критический)
LGPD приватность (синий дисклеймер в footer): мы собираем ТОЛЬКО агрегированные метрики (% CPU, MB RAM). Никогда содержимое файлов, сессий или разговоров пользователей.
Алерты

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.revokedpolicy.template_applied(какой шаблон)policy.override_changed(пользователь X, app Y, before/after)alert.triggered(правило X, значение Y)apikey.created/apikey.revokedserver.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 + архитектура