这是我给自己和团队整理的「Alan Cloud Agent Hub」完整架构文档和使用手册。
一、系统概述 Alan Cloud Agent Hub 是一个分布式节点管理平台 ,通过 Telegram Bot + HTTP API 实现远程节点的统一管理和监控。
核心能力
节点心跳监控 — 远程节点(Pi5、WSL、PC)定期上报状态
Telegram 管理 — 通过 Telegram 命令管理节点、任务、日志
自动超时检测 — Cron 定时扫描离线节点
JWT 认证 — 节点间通信使用 JWT Token 鉴权
Docker 化部署 — 支持一键容器化运行
架构总览 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 ┌─────────────┐ ┌──────────────────┐ ┌─────────────┐ │ Telegram │────▶│ Hub (VPS) │◀────│ 节点 Agent │ │ 管理员 │ │ │ │ │ │ 发送命令 │ │ ┌────────────┐ │ │ Pi5 / WSL │ │ │ │ │Telegram Bot│ │ │ / Main PC │ │ │ │ └────────────┘ │ │ │ │ │ │ │ │ POST │ │ │ │ ┌────────────┐ │ │ heartbeat │ │ │ │ │ Node API │ │ │ (JWT) │ │ │ │ │ :8082 │ │ │ │ │ │ │ └────────────┘ │ │ │ │ │ │ │ │ │ │ │ │ ┌────────────┐ │ │ │ │ │ │ │ 超时检测 │ │ │ │ │ │ │ │ (Cron 10m) │ │ │ │ │ │ │ └────────────┘ │ │ │ └─────────────┘ └──────────────────┘ └─────────────┘ │ ▼ ┌─────────────┐ │ nodes.json │ │ 节点注册表 │ └─────────────┘
二、文件结构 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 /opt/alan-cloud-agent/ ├── bots/ │ └── telegram_bot.py # Telegram 管理 Bot ├── src/ │ ├── node_api.py # Node HTTP API (FastAPI, 端口 8082) │ └── node_agent.py # 节点心跳 Agent ├── scripts/ │ └── check_node_timeout.py # 节点超时检测脚本 ├── configs/ │ ├── nodes.json # 节点注册表 │ └── .jwt_secret # JWT 签名密钥 ├── tasks/ # 任务队列目录 ├── logs/ # 日志目录 ├── docs/ │ └── USER_MANUAL.md # 完整使用手册 ├── docker-compose.yml # Docker 编排 ├── Dockerfile.bot # Bot 镜像 ├── Dockerfile.api # API 镜像 ├── Dockerfile.agent # Agent 镜像 └── .env # 环境变量配置
三、Telegram 命令参考 所有 /node 命令仅限管理员使用。
节点管理
命令
说明
示例
/node status
查看所有注册节点
/node status
/node heartbeat <name> <ip>
手动更新节点心跳
/node heartbeat Pi5 192.168.1.50
/node register <name> <type>
注册新节点
/node register MyServer development
/node renew-token <name>
轮换节点 Token
/node renew-token Pi5
/node status显示所有节点的详细信息:
1 2 3 4 5 6 7 🖥️ Registered Nodes: 🟢 Pi5 Edge (edge) IP: 192.168.1.50 | Last seen: 2026-07-05 14:30 🔴 WSL Development (development) IP: 192.168.1.100 | Last seen: 2026-07-05 12:15
🟢 = online(最近有心跳)
🔴 = offline(超时未响应)
/node register <name> <type>注册新节点并自动生成 JWT Token:
1 /node register MyServer development
支持的节点类型:
development — 开发环境(代码、测试、仓库)
file — 文件存储(磁盘、NAS、项目文件)
edge — 边缘计算(IoT、传感器、网关)
compute — 计算节点(GPU、批量处理)
monitor — 监控节点(网络扫描、健康检查)
注册成功后返回:
1 2 3 4 5 6 7 8 9 ✅ Node registered Name: MyServer Node ID: myserver-a1b2 Type: development Token: eyJhbG...NiIs... ⚠️ Save the token — it won't be shown again. Deploy node_agent.py on the new node with this token.
重要:Token 只显示一次!请妥善保存。
/node heartbeat <name> <ip>手动更新指定节点的心跳时间,适用于节点 Agent 暂时无法运行时的应急操作。
/node renew-token <name>轮换指定节点的 JWT Token(旧 Token 立即失效),用于 Token 可能泄露或定期安全轮换。
任务管理
命令
说明
/task list
查看任务队列
/task create <title> <type> <command>
创建新任务
/task status <task_id>
查看任务详情
/task complete <task_id>
标记任务完成(管理员)
/task fail <task_id> [reason]
标记任务失败(管理员)
系统信息
命令
说明
/status
Hub 健康检查 + 进程状态 + 任务统计
/brief
今日摘要(日志、任务、Cron、进程)
/logs
最近 20 条日志
/logs tail <N>
最近 N 条日志
/logs filter <keyword>
搜索日志
/help
完整命令列表
四、HTTP API 参考 节点心跳 1 2 3 4 5 6 7 8 9 10 11 POST /api/node/heartbeat Content-Type: application/json { "node_id": "pi5-edge", "name": "Pi5 Edge", "type": "edge", "address": "192.168.1.50", "capabilities": ["homeassistant", "growatt"], "token": "<jwt-token>" }
成功响应 (200):
1 2 3 4 5 6 7 { "status" : "ok" , "node_id" : "pi5-edge" , "updated_fields" : [ "name" , "type" , "address" , "capabilities" , "last_heartbeat" , "status" ] , "last_heartbeat" : "2026-07-05 14:30" , "node_status" : "online" }
查询节点状态
健康检查
五、节点部署指南 前置条件 在每台远程节点(Pi5、WSL、Main PC)上安装依赖:
1 pip install requests python-jose[cryptography]
配置 .env 在节点上创建 .env 文件:
1 2 3 4 5 6 7 8 HUB_URL=http://<hub-ip>:8082 NODE_ID=pi5-edge NODE_TOKEN=<从 /node register 获取的 token> INTERVAL=60 NODE_NAME=Pi5 Edge NODE_TYPE=edge NODE_ADDRESS=192.168.1.50 CAPABILITIES=homeassistant,growatt,network_scan
运行模式 前台调试:
1 2 python3 node_agent.py --once python3 node_agent.py
后台运行(systemd):
创建 /etc/systemd/system/alan-node-agent.service:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 [Unit] Description =Alan Cloud Agent Hub — Node AgentAfter =network.target[Service] Type =simpleUser =rootWorkingDirectory =/path/to/node_agent_dirExecStart =/usr/bin/python3 /path/to/node_agent.pyRestart =on -failureRestartSec =10 [Install] WantedBy =multi-user.target
启用并启动:
1 2 3 systemctl daemon-reload systemctl enable alan-node-agent systemctl start alan-node-agent
六、节点状态流转 1 2 3 4 5 6 7 8 9 10 11 未注册 ──(/node register)──▶ 已注册(offline) │ (首次心跳成功) │ ▼ 在线(online) │ (> 超时阈值无心跳) │ ▼ 离线(offline)
超时检测机制
检测频率 :每 10 分钟执行一次(Cron)
超时阈值 :5 分钟(可配置)
触发条件 :仅当节点当前状态为 online 且超时才会标记为 offline
恢复条件 :节点发送心跳后自动恢复为 online
七、安全说明
Telegram Bot :仅管理员 ID 可执行 /node 管理命令
Node API :所有心跳请求需携带有效 JWT Token
JWT Token :HS256 算法,24 小时有效期
MVP 阶段无 TLS — 仅在可信局域网内使用
节点 Agent 不执行远程命令
八、Docker 部署 构建镜像 1 2 cd /opt/alan-cloud-agentdocker compose build
启动服务 1 2 3 docker compose up -d docker compose ps docker compose logs -f bot
九、故障排查 节点显示 offline 但实际在线 1 2 3 4 5 6 7 8 9 10 11 ps aux | grep node_agent python3 node_agent.py --once curl http://<hub-ip>:8082/health /node heartbeat <name> <ip>
Telegram Bot 无响应 1 2 3 4 5 6 7 8 9 10 ps aux | grep telegram_bot tail -50 /opt/alan-cloud-agent/logs/hub.logpkill -f telegram_bot.py cd /opt/alan-cloud-agentpython3 bots/telegram_bot.py --real
Node API 无法连接 1 2 3 4 5 6 7 8 9 systemctl status alan-node-api curl http://localhost:8082/health curl http://localhost:8082/api/node/status systemctl restart alan-node-api
十、常用命令速查 1 2 3 4 5 6 7 8 9 10 11 12 13 systemctl status alan-node-api systemctl restart alan-node-api python3 bots/telegram_bot.py --real curl http://localhost:8082/health curl http://localhost:8082/api/node/status python3 scripts/check_node_timeout.py tail -f /opt/alan-cloud-agent/logs/hub.logtail -f /opt/alan-cloud-agent/logs/node_timeout.log
本文档最后更新:2026-07-05 | 版本:0.3.0-MVP