在犀牛派X1上一键部署DeepSeek Harness
适用场景:在 ARM64 Linux 设备上(如犀牛派 X1)一键部署 DeepSeek Harness(dsh),并通过局域网 HTTPS 反代访问。
适合人群:希望在本地设备上快速跑通一个带 Web UI 的 AI Agent,并支持局域网访问、便于开发和调试。
1. 先说结论
本方案适合在 犀牛派X1 设备上直接部署,不依赖 Docker。
核心思路很简单:
- 在设备上安装 Node 24 与 dsh
- 配置 Anthropic 兼容网关地址
- 让 dsh 监听本地 127.0.0.1:3080
- 通过 nginx 做局域网 HTTPS 反代
- 再加一层 Basic Auth 做访问控制
2. 适用环境
建议满足以下条件:
- ARM64 Linux(如 aarch64 / arm64)
- Ubuntu 22.04 / Debian 系发行版或类似
- 已安装 curl、tar、xz
- 可以访问外网,用于下载 Node / npm 包
- 已拿到模型网关地址和 API Key
查看架构:
uname -m
如果输出为 aarch64 或 arm64,说明可以直接用此方案。
3. 目录说明
整个部署逻辑被收敛到一个脚本里,请点击下载:
它会自动完成以下工作:
- 安装 Node 24
- 安装 dsh
- 写入 ~/.dsh/settings.yaml
- 写入 ~/.dsh/.credentials.yaml
- 注册 systemd 服务
- 可选配置 nginx 局域网 HTTPS 反代
4. 先准备好两个关键参数
部署前,先确认这两个关键信息:
4.1 设备 IP
用于 SSH / 局域网访问:
hostname -I | awk '{print $1}'
例如:
192.168.112.185
4.2 模型网关地址
这是 dsh 调用模型时真正的入口,必须是 Anthropic 兼容接口。
例如:
http://192.168.110.22:28080
注意:
- 这是模型网关,不是本地 18080 反代端口
- 如果地址填错,最终很容易出现 404 / 403
- 不能把本地 18080 反代地址当成模型网关地址
5. 一键部署
5.1 上传脚本到设备
scp deploy.sh aidlux@<设备IP>:~/
注意:
- 犀牛派 X1 的 aidlux 用户密码:aidlux
5.2 登录设备并授权执行
ssh aidlux@<设备IP>
chmod +x deploy.sh
5.3 执行部署
5.3.1 检查运行环境
最简方式:
./deploy.sh install --lan-proxy
如果你的模型网关不是默认值,可以加:
--base-url http://你的网关IP:端口
例如:
./deploy.sh install --lan-proxy --base-url http://192.168.110.22:28080
注意:
- 脚本第 237 239 行代码自动给baseURL拼接了v1,如不需要请自行修改
5.3.2 输入API Key后自动配置
5.3.3 配置局域网密码后部署完成
6. 部署完成后如何访问
6.1 本机访问
curl -I http://127.0.0.1:3080
6.2 局域网访问
部署脚本会自动生成 HTTPS 反代:
https://<设备IP>:18080
默认用户名:
aidlux
默认密码:
你设置的 DSH_PROXY_PASS,或者是 5.3.3 步骤中输入的局域网密码
首次访问时浏览器可能提示“连接不是私密连接”,选择“高级 → 继续前往”即可。
7. 常用命令
查看状态
./deploy.sh status
手动重启服务
sudo systemctl restart dsh-web
![]()
查看日志
sudo journalctl -u dsh-web -f
命令行单次对话
~/.local/node/bin/dsh --profile headless "你好"
8. 部署中最容易踩的坑
8.1 502:反向代理访问不到上游
表现:
- 127.0.0.1:3080 无响应
- 局域网访问返回 502
原因:
- dsh Web 没有真正启动
- 或者 3080 端口未监听
- 或者 --trusted-host 配置错误
典型错误:
--trusted-host 192.168.112.185:18080
正确写法:
--trusted-host 127.0.0.1 --trusted-host localhost --trusted-host 192.168.112.185
注意:
- –trusted-host 后面只能放 IP / Host
- 不能带 :PORT
- 不能混用 IPv4 和 IPv6 乱拼
8.2 403:网关收到了请求,但拒绝执行
表现:
dsh: AUTH: 403 { ... "This group does not allow /v1/messages dispatch" ... }
原因:
- API Key 不是该组/租户可用的
- 网关不允许该账号访问 /v1/messages
- 或者 key 绑定的权限不正确
解决:
- 确认 API Key 属于正确 group
- 确认网关支持 Anthropic
messagesAPI - 确认
baseURL指向正确的网关地址
8.3 404:网关地址或路由不对
表现:
dsh: PI_AI_ERROR: 404 404 page not found
原因:
- baseURL 填错了
- 网关实际上不支持 /v1/messages
- 你把本地 18080 反代地址当成了模型网关地址
解决:
- 先确认真实模型网关地址
- 再确认是否支持 Anthropic 兼容消息接口
9. 关键配置说明
脚本默认会写入如下配置:
llm-pi-ai:
providers:
deepseek-anthropic:
api: anthropic-messages
baseURL: http://你的网关地址
它是按 Anthropic 兼容接口来设计的,所以:
- 如果拿到的是 OpenAI 风格网关,可能不兼容
- 如果拿到的是不支持 /v1/messages 的网关,照样会 403 / 404
因此,最稳妥的方式是:
- 先确认提供网关的人说的是 Anthropic compatibility API
- 再填入真正能调通的 baseURL 和 API Key
10. 推荐的最终部署命令
如果你要在 ARM64 设备上直接部署,推荐用下面这套:
./deploy.sh install \
--base-url http://你的网关IP:端口 \
--api-key 你的APIKey \
--lan-proxy \
--proxy-user guo \
--proxy-pass 你的局域网密码 \
-y
如果部署完成后出现异常,再用:
./deploy.sh status
./deploy.sh proxy --port 18080 --user guo --pass 你的密码 --web-port 3080 -y
11. 结论
这套部署方案的核心价值在于:
- 不依赖 Docker
- 适用于 ARM64/Linux 设备
- 一键安装、便于维护
- 支持本机访问和局域网访问
- 适合在边缘设备或工业场景中快速落地
如果你已经确认了真实的模型网关地址、API Key 和权限,这套方案完全可以稳定跑通。







