Ubuntu 22.04+ / Debian 12+ · 2C2G 起 · 无需 Docker

把 DeepSeek Harness 装进你的 VPS

一条命令,公网可达,界面原样。零运行时依赖的登录网关架在 DSH 前面,自动 HTTPS、开机自启、升级失败自动回滚 —— 设置、模型、API Key、插件市场,该有的都有。

MIT npm: dsh-vps runtime deps: 0 no Docker systemd
这是 DSH 的 VPS 部署工具,不是在 DSH 里安装的插件。在 VPS 上执行下面的一键安装命令,它会装好带登录界面的 DSH 本身。
$ curl -fsSL https://raw.githubusercontent.com/AIcivilization/deepseek-harness-vps/main/install.sh | sudo bash -s

有域名、或在国内网络,末尾追加参数:--domain dsh.example.com --mirror cn

能力一览

DSH 只认本机浏览器,它把这道门搬到了公网

DSH 的特权接口(设置、API Key、插件管理)受浏览器信任围栏保护,直接反代到公网后这些页面全部失效。dsh-vps 让公网请求先过登录门,再由网关以服务端身份完成会话认证并透传。

install

一键安装

curl | bash,装完即 systemd 托管、开机自启。

auth

登录门

scrypt 口令 + HMAC 会话 Cookie + 登录限流,公网请求先过这一关。

wizard

浏览器初始向导

管理员账号、域名、DeepSeek API Key、预置插件,全程在浏览器里填完。

token

一次性启动令牌

向导只对持有令牌的人开放,设置完成即作废;链接丢了 dsh-vps setup-url 重取。

https

自动 HTTPS

Caddy 自动签发并续期证书,向导里改域名即时热加载。

native

公网可用的原生设置页

设置、模型、API Key、权限策略在公网域名下照常读写。

market

插件市场可用

市场里浏览、安装插件,点「立即重启」直接生效。

upgrade

安全升级

版本钉在已验证清单内,升级走备份 → 自检 → 失败自动回滚,也可随时手动回滚。

recover

可观测与可恢复

/gate/health 直接给出崩溃原因与连续崩溃次数,dsh-vps backup 保留最近 3 份。

private

仅我可访问

一条命令建 WireGuard 隧道,之后公网连登录页都摸不到;也可用 SSH 本地转发。

实际效果

从安装到插件市场,全程原生界面

点任意一张图可放大查看。

全流程演示:安装 → 设置向导 → 登录 → DSH 界面 → 插件市场
安装完成
安装完成
初始设置向导
初始设置向导
向导已填写
向导已填写
设置完成
设置完成
登录门
登录门
登录
登录
DSH 原生界面
DSH 原生界面
设置页(公网域名下可用)
设置(公网域名下可用)
插件市场
插件市场
安装

一条命令,剩下的交给向导

安装结束时终端会打印一条带一次性令牌的初始设置链接,浏览器打开它进入向导。直接打开 IP 或域名只会看到「需要启动令牌」页 —— 这是有意的。

curl -fsSL https://raw.githubusercontent.com/AIcivilization/deepseek-harness-vps/main/install.sh \ | sudo bash -s -- --domain dsh.example.com

把 dsh.example.com 换成你的域名,并先把它的 A 记录解析到这台机器。

curl -fsSL https://raw.githubusercontent.com/AIcivilization/deepseek-harness-vps/main/install.sh \ | sudo bash -s -- --domain dsh.example.com --mirror cn

加 --mirror cn 后,Node 与 DSH 走 npmmirror。

curl -fsSL https://raw.githubusercontent.com/AIcivilization/deepseek-harness-vps/main/install.sh | sudo bash -s

证书由 Caddy 内置 CA 自签,浏览器会提示「不安全 / 证书不受信任」,属预期现象,选择继续访问即可。之后在向导里填上域名,Caddy 自动换成正式证书。

npx dsh-vps-install install --domain dsh.example.com

装的是这个包自带的同一份脚本,版本固定、不联网拉取;需本机已有 Node 22+。

curl -fsSL https://raw.githubusercontent.com/AIcivilization/deepseek-harness-vps/v1.4.3/install.sh \ | sudo DSHVPS_RAW_BASE=https://raw.githubusercontent.com/AIcivilization/deepseek-harness-vps/v1.4.3 bash -s -- --domain dsh.example.com

把地址里的 main 换成版本 tag,并让后续拉取的网关文件也用同一版本。

curl -fsSL https://raw.githubusercontent.com/AIcivilization/deepseek-harness-vps/main/uninstall.sh \ | sudo bash -s -- --yes

删除服务、安装目录、Caddy 站点块与 DSH 数据目录,删除前打包备份(含 Caddyfile)到 /root/dsh-vps-uninstall-<时间戳>.tar.gz。--keep-data 保留 DSH 数据,--purge-caddy 连 Caddy 一起移除。

环境要求

  • 系统Ubuntu 22.04+ / Debian 12+(root)
  • 配置2 核 2G 以上
  • 端口80 / 443 开放
  • 域名可选;有则自动 HTTPS,无则先用公网 IP + 自签证书
运行机制

三层都只绑回环,浏览器接触不到 DSH 的会话 Cookie

dsh-vps 请求链路 浏览器通过 HTTPS 访问 Caddy,Caddy 反向代理到仅监听回环的登录网关 dsh-gate,网关认证后透传给同样只监听回环的官方原版 DSH。 浏览器 任意网络位置 HTTPS Caddy :443 · 自动证书 回环 dsh-gate :3100 · 登录门 回环 dsh web :3080 · 原版 公网 终止 TLS 口令 · 限流 · 会话 界面零改动 Caddy、网关、DSH 都在同一台机器上;网关与 DSH 只绑 127.0.0.1,浏览器接触不到 DSH 会话 Cookie 网关额外做的三件事 下发 ownsHost 声明恢复公网设置页 · 剥掉 X-Forwarded-For 让插件市场可重启 · 会话未就绪时自动等待并刷新
  • 会话自愈:首启与插件安装期间页面显示「DeepSeek Harness 正在启动」,按 3 秒一次自检,会话就绪后自动刷新进入。
  • 设置页可用性:网关随页面下发官方支持的 __DSH_TRANSPORT__.ownsHost 声明,设置页、模型、API Key 与权限策略随之恢复;--trusted-host 只负责打开网络围栏,两者是两道独立的门。
  • 插件市场重启:网关剥掉 Caddy 加的 X-Forwarded-For(该头会触发 DSH 回环校验而 403),并重启自己托管的 DSH 子进程,保证会话兑换链路不中断。
  • 排障入口:sudo ss -ltnp | grep 3080 查残留 DSH 进程;服务器上执行 curl -s http://127.0.0.1:3100/gate/health 可拿到 lastError / lastExit / crashStreak。
  • 收紧的暴露面:会话 Cookie 恒为 Secure/HttpOnly/SameSite;诊断接口只对服务器本机与已登录会话开放;服务以无特权的 dsh 用户运行并受 systemd 沙箱约束。

仓库内容

文件作用
install.sh一键安装入口(可选参数 --domain、--mirror cn)
uninstall.sh卸载并备份
bin/dsh-vps运维命令行
gate/server.js登录网关(Node 原生,零依赖)
gate/site-block.jsCaddy 站点块模板(安装 / 改域名 / 隧道开关共用)
caddy/Caddyfile.templateCaddy 主配置
units/dsh-gate.servicesystemd 单元模板
versions.jsonDSH 已验证版本清单
管理命令

装完之后,都在 dsh-vps 里

sudo dsh-vps status # 服务状态 + 健康 + 版本提示 sudo dsh-vps restart # 重启(DSH 随之重启并自动重新兑换会话) sudo dsh-vps upgrade # 升级 DSH 到已验证版本(备份 → 自检 → 失败自动回滚) sudo dsh-vps update-gate # 拉取并重启网关自身代码 sudo dsh-vps rollback # 切回上一 DSH 版本 sudo dsh-vps setup-url # 重新打印带一次性令牌的初始设置链接 sudo dsh-vps backup # 备份数据(保留最近 3 份) sudo dsh-vps vpn setup macbook # 建 WireGuard 隧道并切到「仅隧道可访问」 sudo dsh-vps vpn add iphone # 再签发一台设备(打印配置 + 二维码) sudo dsh-vps tunnel # 零安装备选:SSH 本地端口转发用法

DSH 本身跟随官方版本升级:网关每 6 小时检查一次 npm 上的官方最新版,有新版本时页面右下角弹出提示,点「立即升级」并确认即可,全程约 1–3 分钟。

FAQ

几个常见疑问

它会改动 DSH 本身吗?

不会。装的是 npm 上的官方原版 DSH,前端零改动;公网下缺失的能力由网关随页面下发官方支持的 ownsHost 声明补齐,不动源码。

需要 Docker 吗?

不需要。Caddy + 一个零运行时依赖的 Node 网关 + 官方 DSH,全部由 systemd 托管,开机自启。

没有域名能用吗?

能。去掉 --domain 直接按公网 IP 安装,证书由 Caddy 内置 CA 自签,浏览器会提示不受信任,选择继续访问即可;之后在向导里补上域名,Caddy 自动换成正式证书。

升级失败会把我机器搞挂吗?

升级走备份 → 安装 → 自检,自检不通过自动回滚到原版本,也可以随时 sudo dsh-vps rollback 手动切回。DSH 版本钉在 versions.json 里已验证的清单内。

不想让公网看到登录页怎么办?

sudo dsh-vps vpn setup macbook 建一条 WireGuard 隧道,之后 Caddy 只放行隧道网段,扫描器连握手都拿不到;域名与证书照旧,续期不受影响。只在电脑上用的话,sudo dsh-vps tunnel 走 SSH 本地转发,什么都不用装。

预置插件装了什么?

两款:dsh-market(设置页内浏览、搜索、一键安装社区插件与主题)和 dsh-vps-manager(在 DSH 里直接管理这台 VPS)。默认全选、可取消,后台安装后 DSH 自动重启生效。