From c80f860a82b467ea24164f21ecc6b698deff3fdb Mon Sep 17 00:00:00 2001 From: savsis Date: Thu, 10 Sep 2026 22:36:14 +0500 Subject: [PATCH] docs: diagram for panel<->node connectivity (local vs SSH-managed) Co-Authored-By: Claude Sonnet 5 --- README.md | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/README.md b/README.md index 9e46de6..8ee5f1d 100644 --- a/README.md +++ b/README.md @@ -36,6 +36,33 @@ flowchart LR Панель и первая VPN-нода живут на одном сервере. Дополнительные ноды подключаются по SSH (management-ключ, генерится сам при первом добавлении ноды) — панель не устанавливает на себя ничего от ноды, только управляет клиентами через SSH-команды и Xray Stats API. +### Связь панели с нодой + +Два разных пути в зависимости от типа ноды (`node.kind` в БД): + +```mermaid +flowchart TB + api["api.py / bot.py"] --> disp{"node.kind?"} + + disp -->|local| xm["xray_manager.py"] + xm -->|"правит /usr/local/etc/xray/config.json напрямую + xray api statsquery"| xrayLocal["Xray на этой же машине"] + + disp -->|managed| np["nodeprov.py"] + np -->|"SSH, ключ /root/.ssh/mbs_nodes_ed25519"| xrayRemote["Xray на удалённой ноде"] + + subgraph ssh ["По SSH (nodeprov.py)"] + direction TB + f1["remote_add_client / remote_remove_client — правят config.json на ноде"] + f2["remote_query_stats — xray api statsquery"] + f3["remote_reset_stats — statsquery -reset"] + f4["remote_node_status — /proc/loadavg, /proc/meminfo, systemctl"] + end + + np -.-> ssh +``` + +Публичный (`.pub`) ключ отдаётся самим install-скриптом ноды при первом запуске (`curl .../mgmt-pubkey.txt >> authorized_keys`) — панель никогда не просит пароль от новой ноды, только добавляет туда свой ключ через сам же install-скрипт, который админ запускает руками на новом сервере. + ### Поток оплаты (когда `PAYMENTS_ENABLED=true`) ```mermaid