dsh-server-monitor:在 DSH 内监控服务器与控制 QQ 容器

前言

在 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 端口

服务器端要求

插件运行前,服务器端需要满足以下条件:

  1. 运行 qqbot-monitor 服务,绑定到 127.0.0.1:6186
  2. 提供 /api/stats 接口用于获取监控数据
  3. 提供 POST /api/action 接口,支持 purge_cache、restart_snow、restart_ast、restart_both 动作
  4. 提供 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
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜