在阿里云 ECS 上跑 Web 版 DSH,撤回键为什么按不出来
本地装插件,装完就能用;同样一条命令搬到 ECS 上,重启之后页面上既没有撤回键,设置里也找不到插件卡片。多数人第一反应是「插件和宿主不兼容」,更常见的原因其实是:浏览器加载的那份前端资源,和你刚装好的那份不是同一份。
dsh-easyrewrite 是 DSH Web 的消息层插件(2.6.0,MIT),做两件事:复制键旁边常驻撤回键,撤回某条消息及其后的内容;单击自己的气泡就地编辑并重发。能力全在浏览器侧,链路一旦被反代、缓存、端口或用户目录切开,表现就是「按不出来」——不是报错,是安静地什么都没有。
先把「按不出来」拆成三种
前端没加载:dsh plugin add 之后 dsh web 还跑着启动时的插件清单,新插件没进 bundle。加载了但页面不是新的:反向代理或浏览器缓存住了上一版 HTML。加载到了别的 Profile:插件挂在 web 下,而你访问的端口对应的进程不是它。先看进程,再看缓存,最后看 profile。
安装与最小自检
dsh plugin --profile web add dsh-easyrewrite
dsh --profile web --dump-config | grep dsh-easyrewrite
第二条要能打出一行。接着重启 dsh web,浏览器 Ctrl+Shift+R 硬刷新,然后看两处:自己发的消息悬停时,复制键旁应出现撤回键;设置 → 插件 → EasyRewrite 应有一张折叠卡片。两处都在,才算装成。
界面仍然没有,就翻日志:
tail -n 50 "$DSH_HOME/dsh-easyrewrite.log"
日志是 JSON 行(t / level / tag / message / data),只记本地行为。里面没有加载记录,说明前端没跑到这一步,问题在资源分发。
ECS 侧四项配置
安全组:只对公网放反向代理的 80 / 443,DSH Web 的监听端口不单独放行。从外部 curl 那个端口应当超时;返回页面就说明它在裸奔。
监听与反代:让 dsh web 绑 127.0.0.1,同机 Nginx 转发并补 WebSocket 的 upgrade 头。前端靠这条通道拉会话与待定状态,只代理 HTTP 时页面能开、按钮也画得出来,但撤回胶囊点了没反应。
访问方式:不想开反代就用 SSH 隧道,ssh -L 3080:127.0.0.1:3080 <user>@<ecs-ip>,本地浏览器访问 127.0.0.1:3080 即可,不用动安全组。
实例与目录:单个会话 1 核 2G 起步就够跑。规格再往下压到 1G 时,若碰到刷新中途连接被重置,先看内存占用,别先怀疑插件坏了。另外 $DSH_HOME 默认在运行用户的 ~/.dsh:用 root 装、普通用户跑是最经典的错配,插件在 /root/.dsh/profiles/web,进程读 /home/<user>/.dsh/profiles/web。
四个坑
坑一 · 装完不重启、不硬刷新,等于没装
现象:dsh plugin add 提示成功,页面上既没有撤回键也没有设置卡片。原因:dsh web 持有的是启动时加载的插件清单,新增插件不会热生效;浏览器侧还叠着一层 HTML 缓存。解决:重启 dsh web,再 Ctrl+Shift+R,两步缺一不可,只做一步的现象与完全没装一致。
坑二 · 回复还在生成时点撤回,按了也没用
现象:撤回键点下去没有确认胶囊,或提示「该消息所在回合尚未结束」。原因:DSH 的 fork 只能在闭合回合边界截断,未结束的回合没有截断点。解决:等这一轮跑完再撤;想中途换方向用停止生成。云上更容易踩到:反代下的流式输出比本地慢,你会更早想打断它。
坑三 · 版本线走错会静默降级
现象:插件装上了,界面也出来了,某些功能却不响应,控制台也没报错。原因:README 的适配声明只覆盖 0.1.7-rc.1+ 与 0.1.2-rc.1+ 两代,0.1.1-rc.2 及更早必须停在 2.3.1;而站点实测是在 0.2.1-rc.2 上装通的,0.2.x 不在那份声明里。解决:先 dsh --version 对一遍,落在声明之外就在预发布环境实测再上生产;老宿主直接装 2.3.1 那条线。
坑四 · 覆盖模式下,撤回内容会顶掉你正在写的草稿
现象:输入框里写了一半的新问题,撤回一条旧消息后原文不见了。原因:回填冲突模式设成了「覆盖」,撤回内容直接占据输入框。解决:原草稿没丢,发送或取消后会完整恢复;不想经历这个中间态,就在设置里改掉这个模式。
总结
云上「按不出来」多数不是兼容问题,而是你看的页面、跑的进程、装的 profile 三者没对齐;把重启与硬刷新做成固定动作,再按安全组、反代、profile、家目录四项对一遍,问题基本就定位完了,同类插件的中文清单与安装形态见 DeepSeek Harness Hub 插件清单。
适合与不适合
适合:DSH Web 已跑在 ECS、用 Nginx 反代的团队;多人共用一台实例、插件按 profile 分发管理的环境;经常在长会话里改措辞、又要保留原图附件的排障场景;愿意照日志定位、不指望界面弹错误提示的人。
不适合:只在桌面端或终端里用 DSH 的人,这套交互只覆盖 Web 消息层;宿主停在 0.1.1-rc.2 及更早又不便升级的实例,只能用旧版本线;1 核 1G 且无法升配的边缘实例,硬刷新时容易把连接打断;要求明确安全结论的团队,它的扫描结果是「含敏感能力、尚无人工评估」,仓库最近一次提交也在 32 天前。
标签:消息撤回重编辑、DeepSeek Harness、阿里云 ECS、部署排障
本文由 DeepSeek Harness Hub 自动整理,数据来源于插件详情页。