Files
knowledge-base/projects/benilux/umny-server-concept.md

192 lines
19 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
date: 2026-06-29
type: project
status: concept
tags: [alexandr, umnybot, concept, cosmos, self-service, ai-services, media, nextcloud]
aliases: ["концепция умного сервера Александра", "umnybot concept", "сервис-каталог Александра"]
---
# 🧠 Концепция «Умного сервера» Александра — единый ИИ-сервис с самообслуживанием
> Развитие пилота [[../dttb/ai-assistant-pilot/architecture|umnybot]] в законченный продукт: «умный сервер с ИИ-сервисами», который продали клиенту. Цель — удобный личный кабинет, где Александр сам ставит и настраивает сервисы, всё за одним входом. Секреты — в [[../dttb/ai-assistant-pilot/credentials|credentials пилота]] и [[credentials|сеть Бенелюкса]].
## TL;DR (что решили)
- **Витрина и автодеплой** — **Cosmos Cloud** на хосте: один контейнер = реверс-прокси + авто-HTTPS + SSO/логин + App Store + защита (SmartShield) + мониторинг. Это «магазин сервисов», где Александр сам ставит приложения в один клик.
- **Железо** — работаем в рамках (i3-2100, 2 ядра, **15 ГБ ОЗУ, уже ~⅔ занято**). Лёгкие версии сервисов, без одновременной тяжёлой нагрузки, приоритизация. Честно: всё включить «на полную» эта коробка не потянет — концепция это учитывает.
- **Что работает сейчас:** боты Алекс + Hermes, SwarmClaw, Homepage, Open WebUI, Nextcloud, Plex, торрент — с интеграцией «скачал → видно в облаке и медиа».
- **Бюджет ОЗУ — главный лимит**, не диск и не CPU. См. [#бюджет-ресурсов](#бюджет-ресурсов).
---
## 1. Что уже есть на коробке (инвентарь)
Сервер физически у Александра (КП Бенелюкс), Proxmox `pve` `192.168.1.247`. Публичный вход — домены `*.umnybot.ru` через статичный VPS-шлюз `158.255.0.139` по NetBird (WAN Александра динамический, DNS на него вешать нельзя).
| LXC | Сервис | RAM (выдано) | Статус |
|---|---|---|---|
| 101 | NPM (внутр. реверс-прокси коробки) | 512 МБ | 🟢 работает |
| 102 | **бот Алекс** (openclaw `@alex_umny_bot`) + OmniRoute + Postgres | ~4 ГБ | 🟢 работает |
| 103 | **SwarmClaw** (`umnybot.ru`, публично) | ~4 ГБ | 🟢 работает |
| 104 | Gitea | ~1 ГБ | 🟢 работает |
| 105 | Homepage + filebrowser (Docker) | ~1 ГБ | 🟢 работает |
| ~~VM100~~ | ~~ZimaOS~~ | — | ❌ удалена (VT-x слетел) |
**Свободно ОЗУ:** ориентировочно 35 ГБ (нужно замерить `free -m` перед стартом — см. шаг 0). Диск: SSD 111 ГБ (система) + **HDD 1.8 ТБ** под медиа/торренты/облако — места достаточно.
### Чего по ТЗ ещё нет
Nextcloud, медиасервер (Plex/«Flex»), торрент-клиент, Open WebUI, второй бот (Hermes на GLM 5.2), и **сама платформа самообслуживания** — её и делаем сердцем продукта.
---
## 2. Целевая архитектура
```
Интернет → *.umnybot.ru → VPS-шлюз 158.255.0.139 (NetBird)
┌─────────────┴─────────────┐
▼ ▼
umnybot.ru (SwarmClaw) app.umnybot.ru (Cosmos UI)
│ ← ЕДИНЫЙ ВХОД клиента
┌────────────────────────────┼────────────────────────────┐
▼ ▼ ▼ ▼ ▼
Nextcloud Plex qBittorrent Open WebUI бот Hermes
cloud.* media.* dl.* chat.* (TG + web)
скачал торрент → /mnt/Work/media (HDD 1.8 ТБ)
├─→ Plex видит библиотеку (media volume)
└─→ Nextcloud External Storage (тот же путь) → видно в облаке
```
### Почему Cosmos Cloud (а не CasaOS/Runtipi/Portainer)
Выбран как «магазин сервисов» по ключевому критерию ТЗ**самостоятельная установка + безопасный публичный доступ**:
- **Всё-в-одном:** встроенный реверс-прокси + автоматический Let's Encrypt + страница логина/2FA (свой SSO) + App Store + контейнерный мониторинг — одним сервисом. Не нужно собирать NPM+authentik+Portainer+Homepage по кусочкам.
- **Безопасен для паблика:** SmartShield (анти-брутфорс, гео/rate-limit, изоляция приложений) — у CasaOS этого нет, его в интернет голым выставлять нельзя.
- **Один клик для клиента:** Александр заходит в `app.umnybot.ru`, видит каталог, жмёт «Install» — Cosmos сам поднимает контейнер, выдаёт поддомен и HTTPS.
- **Сосуществует с текущим NPM:** Cosmos берёт на себя новые сервисы, существующие (SwarmClaw, pve) остаются за NPM коробки. Мигрируем постепенно, ничего не ломая.
> Лёгкий по ресурсам (сам Cosmos ~150250 МБ ОЗУ) — критично для этой коробки.
---
## 3. Сервисы — что и как
### 3.1 Боты (ИИ-ядро, уже частично есть)
| Бот | Движок | Канал | Ключ/модель | Статус |
|---|---|---|---|---|
| **Алекс** | openclaw (LXC102) | Telegram `@alex_umny_bot` + веб | OmniRoute (Codex/Max) | 🟢 есть |
| **Hermes (новый)** | Hermes Agent | Telegram + веб-дашборд | **GLM 5.2 на ключе Олега** | 🔜 поставить |
**Hermes для Александра** — по образцу German (LXC141, см. [[../../decisions/2026-06-18-german-hermes-agent-deploy]]):
- Отдельный LXC (или контейнер в Cosmos), Hermes Agent + gateway Telegram + dashboard `hermes.umnybot.ru`.
- Модель — **GLM 5.2** напрямую (ключ Олега) или через OmniRoute-провайдер `glm/*`. ⚠️ В KB у `glm/glm-5.1` был баланс 0 — **проверить баланс ключа GLM 5.2 перед стартом** (см. [#открытые-вопросы](#открытые-вопросы)).
- ОЗУ: ~11.5 ГБ. Это самый заметный новый потребитель после медиа — ставить, когда подтвердим бюджет.
**SwarmClaw для клиента** — сейчас это админский оркестратор Олега (`umnybot.ru`). Приспособить можно так:
- Завести **отдельный read-only/ограниченный аккаунт** Александру (доступ к чату с агентами, без управления узлами/креденшалами).
- ⚠️ База `swarmclaw.db` хранит API-ключи всех клиентов — **не давать Александру админ-доступ**, только пользовательский профиль. Если нужна полная изоляция — отдельный инстанс SwarmClaw для него (но это +4 ГБ ОЗУ, коробка не потянет вместе с медиа). **Рекомендация: ограниченный аккаунт в текущем инстансе.**
### 3.2 Homepage — информационный портал
- Уже есть на LXC105. Доработать: плитки на ВСЕ ресурсы Александра (боты, облако, медиа, торрент, Open WebUI, Cosmos), живые виджеты (Proxmox, Nextcloud, qBittorrent).
- Сделать **стартовой страницей** `home.umnybot.ru` — первое, что видит клиент. Можно вынести как «дашборд» внутри Cosmos.
- Образец конфига — [[../../decisions/2026-06-27-homepage-dashboard-lxc145]].
### 3.3 Nextcloud — личное облако
- **Лёгкая установка, НЕ AIO** (AIO тянет 10+ контейнеров и 10 ГБ ОЗУ — коробка не вытянет). Ставим `nextcloud:apache` + отдельный MariaDB, или официальный образ через Cosmos App Store.
- Данные — на HDD `/mnt/pve/Work` (1.8 ТБ).
- **Интеграция с торрентом:** External Storage → локальная папка `/mnt/Work/media` (куда качает qBittorrent). Скачанное сразу видно в облаке.
- Домен `cloud.umnybot.ru`. ОЗУ ~11.5 ГБ.
### 3.4 Plex — мультимедиа («Flex»)
- Plex Media Server (выбран клиентом), библиотека на HDD `/mnt/Work/media`.
- ⚠️ **Честное ограничение:** i3-2100 (2011, без рабочего QuickSync) **не тянет транскодинг**, особенно 4K. Работает только **Direct Play** — файл должен подходить устройству напрямую (формат/кодек/битрейт). Для ТВ/телефона в большинстве случаев ок; 4K HEVC на старый ТВ — будет тормозить. Это нужно проговорить с клиентом.
- **Интеграция:** та же папка `/mnt/Work/media`, что у торрента и Nextcloud → скачал → появилось в Plex. Домен `media.umnybot.ru`. ОЗУ ~1 ГБ (без транскода).
### 3.5 Торрент — qBittorrent
- `qbittorrent` (linuxserver), WebUI `dl.umnybot.ru`, загрузки в `/mnt/Work/media` (общая папка с Plex и Nextcloud — ключ всей интеграции).
- Лёгкий, ~256512 МБ ОЗУ.
- **Прямой доступ из Nextcloud и Plex** реализуется именно через общий путь загрузок — отдельные «коннекторы» не нужны, всё через одну директорию на HDD.
### 3.6 Open WebUI — чат с ИИ через браузер
- `open-webui`, бэкенд — OmniRoute (`http://<omni>:20128/v1`), как на LXC142 ([[../../decisions/2026-06-22-open-webui-deploy]]).
- Домен `chat.umnybot.ru`. Клиенту — красивый веб-чат со всеми моделями без Telegram.
- ОЗУ ~1 ГБ (embedding-модель грузится с HF при первом старте — учесть медленную загрузку из РФ).
### 3.7 Что ещё полезного предложить Александру
- **Vaultwarden** — менеджер паролей (на дом/семью), ~128 МБ. Дёшево и очень полезно.
- **Immich** — фото-бэкап с телефонов (замена Google Photos). ⚠️ Тяжёлый (ML-распознавание лиц) — **только если добавить ОЗУ** или отключить ML.
- **Uptime Kuma** — мониторинг доступности всех сервисов, ~128 МБ, плитка в Homepage.
- **AdGuard Home** — блокировка рекламы/трекеров на весь дом (DNS), ~128 МБ. Хорошо ложится на тему «обхода РКН» которая у клиента уже есть.
- **Paperless-ngx** — архив документов с распознаванием (для домовладельца удобно). Тяжеловат, опционально.
> Всё это — карточки в Cosmos App Store, клиент ставит сам когда захочет. Мы лишь готовим каталог и проверяем, что лёгкие.
---
## 4. Бюджет ресурсов
**Главный лимит — ОЗУ (15 ГБ), а не диск/CPU.** Нельзя поднять всё сразу. Грубая раскладка «реалистичного» набора:
| Сервис | ОЗУ | Приоритет |
|---|---|---|
| Текущее (Алекс+OmniRoute, SwarmClaw, Gitea, NPM, Homepage) | ~10 ГБ | уже работает |
| Cosmos Cloud (платформа) | ~0.25 ГБ | **P0** |
| qBittorrent | ~0.4 ГБ | **P1** |
| Plex (Direct Play) | ~1 ГБ | **P1** |
| Nextcloud (light) | ~1.5 ГБ | **P1** |
| Open WebUI | ~1 ГБ | P2 |
| Hermes (GLM 5.2) | ~1.5 ГБ | P2 |
| Vaultwarden / Uptime Kuma / AdGuard | ~0.4 ГБ | P3 |
Сумма P0+P1 уже подводит к потолку. **Варианты разруливания (для обсуждения с клиентом):**
1. **Поджать текущее** — SwarmClaw/Gitea Александру не критичны; SwarmClaw можно ужать или вынести на инфру Олега, освободив ~4 ГБ.
2. **Апгрейд ОЗУ** — плата ZOTAC H61 держит до 1632 ГБ DDR3 (2 слота). Докупить планки = весь стек комфортно. Дешёвый DDR3 б/у. **Самое разумное вложение, если клиент хочет «всё».**
3. **Тяжёлое — на инфру Олега** — Open WebUI/Hermes держать у Олега, отдавать через `*.umnybot.ru`. Разгружает коробку, но появляется зависимость от Олега (против идеи автономности).
> **Рекомендация:** стартуем P0+P1 в рамках текущего железа (поджав SwarmClaw), параллельно предлагаем клиенту апгрейд ОЗУ до 32 ГБ под полный набор.
---
## 5. План внедрения (по шагам, с проверками)
**Шаг 0 — замер.** `free -m`, `df -h /mnt/pve/Work`, `pct list` + RAM каждого LXC. Зафиксировать реальный свободный объём ОЗУ. ✅ если свободно ≥3 ГБ — продолжаем; если нет — сначала поджать SwarmClaw/обсудить апгрейд.
**Шаг 1 — Cosmos Cloud.** Поставить на хост (или в LXC с nesting). Подключить домен `app.umnybot.ru` через VPS-шлюз. Настроить SSO/2FA. ✅ клиент логинится, видит пустой App Store и текущие контейнеры.
**Шаг 2 — общая медиа-папка + торрент.** Создать `/mnt/pve/Work/media`. Поставить qBittorrent (volume = эта папка). ✅ тестовая закачка появляется в папке.
**Шаг 3 — Plex.** Библиотека на `/mnt/Work/media`. ✅ тестовый файл играет Direct Play на ТВ/телефоне клиента.
**Шаг 4 — Nextcloud (light).** External Storage → `/mnt/Work/media`. ✅ скачанный торрент виден и в облаке, и в Plex (проверка сквозной интеграции — ядро ТЗ).
**Шаг 5 — Open WebUI.** Бэкенд OmniRoute. ✅ чат отвечает в браузере.
**Шаг 6 — Hermes (GLM 5.2).** Сначала проверить баланс ключа GLM. Поставить, Telegram + `hermes.umnybot.ru`. ✅ бот отвечает.
**Шаг 7 — Homepage как портал.** Плитки на всё, живые виджеты. Сделать стартовой. ✅ клиент с одной страницы попадает в любой сервис.
**Шаг 8 — каталог App Store + инструкция.** Подготовить карточки лёгких приложений (Vaultwarden, Uptime Kuma, AdGuard) + короткая памятка клиенту «как поставить сервис самому». ✅ клиент ставит что-то сам в один клик.
---
## 6. Открытые вопросы (уточнить у Олега/клиента)
- [ ] **Баланс ключа GLM 5.2** — в KB `glm/glm-5.1` был «баланс 0». Hermes на нём не заведётся. Проверить/пополнить.
- [ ] **Апгрейд ОЗУ** до 32 ГБ DDR3 — готов ли клиент на железо? Определяет, P1 или полный набор.
- [ ] **Plex и транскод** — проговорить ограничение Direct Play (4K на старом ТВ будет тормозить). Возможно, клиенту хватит — но ожидания выровнять заранее.
- [ ] **SwarmClaw для клиента** — ограниченный аккаунт в текущем инстансе (рекомендация) или поджать/вынести? Влияет на бюджет ОЗУ.
- [ ] **Cosmos vs текущий NPM** — Cosmos на новые сервисы, NPM коробки остаётся на SwarmClaw/pve; или со временем всё на Cosmos? (постепенная миграция).
- [ ] **NetBird на сам хост** — давно висящий TODO ([[../dttb/proxmox-pve-147]]); упростит управление, стоит закрыть в ходе работ.
---
## Связанное
- [[../dttb/ai-assistant-pilot/architecture]] — текущая архитектура коробки
- [[../dttb/proxmox-pve-147]] — железо хоста
- [[../dttb/ai-assistant-pilot/credentials]] — доступы/секреты
- [[README]] — объект Бенелюкс (сеть, роутер)
- [[../../decisions/2026-06-22-open-webui-deploy]], [[../../decisions/2026-06-27-homepage-dashboard-lxc145]], [[../../decisions/2026-06-18-german-hermes-agent-deploy]] — образцы деплоя