【纯离线硬核部署】DeepSeek Harness 物理隔离一站式部署:免去全局配置,指定本地 pnpm-store + 完美修复 ECONNREFUSED 报错

前言

DeepSeek Harness(简称 dsh)作为 DeepSeek 官方开源的 Agent 运行时框架,功能非常强大。但在政府、金融、内网机房等纯离线(物理断网)环境下通过源码部署时,我们往往会面临两大难题:

  1. 离线状态下,如何让项目精准读取我们准备好的本地依赖池,而不用去动系统的全局路径?
  2. 即使配置了本地依赖,pnpm 10+ 依然会疯狂刷出 [WARN] GET http://localhost:4873/... error (ECONNREFUSED) 的发布时间校验报错,导致安装直接挂起。

本文将分享一种更优雅、不污染全局环境的离线部署方案:通过 --store-dir 显式指定相对路径的本地 Store,并结合修改 pnpm-workspace.yaml 解决安全策略报错,实现 100% 纯本地离线一站式构建与运行!


一、 部署核心思路

我们采用 “外网机打包 Store -> 保持相对路径拷贝 -> 内网机显式命令恢复 -> 本地策略修复” 的全套方案。
项目最终在内网机上的目录结构如下,无需修改任何全局系统变量,做到了纯粹的“绿色版解压即用”:

D:\my-project\ (举例目录)
├── pnpm-store/            <-- 存放从外网打包带进来的所有依赖包缓存
└── deepseek-harness/      <-- DeepSeek Harness 源码根目录

二、 完整离线部署步骤

第一步:【外网联网机】准备源码与本地 Store 依赖

我们在能联网的机器上,提前把项目源码和它所依赖的全部依赖池准备好。

  1. 克隆官方源码
    git clone 
    cd deepseek-harness
    
  2. 下载依赖并生成本地 Store
    为了不污染全局,我们直接在外网机执行安装,并通过 --store-dir 将依赖池指定下载到项目同级的本地目录中:
    pnpm install --store-dir=../pnpm-store
    
    安装完成后,你会发现 deepseek-harness 的同级目录下多出了一个 pnpm-store 文件夹。
  3. 打包带走:将整个父文件夹(包含 deepseek-harnesspnpm-store)一起压缩,拷贝到 U 盘,准备带入内网。

第二步:【内网离线机】核心踩坑与配置文件修复

来到完全断网的内网机,我们把压缩包解压(假设解压到了内网机的某个工作目录下)。

  1. 打开终端,进入 deepseek-harness 源码根目录。
  2. 按照标准的离线严格安装逻辑,我们尝试执行以下命令:
    pnpm install --offline --frozen-lockfile --store-dir=../pnpm-store
    
  3. 开始爆红/卡死报错:此时,由于没有外网,控制台开始疯狂刷出如下错误:
    [WARN] GET http://localhost:4873/@agentclientprotocol/sdk/-/sdk-0.25.1.tgz error (ECONNREFUSED). Will retry in 10 seconds. 2 retries left.
    [WARN] GET http://localhost:4873/@eslint/plugin-kit/-/plugin-kit-0.7.2.tgz error (ECONNREFUSED). Will retry in 10 seconds. 2 retries left.
    [WARN] GET http://localhost:4873/@types/json-schema/-/json-schema-7.0.15.tgz error (ECONNREFUSED). Will retry in 10 seconds. 2 retries left.
    ...
    
🛠️ 报错深度原因剖析:

这是因为 pnpm 10及以上版本 默认开启了一项叫 minimum-release-age(最低发布年龄限制)的安全策略。pnpm 为了防止用户误装网上刚发布、可能带毒的新包,每次安装即使指定了 --offline,也会尝试联网校验包的发布时间元数据。
但在纯离线/物理隔离环境下,这种校验请求必定会超时并报出 ECONNREFUSED(拒绝连接)并无限重试。

🛠️ 完美解决办法:

我们需要明确告诉 pnpm 离线安装时关闭该时间校验限制。

  1. 打开项目根目录下的 pnpm-workspace.yaml 文件。
  2. 在文件末尾添加一行关键配置:minimumReleaseAge: 0 即可:
# pnpm-workspace.yaml
packages:
  - 'packages/*'
  - 'apps/*'

# 💡 关键修复配置:关闭包的发布时间安全校验,防止物理离线时网络请求被拒
minimumReleaseAge: 0

保存文件。


第三步:【内网离线机】重新执行离线安装

再次在 deepseek-harness 目录下执行你指定本地 Store 路径的硬核命令:

pnpm install --offline --frozen-lockfile --store-dir=../pnpm-store

此时你会发现之前的 [WARN] 报错瞬间消失!pnpm 顺着你指定的相对路径,极其顺畅地从 ../pnpm-store 里秒级提取依赖并成功完成安装。


第四步:本地项目编译构建

由于 DeepSeek Harness 采用多模块工作区架构,依赖装好后必须进行本地编译,否则前端系统无法加载。
在根目录下执行:

pnpm run build

等待进度条走完,看到所有子模块(Packages)打包构建成功的提示。

第五步:离线启动 Web 界面

最后,输入 Harness 专属的 Web 服务启动命令:

pnpm dsh web

当终端输出 dsh web: http://127.0.0.1:3080 时,说明你的 DeepSeek 本地 Agent 运行时平台已经在纯离线状态下完美启动!


三、 首次运行的注意事项

  1. 工作区隔离:首次访问浏览器界面时,左上角的【选择工作区】务必指定一个全新的空文件夹。因为本地 Agent 拥有操作系统 Shell 的高权限,选择空文件夹能绝对保障你的机房系统安全。
  2. 大模型接入:在 Settings -> Models 中,如果你处于纯内网,可直接填入内网本地搭建好的 Ollama(兼容 OpenAI 格式)的本地 IP 服务地址和模型 ID。

四、 结语

采用 --store-dir=../pnpm-store 配合 --offline --frozen-lockfile,可以实现非常优雅的项目级依赖打包,不需要动内网机全局的 pnpm 配置。再通过 minimumReleaseAge: 0 修复软件安全策略引发的请求拒绝,我们便能完美驾驭 DeepSeek Harness 的源码离线部署。

希望本篇闭环教程能帮到正在进行大模型私有化落地的你!
欢迎在评论区交流讨论你在部署中遇到的其他怪异报错,觉得有用的话,别忘了点赞、收藏加关注!


参考资料与前置致敬:

Logo

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

更多推荐