Memo:在 VPS 上搭建 DeepSeek Harness + One API 接入
起因
VPS 上已经跑着 K3s、n8n、WordPress、One API、Whisper 等一堆服务。想再加一个能做文件操作和命令执行的 AI Agent 工具,看看能不能用它来管理现有的服务配置。
DeepSeek Harness(dsh)是 DeepSeek 官方开源的 AI Agent 运行框架,定位是“把模型接入文件系统、终端、网页、代码工具”的运行时。它的核心设计原则是 “一切皆插件”——模型适配器、工具、会话、Agent Loop 本身都可以替换。
关键洞察:Harness 本身不是模型,只是一个“壳”。它可以通过 openai-completions 协议对接任何 OpenAI 兼容端点。你的 One API 正好符合,不需要另外申请 DeepSeek 官方 Key。
环境
- VPS:Ubuntu 22.04,内存 5.8Gi,可用约 1.8Gi
- Node.js:v24.18.0
- 已运行服务:K3s、n8n、WordPress、One API、Whisper
- One API:
http://172.17.0.1:3000
安装步骤
第一步:安装 Node.js
bash
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - sudo apt-get install -y nodejs node -v npm -v
预期输出 v20.x.x 和 10.x.x。我这边装出来的是 v24.18.0 和 11.16.0,也可以。
踩坑:安装过程中会出现一个内核升级提示框(Pending kernel upgrade),按 Enter 关掉即可,不影响 Node.js 安装。
第二步:启动 Harness
bash
npx @deepseek-ai/dsh web --no-open
首次运行会提示安装 @deepseek-ai/dsh@0.1.5-rc.1,输入 y 确认。
启动成功后输出:
text
dsh web: http://127.0.0.1:3080/?token=5oU2TX_lQapdHy-xPpnLU1MlXxoS7Z9B-SumikkwM_o
关键点:
--no-open:因为你在 SSH 里,不需要它尝试打开浏览器- 监听地址是
127.0.0.1:3080,只在本机可访问 - URL 里的
?token=...是一次性访问令牌,不要泄露
第三步:SSH 隧道
Harness 只监听 127.0.0.1,公网访问不到。用 SSH 隧道转发:
在本地电脑的新终端执行:
bash
ssh -L 3081:127.0.0.1:3080 root@162.43.92.249 -N
- 本地
3081端口 → 远程3080端口 -N表示不执行远程命令,只做端口转发- 这个终端要一直开着,关掉隧道就断了
然后本地浏览器打开:
text
http://127.0.0.1:3081/?token=5oU2TX_lQapdHy-xPpnLU1MlXxoS7Z9B-SumikkwM_o
注意端口是 3081(本地转发端口),不是 3080。
第四步:配置模型
打开 Web UI 后,会看到 “Add an API key to get started” 的提示。不要申请 DeepSeek 官方 Key,直接用已有的 One API。
- 点击 “Configure Later” 跳过官方配置
- 进入 Settings → Models → Add a custom provider
- 填入:
| 字段 | 值 |
|---|---|
| Provider ID | oneapi |
| Display Name | One API |
| Base URL | http://172.17.0.1:3000/v1 |
| API Protocol | openai-completions |
| API Key | sk-你的OneAPI令牌 |
| Model ID | deepseek-ai/deepseek-v4-flash-0731 |
- 保存
第五步:切换模型并测试
关键一步:添加 provider 后,必须在聊天界面的模型选择器里切换到 One API 的模型,否则会报错:
text
no API key for provider route "deepseek-official"
这是因为 Harness 默认使用 DeepSeek 官方路由,需要手动切换到你的自定义 provider。
切换到 One API 的模型后,发一条测试消息:
text
你好,请用一句话介绍你自己
预期返回:
text
你好!我是基于 DeepSeek 大模型的 AI 编程助手...
当前状态
| 组件 | 状态 |
|---|---|
| Node.js | ✅ v24.18.0 |
| DeepSeek Harness | ✅ 运行在 3080 |
| One API provider | ✅ 已配置 |
| 模型 | deepseek-ai/deepseek-v4-flash-0731 |
| SSH 隧道 | ✅ 本地 3081 → 远程 3080 |
踩坑记录
1. 内核升级提示框卡住安装apt-get install 过程中出现 Pending kernel upgrade 提示框,按 Enter 关掉即可。不是错误,系统只是提示有新内核可用但需要重启生效。
2. no API key for provider route "deepseek-official"
添加自定义 provider 后,Harness 默认还是走 DeepSeek 官方路由。必须在模型选择器里手动切换到 One API。
3. 端口选择
本地转发端口用 3081,避免和远程 3080 混淆。浏览器访问时注意用 3081。
4. Token 是一次性的
URL 里的 ?token=... 是访问令牌。如果关闭 Harness 重启,token 会变,需要重新获取 URL。
下一步可以做的事
Harness 是一个有文件操作和命令执行能力的 Agent,可以:
- 读取配置文件:比如
~/.openclaw/openclaw.json - 修改配置:更新 Telegram botToken 等
- 执行命令:查看系统资源、检查服务状态
- 管理 OpenClaw:通过 ACP 协议桥接
测试指令示例:
text
帮我查看当前目录下有哪些文件
text
读取 ~/.openclaw/openclaw.json,告诉我里面配置了哪些 channel
text
运行 free -h 和 df -h,告诉我系统资源状况
安全提醒
Harness 有文件读写和命令执行能力。在生产环境使用前:
- 不要给它 root 权限:如果它跑在 root 下,任何误操作都可能影响整个 VPS
- 限制工作目录:在配置里指定沙箱目录,避免它访问敏感文件
- 人工审核关键操作:修改配置文件、执行删除命令前,让它先展示计划再执行
持久化运行(可选)
当前 Harness 是前台运行,关闭 SSH 会话会被终止。想后台运行:
bash
nohup npx @deepseek-ai/dsh web --no-open > /var/log/dsh.log 2>&1 &
但建议先在前台跑通、确认稳定后再持久化。
关键文件位置
| 项目 | 位置 |
|---|---|
| Harness Web UI | http://127.0.0.1:3081(本地隧道) |
| 远程监听 | 127.0.0.1:3080 |
| One API | http://172.17.0.1:3000 |
| 模型 | deepseek-ai/deepseek-v4-flash-0731 |
一句话总结
npx 启动 Harness → SSH 隧道转发 → 配置 One API provider → 切换模型 → 测试。 不需要 DeepSeek 官方 Key,复用已有的 One API 网关即可。
