dsh-server-panel:在 DSH WebUI 里做本机服务器运维控制台

前言

用 DeepSeek Harness(DSH)做本机或远程开发时,常见做法是再开 SSH、systemctl、journalctl 或单独的文件管理工具。DSH 本身已有 Web 服务与认证,若能在同一套 UI 里查看资源、管 systemd、改配置、跟日志,就不必为日常运维再堆一层入口。下面介绍社区插件 dsh-server-panel(维护者 lsl1931):把 DSH WebUI 扩展成侧栏「服务器」整页面板,不新开端口、不依赖 nginx,继承 DSH 的认证、主题、暗色模式与语言。

这是什么

dsh-server-panel 是 DSH 的 Web 客户端插件(package.json 中 dsh.client.platform 为 web)。Host 半在 dsh 进程内注册约 26 条 /dsh-server-panel/* 路由并做指标采样;Client 半注入侧栏图标与左导航(总览 / 服务 / 文件 / 日志 / 软件包 / 网络)及命令面板。访问仍经你已有的隧道到 127.0.0.1:3080 的 dsh web,插件不单独监听公网端口。

仓库:https://github.com/lsl1931/dsh-server-panel
社区目录:https://www.skillhub.cn/plugins/lsl1931/dsh-server-panel(独立社区站点,与 DeepSeek / 幻方无官方从属关系)

许可证:MIT(© 2026 lsl1931)。当前 package 版本为 0.1.0,要求 Node >= 22。

架构概览

README 中的结构可以概括为:

浏览器(经你的 SSH 隧道)
   └── 127.0.0.1:3080  dsh web
         ├── DSH 原有 UI
         └── dsh-server-panel
               ├── Client 半:左导航面板 + 命令面板
               └── Host 半:/dsh-server-panel/* 路由 + 采样器 + root 通道

Host 入口在 src/index.js(配置、采样器、sudo 会话、路由);客户端资源经 build.mjs 打进 lib/,由模块加载器加载。注意:Host 半与 dsh 同进程,同一模块路径只会加载一次;修改 src/*.js 后需重启 dsh(电源按钮)才会加载新代码;仅改 cordis.patch.yml 里的 config 可即时生效,Client 页面在重启后一并刷新。

核心功能

界面为 v2 布局:顶栏含主机名、发行版/负载/内存摘要、命令面板(⌘K / Ctrl+K)、自动刷新、root 身份胶囊;左导航对应六个页面。

页面 能力(据 README)
总览 异常横幅(failed 单元、磁盘 ≥85%、内存 ≥90%、负载超核数、可升级包);CPU/内存/磁盘/系统 KPI;常用服务快启(可收藏);本次会话操作事件流
服务 分组(失败/运行中/开机自启/全部)与搜索;行内启停重启;右侧抽屉查看状态与 实时跟随 的 journalctl
文件 面包屑与书签;列表与覆盖层编辑器(mtime 冲突检测);上传/下载/新建/重命名/删除/chmod/chown
日志 按单元与关键字过滤,实时跟随,行数可选 100–1000
软件包 apt 模拟升级列表、单包/全部升级、刷新索引、已安装查询
网络 网卡(IP + 实时速率)、监听端口(root 时含全部进程名)、已建立连接 Top、防火墙现状

命令面板可跳页、解锁/锁定 root、刷新、暂停轮询、打开 /etc 或 /var/log、刷新 apt 索引、升级全部。

Host 侧主要 HTTP 路由包括(节选):GET /health、/overview;GET /services、/services/logs;POST /services/action;GET/POST /sudo/state、/sudo/unlock、/sudo/lock;文件相关 GET/PUT/POST 于 /files/*;软件包 /packages/*;网络 /network/overview、/listeners、/connections。完整表见仓库 README。

权限模型与安全

插件在未解锁与已解锁(root 通道)两种模式下能力不同:

  • 未解锁:文件限于白名单路径(如 ~、/etc、/var/log 等);日志仅本用户可见;服务与软件包只读。
  • 已解锁:在面板输入 sudo 密码后,各模块请求自动带 root=1;文件可全盘读写;日志全量;服务可启停/重启/自启;软件包可更新/升级。需要权限的操作若未解锁会先弹解锁框,成功后自动重试。

写系统目录(/etc、/boot、/usr、/lib*、/bin、/sbin、/var/lib)需二次确认;删除关键目录(/、/etc、/usr、/home 等)会被拒绝。密码仅通过 sudo -S 的 stdin 使用,保存在 dsh 进程内存;锁定、空闲 10 分钟或卸载插件会清除并执行 sudo -k。README 明确:解锁后可 root 改系统配置、启停服务;请只在本机或可信隧道后使用,不要把 3080 暴露到局域网或公网。

安装与构建

官方 README 未给出 dsh plugin add github:... 一类单行命令,安装方式为通过 DSH 的 plugin_manager → install_bundle,target 设为插件目录的绝对路径。开发者本地可先构建与测试:

node build.mjs          # 构建:src/*.js → lib/*.js
node test/run.mjs       # 10 个测试文件、90+ 断言

安装前请自行阅读仓库源码与 MIT 许可证;插件以当前 dsh 进程权限运行,解锁后影响面等同于在本机使用 sudo/root。

典型用法

  1. 在 DSH WebUI 侧栏点击「服务器」图标,进入整页面板。
  2. 在 总览 看 KPI 与异常横幅;需要改服务时在 服务 页搜索单元,必要时先解锁 root 再启停/重启,并在抽屉里跟 journalctl。
  3. 改配置走 文件 页(书签可快速到 /etc);写系统目录时按提示二次确认。
  4. 排障用 日志 页按单元过滤并实时跟随;补丁管理用 软件包 页刷新索引后单包或全部升级。
  5. 用 ⌘K / Ctrl+K 打开命令面板,可快速跳页、锁定 root、暂停轮询或打开常用目录。

适用场景与注意

适合:已在用 DSH Web 隧道管理本机或开发机、希望少开终端即可完成 systemd、日志、apt 与基础网络排查的开发者。

注意:

  • 分类为客户端插件,能力绑定 dsh web 与 Host 路由,不是独立守护进程。
  • 依赖 systemd、journalctl、apt 及 README 中列出的命令行工具环境;网络与指标来自 /proc 采样及 ip -j、ss 等解析。
  • 修改 Host 源码后必须重启 dsh;生产使用前建议跑通 node test/run.mjs。
  • 社区目录星标等元数据以站点为准;功能描述以 GitHub README 为准。

结尾

dsh-server-panel 把 DSH WebUI 收成一枚本机运维控制台:资源总览、systemd 与实时日志、带 sudo 闸门的文件与 apt、网络快照,且复用 DSH 已有认证与主题。若你已在隧道里用 dsh web,可按 README 的 bundle 安装方式接入,并严格遵守 root 解锁与 localhost 暴露面的安全说明。

羽毛球分组比赛记分
小程序二维码

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

Xiaoye