前言¶
在 DSH(DeepSeek Harness)中管理服务器资源和运行在远程容器中的 QQ 机器人时,通常需要打开浏览器标签页、手动建立 SSH 隧道,或者在多个终端之间切换。这会打断操作流,尤其是需要频繁查看资源状态或重启容器时。dsh-server-monitor 插件把服务器资源监控窗口与容器控制功能直接嵌入到 DSH 界面中,同时提供通过 noVNC 在 DSH 内打开原生 QQ 桌面的能力,减少对外部工具和标签页的依赖。
插件定位¶
dsh-server-monitor 是一个 DSH 客户端插件,由 ZhaoZiyangShaanxi 维护。它将服务器的内存、负载、磁盘、容器级使用情况,以及清除内核缓存、重启 SnowLuma/AstrBot 等操作集成到 DSH 内部,并支持在 DSH 内通过 noVNC 打开 QQ 桌面进行扫码登录或退出,所有监控与控制操作均在 DSH 内完成,不依赖额外的浏览器标签页或手动 SSH 隧道。
核心功能¶
服务器资源监控¶
插件在 DSH 内显示以下信息:
- 内存(Memory)
- 交换空间(Swap)
- 系统负载(Load)
- 磁盘使用情况(Disk)
- 每个容器的资源使用情况(per-container stats)
这些指标通过插件向远程服务器发起请求获取,并在 DSH 界面中集中展示。
容器控制¶
提供一组按钮用于控制远程服务器上的容器:
- 清除内核缓存(clear kernel cache)
- 重启 SnowLuma
- 重启 AstrBot
- 重启两者(SnowLuma 和 AstrBot)
这些操作通过向远程的 qqbot-monitor 服务发送 POST 请求实现,具体接口为 POST /api/action,支持的 action 包括 purge_cache、restart_snow、restart_ast 和 restart_both。
QQ 登录与退出¶
插件在 DSH 内嵌入一个 noVNC 视图,用于打开远程 QQ 桌面:
- 点击「QQ 登录」会通过本地 SSH 转发打开 QQ 桌面窗口
- 点击「QQ 退出」会打开 QQ 的扫码界面,需要在 QQ 内部手动选择「退出登录」
- 插件不会提交账号密码或删除会话数据,退出操作完全在 QQ 内完成
noVNC 连接配置在本地端口 16081,远程端口 6081。插件会维护一个仅绑定本地(loopback)的 SSH 转发,并支持自动重连。
界面折叠与显示¶
监控窗口在 DSH 内默认展开,可通过折叠按钮收缩为一个小按钮,以便在不需要查看资源时减少干扰。
安装与启用¶
标准安装¶
插件通过 DSH 的 bundle 机制分发,package.json 声明了 dsh.bundle.patch 并包含 cordis.patch.yml。
在 DSH 的桌面配置文件下执行:
dsh plugin --profile desktop add https://github.com/ZhaoZiyangShaanxi/dsh-server-monitor
安装完成后,插件会自动加载到 DSH 客户端。
手动安装(开发)¶
在开发环境中,可以手动链接或安装到 DSH profile 的 node_modules,然后添加到 profile patch:
- insert:
- id: dsh-server-monitor
name: dsh-server-monitor
添加后重新加载 DSH 即可。
配置¶
插件在 $DSH_HOME/dsh-server-monitor.json 中读取配置(默认路径为 ~/.dsh/dsh-server-monitor.json)。配置项包括:
{
"host": "root@your-server",
"identityFile": "/path/to/key.pem",
"knownHostsFile": "/path/to/known_hosts",
"remotePort": 6186,
"localPort": 16186,
"remoteVncPort": 6081,
"vncPort": 16081
}
说明:
host:SSH 目标主机identityFile:SSH 私钥路径knownHostsFile:known_hosts 文件路径remotePort:远程监控服务端口(qqbot-monitor)localPort:本地 SSH 转发端口remoteVncPort:远程 noVNC 端口vncPort:本地 noVNC 端口
服务器端要求¶
插件运行前,服务器端需要满足以下条件:
- 运行
qqbot-monitor服务,绑定到127.0.0.1:6186 - 提供
/api/stats接口用于获取监控数据 - 提供
POST /api/action接口,支持purge_cache、restart_snow、restart_ast、restart_both动作 - 提供 SnowLuma noVNC 服务,绑定到
127.0.0.1:6081
QQ 桌面 VNC 可能需要设置密码。登录与退出均在 QQ 内手动完成,插件不会提交凭证或删除会话数据。
安全说明¶
插件在安全设计上做了以下限制:
- 控制请求必须同源(same-origin),跨站 POST 请求会被拒绝
- 仅允许四个监控相关的动作(清除缓存、重启容器),QQ 登录/退出不属于 API 动作
- SSH 和 VNC 连接仅绑定本地回环地址,避免直接暴露到公网
- 仓库不存储主机地址、密钥路径、VNC 密码或任何 token
- 嵌入的 VNC 假设 DSH 运行在建立 SSH 隧道的机器上
已知限制¶
- QQ 视图通过指向本地 VNC 转发的 iframe 实现,因为 WebSocket 升级无法通过 DSH 的宿主机代理,因此必须确保 VNC 转发在点击「登录」前已经就绪
- 覆盖层显示完整的远程桌面,QQ 桌面保持自己的窗口大小。如果远程屏幕尺寸为 1366x768 或更小(可通过
SNOWLUMA_SCREEN环境变量控制),则视图会填满框架 - 服务器端配置更改(如主机地址、端口)在 DSH 重启后生效。由于桌面宿主机未启用
--expose-internals,插件无法在宿主机上热重载 - 「QQ 退出」仅打开扫码界面,仍然需要在 QQ 内部点击「退出登录」;停止容器只会让机器人下线,不会结束 QQ 账号会话
测试¶
插件提供了一个测试脚本:
node dsh-server-monitor/test.mjs
运行该脚本可以验证插件的基本功能是否正常。
适用场景¶
适合以下场景使用:
- 需要在 DSH 内集中查看服务器资源与容器状态
- 需要频繁重启 SnowLuma 或 AstrBot 等容器
- 希望在 DSH 内直接通过扫码登录/退出 QQ,避免切换窗口或标签页
- 服务器环境允许在本地端口运行监控服务与 noVNC 服务
生态说明¶
DSH 采用「一切皆插件」的理念,插件由社区开发者维护,并不属于 DeepSeek 或幻方官方出品。本插件托管在 GitHub,可通过社区目录或直接访问 GitHub 仓库获取源码与文档。
总结¶
dsh-server-monitor 通过在 DSH 内嵌入资源监控面板、容器控制按钮以及基于 noVNC 的 QQ 桌面视图,将服务器管理与机器人运维操作集中在 DSH 界面内完成,减少了对外部工具的依赖。对于使用 SnowLuma 或 AstrBot 的 DSH 用户,这个插件可以显著提升日常运维的效率与体验。
- 插件目录:https://www.skillhub.cn/plugins/ZhaoZiyangShaanxi/dsh-server-monitor
- GitHub:https://github.com/ZhaoZiyangShaanxi/dsh-server-monitor