From cc72a71c7df9d141bb55f672624eb17925b94784 Mon Sep 17 00:00:00 2001 From: dttb Date: Wed, 17 Jun 2026 21:31:50 +0300 Subject: [PATCH] =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B0=D0=BD?= =?UTF-8?q?=D0=B4=D1=80:=20=D1=84=D0=B8=D0=BD=D0=B0=D0=BB=20=D0=BF=D1=83?= =?UTF-8?q?=D0=B1=D0=BB=D0=B8=D1=87=D0=BD=D0=BE=D0=B3=D0=BE=20=D0=B4=D0=BE?= =?UTF-8?q?=D1=81=D1=82=D1=83=D0=BF=D0=B0=20(=D1=82=D0=BE=D0=BB=D1=8C?= =?UTF-8?q?=D0=BA=D0=BE=20umnybot.ru=E2=86=92SwarmClaw)=20+=20=D0=BF=D0=BE?= =?UTF-8?q?=D0=BB=D0=BD=D0=B0=D1=8F=20architecture.md=20=D1=81=20=D0=B4?= =?UTF-8?q?=D0=B8=D0=B0=D0=B3=D1=80=D0=B0=D0=BC=D0=BC=D0=BE=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dttb/ai-assistant-pilot/architecture.md | 120 ++++++++++++++++++ .../dttb/ai-assistant-pilot/credentials.md | 8 +- 2 files changed, 124 insertions(+), 4 deletions(-) create mode 100644 projects/dttb/ai-assistant-pilot/architecture.md diff --git a/projects/dttb/ai-assistant-pilot/architecture.md b/projects/dttb/ai-assistant-pilot/architecture.md new file mode 100644 index 0000000..320c9de --- /dev/null +++ b/projects/dttb/ai-assistant-pilot/architecture.md @@ -0,0 +1,120 @@ +--- +date: 2026-06-17 +type: reference +tags: [ai-assistant, alexandr, umnybot, architecture, topology, netbird, proxmox] +aliases: [архитектура коробки Александра, umnybot architecture, топология умного сервера] +--- + +# 🏗️ Архитектура «Умного сервера» Александра (umnybot) + +> Авторитетная карта коробки после переезда к Александру (2026-06-17). Секреты — в [[credentials]]. Пилот/контекст — память `project_alexandr_assistant`, [[../../benilux/credentials|сеть Бенелюкса]]. + +## Кратко + +«Консьерж в коробке» — Proxmox-нода у Александра (КП Бенелюкс), переехала из LAN Олега `10.0.0.0/24` в сеть Александра `192.168.1.0/24` (2026-06-17). Интерфейс клиента — **бот Алекс в Telegram** + **SwarmClaw на `https://umnybot.ru`**. Публичный доступ — через статичный VPS-шлюз по NetBird (WAN Александра динамический, на него вешать DNS нельзя). + +## Топология + +```mermaid +flowchart TB + user([Интернет]) -->|"https://umnybot.ru"| dns["DNS umnybot.ru → 158.255.0.139"] + dns --> vps + + subgraph VPSGW ["VPS-шлюз · vm-nano · 158.255.0.139 (статичный) · NetBird 100.70.127.23"] + vps["jc21 NPM :443
LE-серт"] + end + + vps ==>|"NetBird → 100.70.90.103:80"| boxnpm + + subgraph BOX ["Коробка Александра · Proxmox pve-147 (192.168.1.247) · LAN 192.168.1.0/24"] + boxnpm["LXC101 «npm» · 192.168.1.221
NetBird 100.70.90.103 (alex-npm)"] + boxnpm ==>|"Host umnybot.ru"| swarm["LXC103 SwarmClaw
192.168.1.71:3456"] + boxnpm -.->|"omni (internal)"| omni["LXC102 OmniRoute :20128
NetBird 100.70.186.192"] + boxnpm -.->|"cloud (internal)"| fb["LXC105 filebrowser :8082"] + boxnpm -.->|"alex (internal)"| hp["LXC105 Homepage :3001"] + boxnpm -.->|"git (internal)"| git["LXC104 Gitea :3000"] + bot["LXC102 openclaw «Алекс»
→ Telegram @alex_umny_bot"] + zima["VM100 ZimaOS — STOPPED
(не используется)"] + end + + oleg([Олег / админ]) -.->|"NetBird → LXC102 → ssh host"| host["Proxmox UI :8006"] + oleg -.->|"NetBird"| omni + + classDef pub fill:#1f6f43,stroke:#0a3,color:#fff + classDef int fill:#333,stroke:#888,color:#ddd + classDef off fill:#5a1a1a,stroke:#a33,color:#fcc + class vps,boxnpm,swarm pub + class omni,fb,hp,git,bot int + class zima off +``` + +Сплошные стрелки (`==>`) — **публичный** путь (`umnybot.ru`). Пунктир (`-.->`) — только **внутри** по NetBird. + +## Хосты и сеть + +| Узел | Адрес | NetBird | Роль | +|---|---|---|---| +| **Proxmox pve-147** (хост) | `192.168.1.247` static (+резерв Cudy), gw `.1` | нет (джамп через LXC102) | гипервизор, Web UI `:8006` | +| Cudy TR3000 (роутер Александра) | LAN `192.168.1.1`, WAN **`45.143.21.60` динамич. (dhcp)** | `100.70.207.97` | шлюз сети Александра | +| **VPS-шлюз vm-nano** | `158.255.0.139` (статичный, Ubuntu 22.04) | `100.70.127.23` | публичный фронт, jc21 NPM + LE | + +## Контейнеры / VM + +| ID | Имя | IP (LAN) | NetBird | Сервис | Порт | +|---|---|---|---|---|---| +| LXC 101 | npm | `192.168.1.221` | **`100.70.90.103`** (alex-npm) | jc21 NPM (внутр. роутер коробки) | 80/81/443 | +| LXC 102 | assistant | `192.168.1.154` | `100.70.186.192` (alex-assistant) | openclaw «Алекс» + OmniRoute + Postgres | TG, 20128, 5432 | +| LXC 103 | swarmclaw | `192.168.1.71` | — | **SwarmClaw** (UI на umnybot.ru) | 3456 | +| LXC 104 | gitea | `192.168.1.96` | — | Gitea | 3000 | +| LXC 105 | alex-apps | `192.168.1.14` (резерв) | — | Docker: filebrowser (облако) + Homepage (дашборд) | 8082, 3001 | +| VM 100 | Zima | — | — | ZimaOS — **stopped, не используется** (KVM/VT-x слетел, заменён Docker-апками на 105) | — | + +Все контейнеры — `ip=dhcp` (резервации MAC→IP на Cudy для хоста .247 и apps .14). NetBird-агенты на 101/102 — autostart enabled. + +## Домены и доступ + +| Домен | Доступ | Бэкенд | Через | +|---|---|---|---| +| **`umnybot.ru`** | 🌐 ПУБЛИЧНО | SwarmClaw (103:3456) | VPS NPM → NetBird → NPM коробки (id9) | +| `omni.umnybot.ru` | 🔒 internal | OmniRoute (102:20128) | NetBird (напрямую `100.70.186.192:20128`) | +| `cloud.umnybot.ru` | 🔒 internal | filebrowser (105:8082) | NetBird → NPM коробки | +| `alex.umnybot.ru` | 🔒 internal | Homepage (105:3001) | NetBird → NPM коробки | +| `git.umnybot.ru` | 🔒 internal | Gitea (104:3000) | NetBird → NPM коробки | +| `pve.umnybot.ru` | 🔒 internal | Proxmox UI (host:8006) | NetBird (гипервизор наружу НЕЛЬЗЯ) | +| ~~zima/tg/rustdesk/plex/ha/oc/qbit/term~~ | удалены | были апки ZimaOS | VM100 не используется | +| `ai.umnybot.ru` | — | домашний openclaw Олега (`10.0.0.239`) | не относится к коробке | + +> На VPS NPM публично сейчас — **только `umnybot.ru`**. Остальные домены сняты с VPS; их бэкенды доступны по NetBird/LAN. + +## Доступ для управления + +```bash +# Хост Proxmox (нет своего NetBird → джамп через LXC102): +ssh -i ~/.ssh/id_ed25519 root@100.70.186.192 # LXC102 assistant (NetBird) +sshpass -p '1qaz!QAZ' ssh root@192.168.1.247 # → хост pve +# pct exec -- ... для любого контейнера + +# NPM коробки (внутр. роутер): http://192.168.1.221:81 или http://100.70.90.103:81 +# VPS-шлюз: ssh root@158.255.0.139 ; NPM http://158.255.0.139:81 +# OmniRoute (internal): http://100.70.186.192:20128 +# Web UI Proxmox: ssh -L 8006:192.168.1.247:8006 root@100.70.186.192 +``` + +Креды (root-пароли, NPM-логины, токены) — [[credentials]]. + +## Ключевые факты / грабли + +- **WAN Александра динамический** (`dhcp`, аренда 24ч) → DNS на него вешать нельзя. Поэтому публичный доступ только через статичный VPS-шлюз. DDNS не нужен. +- **Хост без NetBird** → управление джампом через LXC102. Стоящий TODO: поставить NetBird на сам хост. +- **NetBird на NPM коробки (LXC101) = `100.70.90.103`** — единственная точка, куда бьёт VPS; NPM коробки роутит по Host-заголовку на внутренние бэкенды. +- **ZimaOS (VM100) убран** — заменён Docker-апками (filebrowser+Homepage) на LXC105; виртуализация (VT-x) больше не нужна. +- Сторож Антошки (LXC137) ходит к коробке по NetBird → LXC102 (см. [[credentials]]). +- Бэкап старого netconfig хоста: `/root/interfaces.bak-alexmove` на pve. + +## История изменений (2026-06-17) + +1. Переезд хоста `10.0.0.147` → `192.168.1.247`; контейнеры на DHCP сами переехали на `192.168.1.x`. +2. ZimaOS (VM100) выведен из работы; подняты filebrowser+Homepage на новом LXC105. +3. Публичный доступ переведён с прямого проброса Cudy (откатан) на VPS-шлюз `158.255.0.139` по NetBird. +4. NetBird добавлен на NPM коробки (LXC101 = `100.70.90.103`). +5. `umnybot.ru` → SwarmClaw публично; остальное (omni/cloud/alex/git/pve) — internal; 8 ZimaOS-доменов + `ai` удалены с VPS. diff --git a/projects/dttb/ai-assistant-pilot/credentials.md b/projects/dttb/ai-assistant-pilot/credentials.md index 4eee122..5d78ad3 100644 --- a/projects/dttb/ai-assistant-pilot/credentials.md +++ b/projects/dttb/ai-assistant-pilot/credentials.md @@ -199,13 +199,13 @@ status: active | NPM коробки (LXC101) | теперь в NetBird: **`100.70.90.103`** (`alex-npm.netbird.cloud`), setup-key Benelux. VPS бьёт сюда, NPM коробки роутит внутрь (cloud→105:8082, alex→105:3001, omni→102:20128) | | LXC 105 «alex-apps» | filebrowser (облако, `:8082`, admin/`App5870w`) + Homepage (дашборд, `:3001`), `/data` на HDD | -**Публично сейчас (2026-06-17, после чистки):** `umnybot.ru` (корень → **SwarmClaw** LXC103 `192.168.1.71:3456`, через NPM коробки id9) и `omni.umnybot.ru` (OmniRoute → 102:20128). DDNS НЕ нужен — DNS на статичный VPS, динамика WAN неважна. +**Публично сейчас (2026-06-17, финал):** на VPS NPM остался **ТОЛЬКО `umnybot.ru`** → SwarmClaw (LXC103 `192.168.1.71:3456`, через NPM коробки id9). DDNS НЕ нужен — DNS на статичный VPS, динамика WAN неважна. -**Убрано с VPS NPM (решение Олега):** 8 доменов ZimaOS (`zima/tg/rustdesk/plex/ha/oc/qbit/term` — VM100 ZimaOS не используется) + `cloud`/`alex` (облако/дашборд публично не нужны — апки filebrowser+Homepage на LXC105 остаются, доступны внутри по NetBird через NPM коробки). +**Всё остальное — internal (по NetBird/LAN, не публично):** `omni` (OmniRoute 102:20128), `cloud` (filebrowser 105:8082), `alex` (Homepage 105:3001), `git` (Gitea 104:3000), `pve` (Proxmox UI host:8006). Снято с VPS NPM: эти + 8 доменов ZimaOS (`zima/tg/rustdesk/plex/ha/oc/qbit/term`) + `ai`→10.0.0.239 (домашний openclaw Олега, не коробка). -**Сервисы на коробке сейчас:** SwarmClaw (103:3456), OmniRoute (102:20128), Gitea (104:3000), filebrowser (105:8082), Homepage (105:3001), Proxmox UI (host:8006), бот Алекс (102, Telegram). VM100 ZimaOS — stopped (не используется). +**Сервисы на коробке:** SwarmClaw (103:3456), OmniRoute (102:20128), Gitea (104:3000), filebrowser (105:8082), Homepage (105:3001), Proxmox UI (host:8006), бот Алекс (102, Telegram). VM100 ZimaOS — stopped (не используется, заменён Docker-апками на 105). -**⚠️ Осталось решить:** `git`/`pve` (есть на коробке, на VPS смотрят на мёртвые 10.0.0.x; pve публично НЕ выставлять), `ai.umnybot.ru`→10.0.0.239 (домашний openclaw Олега, не коробка), `omni` публичность. +> 🏗️ Полная карта с диаграммой — [[architecture]]. ## Статус (2026-05-31) Этап 1 почти закрыт. Тракт TG→openclaw→OmniRoute→Kiro-роутинг проверен (429 = достучались). Блокер: рабочая модель (новый Kiro троттлит → Олег подключает 2-й провайдер). Дальше: openclaw model=omniroute/* + fallback → тест «привет» в TG.