27 KiB
date, type, status, tags, aliases
| date | type | status | tags | aliases | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2026-06-29 | project | concept |
|
|
🧠 Концепция «Умного сервера» Александра — простой ИИ-сервис, всё через бота
Развитие пилота ../dttb/ai-assistant-pilot/architecture в законченный продукт: «умный сервер с ИИ-сервисами», который продали клиенту. Цель — простой и удобный сервис, где клиент ничего не настраивает руками: попросил бота — бот сам поставил/настроил. Максимальная автономность от инфраструктуры Олега. Секреты — в ../dttb/ai-assistant-pilot/credentials и credentials.
TL;DR (что решили)
- Лицо сервиса — бот, а не панель. Клиент НЕ кликает в Cosmos сам. Он пишет боту (Алекс/Hermes в Telegram) или в SwarmClaw: «поставь мне облако» / «хочу смотреть фильмы» → агент сам разворачивает сервис через Cosmos API, выдаёт ссылку. Самообслуживание = диалог.
- Cosmos Cloud — движок под капотом, не витрина. Даёт реверс-прокси + авто-HTTPS + изоляцию + API для автодеплоя. Клиент его обычно не видит; админ-доступ — у Олега и у бота.
- База знаний бота — ТОЛЬКО Бенелюкс. Изолированная KB по инфраструктуре Александра, без общей базы Олега. Это и автономность, и безопасность.
- Максимальная автономность от Олега: свой LLM-ключ/баланс, свой публичный вход (Cloudflare Tunnel вместо VPS-шлюза Олега), свой мониторинг. См. #автономность.
- Железо — работаем в рамках (i3-2100, 2 ядра, 15 ГБ ОЗУ, уже ~⅔ занято). Лёгкие версии сервисов, приоритизация. Всё «на полную» коробка не потянет — концепция это учитывает.
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 ГБ | 🟢 работает |
| — | ❌ удалена (VT-x слетел) |
Свободно ОЗУ: ориентировочно 3–5 ГБ (нужно замерить free -m перед стартом — см. шаг 0). Диск: SSD 111 ГБ (система) + HDD 1.8 ТБ под медиа/торренты/облако — места достаточно.
Чего по ТЗ ещё нет
Nextcloud, медиасервер (Plex/«Flex»), торрент-клиент, Open WebUI, второй бот (Hermes на GLM 5.2), и сама платформа самообслуживания — её и делаем сердцем продукта.
2. Целевая архитектура — «всё через бота»
Клиент общается только с ботом. Бот — это «оператор» сервера: понимает запрос на естественном языке, дёргает Cosmos API, отвечает ссылкой. Панель Cosmos — служебная, для Олега.
КЛИЕНТ КЛИЕНТ (опц., если удобно)
Telegram: бот Алекс / Hermes SwarmClaw (веб-чат)
│ «поставь облако» │
└──────────────┬───────────────────────┘
▼
АГЕНТ (openclaw/hermes) ── KB: только Бенелюкс
│ tool: cosmos-deploy.sh «nextcloud»
▼
Cosmos Cloud API (движок) ── реверс-прокси + HTTPS + изоляция
│ поднимает контейнер, выдаёт поддомен
┌────────────────┼────────────────┬───────────────┬───────────────┐
▼ ▼ ▼ ▼ ▼
Nextcloud Plex qBittorrent Open WebUI (доп. апки)
cloud.* media.* dl.* chat.*
│
скачал торрент → /mnt/Work/media (HDD 1.8 ТБ)
│
├─→ Plex видит библиотеку (media volume)
└─→ Nextcloud External Storage (тот же путь) → видно в облаке
Роли в новой модели
| Компонент | Роль | Видит ли клиент |
|---|---|---|
| Бот (Алекс/Hermes) | лицо сервиса, принимает запросы, разворачивает сервисы | ✅ основной интерфейс |
| SwarmClaw | альт. веб-интерфейс к тем же агентам (если удобнее чата) | ✅ опц., ограниченный аккаунт |
| Cosmos Cloud | движок: API автодеплоя, прокси, HTTPS, изоляция | ❌ только Олег + бот |
| Homepage | витрина-портал со ссылками на готовые сервисы | ✅ как «рабочий стол» |
Почему Cosmos Cloud (как движок, не витрина)
Клиент сам кликать в App Store не будет — установку делает бот через API. Cosmos выбран потому, что лучше прочих (CasaOS/Runtipi/Portainer) закрывает именно автодеплой-через-API + безопасность:
- API + Docker-оркестрация: бот вызывает Cosmos, тот поднимает контейнер, навешивает поддомен, HTTPS и изоляцию — всё одним движком, без сборки NPM+certbot+Portainer руками.
- Безопасен для паблика: SmartShield (анти-брутфорс, rate-limit, изоляция приложений) — на случай, если что-то всё же смотрит в интернет.
- Лёгкий: сам Cosmos ~150–250 МБ ОЗУ — критично для этой коробки.
- Сосуществует с текущим NPM: новые сервисы — на Cosmos, существующие (SwarmClaw, pve) пока за NPM коробки. Миграция постепенная.
Бот ставит сервисы через скрипт-обёртку (напр.
cosmos-deploy.sh <app>), добавленный в инструменты агента — по образцуalex-*.sh(../dttb/ai-assistant-pilot/architecture). Каждый деплой — write-действие, проходит approval-гейт (кнопка в Telegram Олегу), чтобы клиент не наплодил лишнего. Со временем доверенные апки можно вынести в allowlist (без подтверждения).
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 перед стартом (см. #открытые-вопросы). - ОЗУ: ~1–1.5 ГБ. Это самый заметный новый потребитель после медиа — ставить, когда подтвердим бюджет.
Инструмент деплоя у агента — ключ модели «всё через бота». В набор tools агента (рядом с alex-*.sh) добавляем cosmos-deploy.sh <app>: бот по запросу клиента дёргает Cosmos API, поднимает сервис, отдаёт ссылку. Каталог понятных алиасов: «облако» → nextcloud, «фильмы/кино» → plex, «качалка» → qbittorrent, «чат с ИИ» → open-webui, «пароли» → vaultwarden. Деплой — write-действие через approval-гейт (см. раздел 2).
SwarmClaw для клиента (если ему удобнее веб-чата) — сейчас это админский оркестратор Олега (umnybot.ru). Приспособить:
- Завести отдельный ограниченный аккаунт Александру (чат с агентами, без управления узлами/креденшалами).
- ⚠️ База
swarmclaw.dbхранит API-ключи всех клиентов Олега — не давать админ-доступ, только пользовательский профиль. Полная изоляция = отдельный инстанс (+4 ГБ ОЗУ, не потянем с медиа). Рекомендация: ограниченный аккаунт; SwarmClaw — опция, основной канал всё равно Telegram-бот.
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. ОЗУ ~1–1.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), WebUIdl.umnybot.ru, загрузки в/mnt/Work/media(общая папка с Plex и Nextcloud — ключ всей интеграции).- Лёгкий, ~256–512 МБ ОЗУ.
- Прямой доступ из 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-deploy.shи проверяем, что апка лёгкая.
4. База знаний бота — только Бенелюкс (изоляция)
Принципиальное требование: KB агента Александра содержит только инфраструктуру Бенелюкса, без общей базы Олега. Это даёт автономность и безопасность — через бота клиента нельзя вытащить данные о НИИКН/dttb/других клиентах.
- Отдельный репозиторий/папка KB для коробки (напр.
kb-benelux), куда входит: сеть Александра (роутер, UniFi, принтер, камеры), его сервисы (этот документ, architecture, credentials Бенелюкса), инструкции для семьи. Не входит:projects/dttb,projects/niikn,decisionsОлега, общие snippets. - Источник синка — не общий vault Олега. Сейчас агенты тянут общую KB (
kb-pull.shс Gitea Олега). Для Александра: либо отдельный репозиторий в его Gitea (LXC104, уже на коробке!), либо локальная папка без внешнего синка. Рекомендация: держать KB в Gitea Александра (LXC104) — полностью на его сервере, ноль зависимости от Gitea Олега. - Память бота (openclaw memory / pgvector) переиндексируется только из этой папки. Проверить, что в индекс не попали общие записи от предыдущего пилота.
- Олег как админ правит KB Бенелюкса через его Gitea; клиент видит результат через ответы бота.
⚠️ Сейчас у пилота KB могла быть общая — аудит при внедрении: что именно сейчас в памяти бота Алекс, нет ли там чужой инфры. См. #открытые-вопросы.
5. Бюджет ресурсов
Главный лимит — ОЗУ (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 уже подводит к потолку. Варианты разруливания (для обсуждения с клиентом):
- Поджать текущее — SwarmClaw/Gitea Александру не критичны; SwarmClaw можно ужать или вынести на инфру Олега, освободив ~4 ГБ.
- Апгрейд ОЗУ — плата ZOTAC H61 держит до 16–32 ГБ DDR3 (2 слота). Докупить планки = весь стек комфортно. Дешёвый DDR3 б/у. Самое разумное вложение, если клиент хочет «всё».
- Тяжёлое — на инфру Олега — Open WebUI/Hermes держать у Олега, отдавать через
*.umnybot.ru. Разгружает коробку, но появляется зависимость от Олега (против идеи автономности).
Рекомендация: стартуем P0+P1 в рамках текущего железа (поджав SwarmClaw), параллельно предлагаем клиенту апгрейд ОЗУ до 32 ГБ под полный набор.
6. Автономность от инфры Олега
Цель — коробка должна жить, даже если инфра Олега выключена. Три точки зависимости и как их закрыть:
| Зависимость сейчас | Проблема | Решение для автономности |
|---|---|---|
Публичный вход через VPS-шлюз Олега (158.255.0.139) |
домены *.umnybot.ru ходят через сервер Олега |
Cloudflare Tunnel на коробке: cloudflared поднимает исходящий туннель к Cloudflare, тот публикует *.umnybot.ru. Не нужен ни статичный IP, ни VPS Олега, ни проброс портов. Работает за динамическим WAN и за CGNAT. Это и есть ключ к автономности входа. Домен перевести на Cloudflare DNS. |
| LLM через OmniRoute на ключах/аккаунтах Олега | боты думают «мозгами» Олега (Max/Codex-аккаунты) | Свой биллинг: прямой ключ GLM 5.2 (или свой Anthropic/OpenRouter) в OmniRoute коробки. У коробки уже свой OmniRoute (LXC102) — нужен только отдельный оплаченный ключ, а не общий пул Олега. |
| Мониторинг Антошкой (LXC137 Олега) | сторож живёт у Олега | Локальный сторож на коробке (cron + Uptime Kuma) шлёт алерты в Telegram самому Олегу/клиенту. Внешний догляд Олега оставить как второй контур, но коробка самодостаточна. |
| KB из общего vault Олега | см. раздел 4 | KB в Gitea Александра (LXC104), на его сервере. |
После этих шагов коробка автономна: свой вход (Cloudflare), свои мозги (свой ключ), своя память (своя KB), свой сторож. Олег — только админ-доступ для поддержки.
⚠️ Cloudflare Tunnel vs текущий VPS-шлюз — это развилка по входу. Cloudflare бесплатен и автономен, но трафик идёт через Cloudflare (для домашнего сервиса ок). Решить при внедрении (раздел 9).
7. План внедрения (по шагам, с проверками)
Шаг 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 — образцы деплоя