在阿里云 ECS 上给 DSH Web 装批注插件
把 DSH Web 跑在 ECS 上的人,迟早会想让它能「选中一段话再提问」。选中批注(dsh-annotation)做的就是这件事,但云主机没有桌面会话、端口默认全关,装法与排障跟本地不同。
版本信息:npm 包 @changfenhuang/dsh-annotation 1.4.11(2026 年 10 月 1 日发布),MIT 许可,Node 需 20 以上,运行时零依赖。仓库 omdsh-dev/dsh-annotation 141 星,本站信任档位「已验证」。
动手前核对三样
一是 node -v 不低于 20。
二是包名代际:v1.4.2 起从 @omdsh-dev/dsh-annotation 换成 @changfenhuang/dsh-annotation,网上大量教程还写着旧名,照旧名装会落到改名前的版本。
三是宿主版本:侧边栏文件批注要 DSH 0.1.6-alpha.1,低于它只能批注助手回复。
安装与自检
dsh plugin --profile web add @changfenhuang/dsh-annotation
dsh --profile web --dump-config | rg "id: dsh-annotation"
第二条输出必须正好一行。前端是否加载成功,在浏览器控制台再核一次:
window.__DSH_BOOT__.entries.find(({ id }) => id === '@changfenhuang/dsh-annotation')
返回值要带 url 字段;dsh 0.1.2 起不再暴露旧的裸 per-plugin URL。
四个坑
坑一 · 旧包名还留在配置里
现象:重启时终端提示 @omdsh-dev/dsh-annotation,dsh web 起不来。
原因:包名在 v1.4.2 改过,~/.dsh/profiles/web 下还留着旧依赖与旧条目。
解决:先 dsh plugin --profile web remove @omdsh-dev/dsh-annotation 再装新包;若仍报旧名,只删 cordis.patch.yml 里那条用旧名的 stale 条目,新包会自己提供 @changfenhuang/dsh-annotation 条目。
坑二 · 同一个 id 注册了两遍
现象:启动告警,或装了却看不见入口。
原因:既用 dsh plugin add 注册,又手动往 cordis.patch.yml 里 insert 了同一个 id。
解决:只留一条路。dump-config 里这个 id 必须正好 1 行,多出来的那条手动条目删掉。
坑三 · npm install 之后插件没出现
现象:node_modules 里能查到包,界面上没有批注功能。
原因:npm install 只往项目里加依赖,不会注册进 DSH 的 profile。
解决:改用 dsh plugin --profile web add @changfenhuang/dsh-annotation,并删掉项目里那条多余的直接依赖。
坑四 · 重启命令照抄报错
现象:systemctl --user restart dsh-web 提示找不到单元。
原因:单元名随安装方式不同,一键包、手写单元、容器前台进程三者名字都不一样。
解决:先 systemctl --user list-units | rg dsh 查真实单元名。容器这类无服务管理器的环境通常不用重启,client.js 每次请求不走缓存,硬刷新(Ctrl/Cmd+Shift+R)即可。
云上四项特殊配置
安全组:只对公网放反向代理的 80/443,DSH Web 监听端口不开。从外部 curl 该端口应当超时,而不是返回页面。
回环监听:服务绑 127.0.0.1,由同机 Nginx 反代并补 WebSocket 的 upgrade 头,即使安全组误开也不在公网裸奔。
常驻:用 systemctl --user 托管时要配 loginctl enable-linger <用户名>,否则登录会话结束进程会被回收,这条在本地基本碰不到。
目录权限:~/.dsh/profiles/web 及其下文件要归运行 DSH 的普通用户所有。用 root 装完再切回来,root 生成的 cordis.patch.yml 普通用户读不了,表现是改了配置却不生效。
总结
坑一到坑四看着分散,实际都指向注册链路是否唯一这一件事;云上装它的难点集中在包名代际、注册路径与进程托管三处,装完用 dump-config 与浏览器控制台各核一次即可定性;想对照同类插件的中文清单与安装形态,见 DeepSeek Harness Hub 插件清单。
适合与不适合
适合:DSH Web 已跑在 ECS、用 Nginx 反代的团队;多人共用一台实例、只有管理员能改配置的环境;从旧包名时代延续下来的存量部署;宿主在 0.1.6-alpha.1 以上、想连工作区文件一起批注的场景。
不适合:仍在 dsh 0.1.2 之前又不便升级的实例,前端加载路径与现在不同;容器托管但完全不能改启动参数的部署;想要服务端能力(归档、同步、审计)的团队,它是浏览器侧实现,不提供这些。
标签:选中批注、DeepSeek Harness、部署教程
本文由 DeepSeek Harness Hub 自动整理,数据来源于插件详情页。