DeepSeek Harness (dsh) 在 Android Termux 部署指南

目标:在安卓手机(Termux)里跑起 DeepSeek Harness 的 Web UI,用手机浏览器直接访问 http://127.0.0.1:3080

适用:任何 Android 手机 + Termux(含 Google Play 版)。全程只需在 Termux 里执行命令。


0. 简介

DeepSeek Harness(简称 dsh)是 DeepSeek AI 开源的 agent harness(“一切皆插件”,TypeScript,MIT,开发者预览版)。它不是原生安卓 App,而是 Node.js 命令行 + 本地 Web UI。

在安卓上最干净的用法就是 Termux 里跑 dsh web,手机 Chrome 直连 localhost——因为 Termux 原生运行在安卓上,它的 127.0.0.1 就是手机自己的回环地址,浏览器能直接访问。


1. 前提条件

项目说明
Termux已安装(Google Play 版 / F-Droid 版均可)
网络能访问 termux.net 和 npm registry
存储约 1 GB(编译工具 + node 依赖)
DeepSeek API key使用 agent 时需要(安装阶段不需要)

注意:Google Play 版 Termux 的 Node 报告 process.platform = "android"(而非 linux),这会导致 node-gyp 编译原生模块时报错,本指南已在第 2 步处理。


2. 一键安装(推荐)

在 Termux 里逐段粘贴执行即可(共 5 步,约 5~10 分钟)。

第 1 段:基础环境

pkg update -y
pkg install -y nodejs clang make python binutils pkg-config cmake ninja

说明:node-pty 用 node-gyp(需要 clang/make/python),koffi 用 cmake,故要一起装。

第 2 段:下载并修补 Node 头文件(关键)

NODE_VER=$(node -v | tr -d v)
HEADER_DIR="$HOME/.cache/node-gyp/$NODE_VER"
if [ ! -f "$HEADER_DIR/include/node/common.gypi" ]; then
  mkdir -p "$HOME/.cache/node-gyp"
  curl -fsSL "https://nodejs.org/download/release/v$NODE_VER/node-v$NODE_VER-headers.tar.gz" -o /tmp/node-headers.tgz
  tar -xzf /tmp/node-headers.tgz -C "$HOME/.cache/node-gyp"
  mv "$HOME/.cache/node-gyp/node-v$NODE_VER" "$HEADER_DIR"
  rm -f /tmp/node-headers.tgz
fi
sed -i "s#, '-I<(android_ndk_path)/sources/android/cpufeatures'##" "$HEADER_DIR/include/node/common.gypi"
echo "头文件已就绪并修补:$HEADER_DIR"

这一步解决 Google Play 版 Node 的 platform=android 导致 node-pty 编译时 android_ndk_path 变量未定义的报错。

第 3 段:安装 dsh(放行原生模块 install 脚本)

npm install -g --allow-scripts=@deepseek-ai/dsh-subprocess-local,koffi,node-pty,@google/genai,protobufjs @deepseek-ai/dsh

npm 11.17 起有 allow-scripts 安全特性,默认拦截所有 install 脚本。这里显式放行 5 个需要编译/初始化的包,node-ptykoffi 才能从源码编译出来。

第 4 段:安装 sharp 的 WebAssembly 回退

npm install -g @img/sharp-wasm32

sharp(图像库)没有 Android 预编译二进制,装 wasm 版作为运行时回退。

第 5 段:验证安装

dsh --version

输出 0.1.0-rc.7(或更高)即安装成功。


3. 分步说明(手动版,与一键版等价)

如果不想用一键脚本,手动执行等价步骤:

  1. pkg update -y && pkg install -y nodejs clang make python binutils pkg-config cmake ninja
  2. 下载 Node 头文件并执行:
    sed -i "s#, '-I<(android_ndk_path)/sources/android/cpufeatures'##" ~/.cache/node-gyp/$(node -v|tr -d v)/include/node/common.gypi
  3. npm install -g --allow-scripts=@deepseek-ai/dsh-subprocess-local,koffi,node-pty,@google/genai,protobufjs @deepseek-ai/dsh
  4. npm install -g @img/sharp-wasm32

4. 启动

方式一:封装好的命令(推荐)

先创建启动脚本,之后每次只需一条命令:

cat > "$PREFIX/bin/dsh-web" <<'EOF'
#!/data/data/com.termux/files/usr/bin/bash
pkill -f "dsh/lib/bin.js" 2>/dev/null
sleep 1
nohup node --expose-internals /data/data/com.termux/files/usr/lib/node_modules/@deepseek-ai/dsh/lib/bin.js web > /sdcard/Download/dsh-web.log 2>&1 &
sleep 2
echo "DeepSeek Harness 已启动: http://127.0.0.1:3080"
tail -3 /sdcard/Download/dsh-web.log
EOF
chmod +x "$PREFIX/bin/dsh-web"

以后启动只需在 Termux 输入:

dsh-web

方式二:直接命令

node --expose-internals /data/data/com.termux/files/usr/lib/node_modules/@deepseek-ai/dsh/lib/bin.js web

启动成功的标志是输出:dsh web: http://127.0.0.1:3080

访问

手机浏览器打开:

http://127.0.0.1:3080

5. 使用(配置模型)

  1. 浏览器打开 http://127.0.0.1:3080
  2. 欢迎页点「继续」
  3. 选择工作区、进入「标准模式」
  4. 配置模型:填 DeepSeek API key(sk-...
  5. 开始对话 / 跑 agent

dsh 本身只是"空壳" harness,不配模型无法实际运行任务。


6. 日常维护

保持 Termux 存活

dsh web 进程挂在 Termux 里。若浏览器突然访问不了,多半是 Termux 被系统后台回收了。

建议:

  • 启动后下拉 Termux 通知栏,点 Acquire wakelock(获取唤醒锁),减少被 Doze 杀掉。
  • 若访问不了,回 Termux 再跑一次 dsh-web 即可。

更新 dsh

npm update -g @deepseek-ai/dsh

开发者预览版迭代很快,可能有不兼容变更,更新前留意官方 changelog。


7. 常见问题(FAQ)

现象原因解决
gyp: Undefined variable android_ndk_pathGoogle Play 版 Node 报 platform=android执行第 2 段补丁
Error: CMake does not seem to be availablekoffi 需要 cmakepkg install -y cmake ninja
npm 提示 allow-scripts ... not yet coverednpm 11.17 拦截 install 脚本--allow-scripts=... 放行
sharp 报 Could not load the "sharp" module无 Android 预编译npm install -g @img/sharp-wasm32
listen EADDRINUSE ... 127.0.0.1:30803080 端口被占用(旧进程/沙箱)pkill -f "dsh/lib/bin.js" 后重启
浏览器打不开 127.0.0.1:3080dsh 没在跑 / Termux 被回收回 Termux 跑 dsh-web

8. 技术要点(原理速记)

  • 三个原生模块,全部需要从源码编译(Android 无 glibc/musl 预编译):
    • node-pty(终端子进程)→ node-gyp,需 patch android_ndk_path
    • koffi(FFI,文件系统/目录选择)→ cmake
    • sharp(图像)→ 无预编译,用 wasm 回退
  • --expose-internals:web profile 的 HMR 插件要求这个 Node 启动参数,用 npx dsh web 默认启动会崩,必须 node --expose-internals .../bin.js web
  • process.platform = "android":Google Play 版 Termux 的 Node 特性,是上述 node-gyp 报错的根因;F-Droid 版若报 linux 则无需第 2 段补丁。

9. 安装完成

下图为本指南在真机(Termux)上安装完成并成功启动后的实际效果:

请添加图片描述

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐