自建DeepSeek Harness私有插件市场:dsh-market搭建全攻略
如果你已经在用 DeepSeek Harness 做智能体编排应该很快就会撞到一个问题官方市场里的插件更新慢、数量少很多社区里好用的插件只能从 GitHub 手动下载再本地解压、配路径、重启客户端。来回折腾几次以后你大概率会产生一个念头——自己搭一个插件市场。这篇文章要聊的 dsh-market 就是干这个的。它是一个专门为 DeepSeek Harness 设计的自托管插件市场服务端装上以后你可以自己上传插件包、管理版本、维护下载源然后在 Harness 客户端里直接指向这个私有源实现“一次部署、多端共享”。整个过程用一台腾讯云轻量应用服务器就能跑起来不需要太高配置也不需要域名和备案纯 IP 加端口就能正常工作。整篇教程按照我实际搭建的顺序来写从服务器选型、环境初始化到 dsh-market 的安装配置再到插件打包、上传和客户端对接最后附上我踩过的坑和排查思路。不管你是刚接触 Harness 的新手还是已经在本机跑过插件的老手跟着走都能搭出一套可用的私有插件市场。1. 整体设计与思路拆解1.1 为什么要自建插件市场先说一个很多人的误区DeepSeek Harness 本身是支持插件扩展的但它的默认源里的插件数量非常有限而且版本迭代节奏并不快。如果你只做简单对话、单智能体任务默认源可能够用一旦涉及多智能体编排、自定义工具链、团队协作共享规则集这类场景你就得依赖第三方插件而第三方插件的分发渠道非常分散。dsh-market 的核心价值就在于它把“找到插件、安装插件、更新插件”这条链路统一到了一个私有的服务端上。你在服务器上维护一个插件仓库客户端通过 HTTP 拉取插件列表、下载插件包、校验指纹、完成安装。这跟 VS Code 里的自定义扩展市场、Claude 生态里的插件仓库是同一个思路——不是为了替代官方源而是给真正需要私有化分发的人一条出路。我自己实际用的场景是团队协作。几个同事都在跑 DeepSeek Harness如果每个人各自去 GitHub 下载插件版本不一致、配置方式不统一光对齐环境就要花半天。有了 dsh-market 以后插件只在我这边上传一次其他人改一下客户端配置就能同步到同一批插件版本由服务器统一控制回滚也简单。1.2 整体架构与数据流从架构上看dsh-market 的部署思路并不复杂核心就三层服务端运行 dsh-market 的云服务器提供插件清单 API、插件文件下载接口、上传管理后台。客户端DeepSeek Harness 桌面端通过配置指向自建市场的地址拉取插件列表并安装。存储层dsh-market 默认使用本地文件系统存储插件包文件元数据用 JSON 格式管理不需要额外装数据库。数据流大概是这样的你在 Harness 客户端打开插件市场页面客户端向 dsh-market 发起请求获取插件列表服务端读取插件元数据并返回 JSON客户端展示插件信息你点击安装后客户端从服务端下载插件包一般是 vsix 或 zip 格式校验完整性以后解压到本地插件目录完成安装。这里有一个值得留意的设计点dsh-market 本身不负责执行插件逻辑它只管“分发”。真正的执行还是发生在 Harness 客户端本地。这种设计的好处是即使市场服务挂了已经装好的插件依然能继续用不会影响到线上任务。1.3 为什么选腾讯云轻量应用服务器选择腾讯云做部署主要是几个现实原因。第一是成本。自建插件市场不需要高性能计算资源2核4G的轻量应用服务器完全够用一个月几十块钱比买一台高性能云主机划算得多。我目前跑的 dsh-market 实例日常 CPU 占用在 5% 以下内存占用 1GB 左右4G 内存还有大量富余。第二是网络。腾讯云的轻量服务器自带公网 IP带宽最低也有 4M 起步对于分发插件包这种场景来说完全够用。插件包一般只有几十 KB 到几 MB4M 带宽下载一个 2MB 的插件包只需要几秒钟。如果后面插件数量多了、团队成员多了可以在控制台临时升级带宽不需要换机器。第三是短视频里经常提到的“腾讯云服务器用什么浏览器”这个问题其实跟部署没有直接关系。控制台操作用 Chrome 或 Edge 都行关键是登录服务器之后所有安装操作都在命令行里完成跟你用什么浏览器访问控制台关系不大。真正需要注意的是安全组放行端口这个后面会单独讲。2. 环境准备与服务器初始化2.1 云主机选型与登录准备我建议第一次搭建的话直接选腾讯云轻量应用服务器地域选离你最近的比如你在华东就选上海在华南就选广州系统镜像选 Ubuntu 22.04 LTS。这里有个细节不要选 CentOS。CentOS 已经停止维护了很多软件源都迁走了新装环境会遇到各种奇怪的问题。Ubuntu 22.04 和 Debian 12 是目前兼容性最好的选择。套餐方面2核4G、带宽 4M、SSD 盘 60G 这个档位就足够了。如果你打算后面把本地编译、持续集成也跑在这台机器上可以升一档到 4核8G但单纯跑 dsh-market 的话没有这个必要。登录方式有两种。一种是在腾讯云控制台直接打开网页版终端基于 VNC适合做应急操作另一种是在本地用 SSH 客户端连接Windows 可以用 PowerShell 自带的 ssh 命令也可以装 Termius 这种图形化工具。我建议你优先掌握 SSH 方式因为后面很多操作要在本地和服务器之间传文件SSH 通道是基础。2.2 基础环境安装Node.js、Git、pm2dsh-market 基于 Node.js 生态所以环境准备的核心就是装 Node.js 和 Git。这里说一下版本选择dsh-market 要求 Node.js 18 及以上但我实际测试下来Node.js 20 LTS 是最稳的Node 22 某些版本在 Vite 构建阶段会有兼容性问题。建议直接用 20 LTS。先更新系统包索引并安装 Git 和 curlsudo apt update sudo apt upgrade -y sudo apt install -y git curl然后安装 Node.js。这里推荐用 nvm 而不是直接用 apt 安装系统版本。原因很简单apt 自带的 Node.js 版本通常偏老而且后续想切换版本会很麻烦。nvm 安装方式如下curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash source ~/.bashrc nvm install 20 nvm alias default 20 node -v看到输出的版本号是 v20.x.x 就说明装好了。接下来把 npm 注册源切到国内镜像源这一步不是必须的但能显著加快后面的依赖安装速度npm config set registry https://registry.npmmirror.com最后安装 pm2。pm2 是一个 Node.js 进程守护工具作用很简单让 dsh-market 在后台持续运行SSH 断开也不会导致服务挂掉同时支持开机自启。npm install -g pm2安装完以后验证一下pm2 -v到这里基础环境就绪。为了避免后面对照的时候漏步骤我建议每一步执行完都检查一下输出没报错再继续下一步。2.3 安全组与端口规划这是新手最容易忽略的一步。腾讯云的轻量服务器默认的防火墙规则非常严格只放行了几个常用端口。如果你不手动配置后面的 dsh-market 服务即使启动了外部也完全访问不到。dsh-market 默认监听端口是 3000。为了减少与常见 Web 服务的冲突概率我建议改成 7571 这样的自定义端口。确定端口以后在腾讯云轻量服务器控制台找到“防火墙”选项点“添加规则”协议选 TCP端口填 7571来源一般选“全部 IPv4”即可。如果你后面计划绑定域名还需要同时放行 80 和 443 端口。但按照最简单的方案来跑不绑定域名、只用 IP 加端口访问就只放行 7571 这一个端口就够。这里有一个安全方面的考量7571 端口暴露在公网上意味着任何人只要知道你的服务器 IP 和端口就能访问插件市场接口。如果团队内部使用问题不大如果担心完全公开可以后续在 dsh-market 配置里加上访问令牌校验或者用腾讯云安全组限制来源 IP 范围。我目前是加了来源 IP 白名单只允许团队成员的公网 IP 访问安全性会好很多。3. dsh-market 核心安装与配置3.1 下载源码与项目结构环境就绪以后开始拉取 dsh-market 的源码。项目仓库在 GitHub 上公开可访问直接用 git clone 拉取到 /opt 目录下cd /opt sudo git clone https://github.com/dsh-market/dsh-market.git sudo chown -R $(whoami) dsh-market cd dsh-market拉下来以后先看一下项目结构ls -ladsh-market 的项目结构大致如下server/服务端源码负责插件元数据管理和文件分发web/后台管理界面源码基于 Vite 构建data/数据目录默认存放插件元数据 JSON 文件和计数文件plugins/插件包存储目录上传的插件都放在这里config.json核心配置文件package.json依赖和脚本入口这里有个细节要留意data 和 plugins 目录在首次启动时会自动创建但如果你是用 root 权限 clone 的代码后面 npm 安装可能会因为目录权限报错。所以我建议执行完 git clone 之后立刻把目录所有者改掉用chown -R $(whoami)把权限切给当前登录用户避免后面一堆权限问题。3.2 安装依赖与启动服务进入项目目录后安装依赖。这里用 npm install 一次性装完npm install如果网络状况不理想刚才配置的 npmmirror 镜像源在这里会起到作用安装速度会快很多。安装过程大约需要 1 到 3 分钟取决于服务器所在的网络环境。安装完成后先别急着启动生产服务建议先用开发模式验证一下配置是否正确npm run dev开发模式下dsh-market 会同时启动后端 API 服务和前端管理后台并监听配置文件中指定的端口。看到类似Local: http://0.0.0.0:7571的输出就说明服务起来了。接下来在浏览器里访问http://你的服务器IP:7571应该能看到管理后台的界面。如果打不开优先检查腾讯云防火墙是否放行了 7571 端口以及服务进程是否仍在运行。确认没问题以后停掉开发模式切换到生产模式npm run build npm start生产模式会先构建前端静态资源再由服务端提供 API 和静态文件服务。启动成功以后用浏览器再访问一次确认无误就可以交给 pm2 守护了。3.3 用 pm2 守护服务进程直接 npm start 启动的服务有一个问题你一旦关闭 SSH 连接进程可能就会被系统释放掉。即使当前连接没断服务也会因为终端会话关闭而收到中断信号。为了让 dsh-market 持续稳定运行必须交给 pm2 管理。pm2 的启动命令如下pm2 start npm --name dsh-market -- run start这里稍微解释下这个命令的结构pm2 start npm表示用 pm2 启动 npm 命令--name dsh-market给它取个名字-- run start是传给 npm 的参数相当于执行npm run start。启动成功以后执行pm2 status查看状态。如果显示 online 就说明进程正常。接下来做两件重要的事第一保存当前进程列表。否则服务器重启后 pm2 不会自动恢复服务pm2 save第二设置开机自启。pm2 提供了非常方便的开机自启配置命令pm2 startup执行完后按照屏幕输出提示复制那行sudo env ...命令并执行即可。这样以后服务器意外重启dsh-market 也会自动恢复运行不需要人工登录去拉起来。3.4 接域名与反向代理可选如果你有域名并且希望用域名访问插件市场而不是长长的 IP 加端口可以在腾讯云把域名解析到服务器 IP然后加一层 Nginx 反向代理。但我想强调一下这一步不是必须的甚至对于内部分发场景我建议先跳过。原因有两点。第一域名绑定需要备案。腾讯云对大陆地域的服务器有备案要求域名未备案时 80 和 443 端口会被拦截访问不了。如果你用的是海外地域的轻量服务器倒是可以直接绑域名。第二加 Nginx 以后多层转发链路会带来额外的排障成本。如果你确实需要域名可以分开两步走域名只解析到服务器 IP然后访问时手动带端口比如http://dsh.example.com:7571。这种方案不用备案因为没走 80/443也能享受域名的可读性优势。我目前就是这么用的团队成员记域名比记 IP 方便多了。4. 插件打包、上传验证与客户端对接4.1 插件包结构与打包方法dsh-market 管理的插件包不是随便打包的文件它有自己的目录结构和清单文件要求。如果你之前用过 VS Code 的 vsix 插件包会发现两种插件的形态非常相似。我以社区里最常见的插件结构为例说明一下。一个典型的 Harness 插件包包含以下内容extension.vsixmanifest插件清单文件声明插件名称、版本、作者、唯一 ID[Content_Types].xmlXML 内容类型声明extension/插件实际内容目录里面是插件代码、技能包skills、规则集agentsmarketplace.json或plugin.json元数据描述文件包含插件描述、入口脚本路径、依赖关系打包时推荐直接使用 Harness 官方 CLI 工具dshdsh plugin pack ./my-plugin -o my-plugin.vsix这个命令会把my-plugin目录打包成标准的 vsix 格式。如果你需要手动打包也可以直接把目录用 zip 压缩后改后缀名为 vsix但前提是目录结构和清单文件必须完整。手动打包的问题在于官方工具会自动生成并签名哈希文件而手动压缩很容易漏掉这一步导致客户端装上以后提示校验失败。4.2 上传插件并验证元数据插件包打好了接下来上传到 dsh-market。打开管理后台找到“上传插件”入口选择本地的 vsix 文件填写必要的元数据信息包括插件显示名称、描述、分类、版本号。上传时有一个我反复踩过的坑插件包的文件名不要用中文也不要有空格。vsix 包本质上是一个 zip 容器文件名中的非 ASCII 字符在某些 HTTP 下载链路里会被错误编码导致客户端请求不到文件。统一用英文小写加连字符命名是最稳妥的做法比如my-utils-v1.2.3.vsix。上传完成后不要急着去客户端安装。先在服务器上用 curl 验证一下 API 是否正常返回插件列表curl http://127.0.0.1:7571/api/plugins正常情况下返回的 JSON 里应该能看到你刚上传的插件信息包括 ID、名称、版本号、文件下载地址。如果返回空数组说明上传过程中元数据写入出了问题检查一下后台界面有没有报错提示。这里还需要做一个完整性验证。插件包上传到服务器之后最好手动计算一下 SHA256 校验值跟客户端实际下载到的文件对比确保上传过程没有损坏文件sha256sum /path/to/dsh-market/plugins/my-utils-v1.2.3.vsix4.3 客户端配置下载源服务端搞定了接下来就是客户端对接。打开 DeepSeek Harness 桌面端进入设置页面找到插件市场相关配置项。这里不同版本的 Harness 菜单名称可能略有差异但核心配置项就一个市场地址Marketplace URL。在地址栏填入http://你的服务器IP:7571填完以后保存回到插件列表页面点击刷新。正常情况下客户端会从 dsh-market 拉取插件列表并展示出来。如果你配置了访问令牌还需要在客户端的对应位置填写令牌否则请求会被服务端拒绝。这里有一个细节Harness 客户端默认连接的是官方市场切换到自己搭建的市场以后安装、更新的数据源就完全由你的服务器控制。如果你希望同时使用官方源和私有源可以在客户端配置里添加多个市场源或者把自己需要的官方插件下载下来重新上传到 dsh-market 里做二次分发。后一种方案我在团队内部试过可靠性更高因为下载源完全自控不怕官方源变更导致安装失败。4.4 端到端验证配置完成以后做一次完整的端到端验证确保整条链路通畅。先在客户端插件列表里找到刚上传的测试插件点击安装。留意两个地方一是插件列表能否正常加载二是安装进度条是否走完。如果列表加载出来了但安装失败多半是插件包文件拉不下来或校验失败这时候去服务器上检查插件文件是否存在、权限是否正确。插件安装完成以后重启一下 Harness 客户端有些插件需要重启才能加载然后在智能体编排界面里确认新插件是否出现在工具列表里。调出一个用到该插件的任务跑一遍流程确认插件确实能正常执行而不是安装完就变装饰品。整个验证流程走完你的私有插件市场就算正式落地了。5. 常见问题与排查技巧实录5.1 安装启动类问题速查我在搭建和后续使用的过程中遇到过的问题可以归纳成下面这张速查表先列出来再挑几个典型的展开说说。症状可能原因解决方式npm install 卡住或报错默认 npm 源访问慢切换到 npmmirror 镜像源后重试npm run build 失败Node.js 版本不兼容切换到 Node.js 20 LTS服务启动后外网访问不了腾讯云防火墙未放行端口在轻量服务器控制台放行对应 TCP 端口pm2 重启后服务丢失未执行 pm2 save运行 pm2 save服务器重启后服务未恢复未配置 pm2 startup执行 pm2 startup 并按提示执行生成的命令最典型的案例是 Node.js 版本问题。我一开始用的是 Node.js 22构建 dsh-market 的 web 端时Vite 报了一堆 ESModule 相关的兼容性警告构建出来以后前端页面白屏。后来切回 Node.js 20 LTS重新npm run build就一切正常。还有一个隐蔽的问题是npm install装出来的依赖里有平台相关的原生模块。如果你刚开始是在本机Windows 或 macOS上尝试部署后来又把项目目录原样拷贝到 Linux 服务器上运行会报各种模块加载失败。解决思路很粗暴在服务器上从头执行一次rm -rf node_modules npm install让所有依赖都在 Linux 环境里重新编译安装。5.2 上传与校验类问题速查症状可能原因解决方式上传插件后列表为空元数据解析失败检查插件目录里是否有合法的插件清单文件文件名含中文/空格下载请求被 HTTP 编解码截断重命名为英文小写加连字符客户端提示 SHA256 指纹不匹配上传文件损坏重新上传并对比 sha256sum 校验值版本号更新不生效版本号未按 semver 规则递增修改版本号为合法格式并确保高于现有版本指纹校验是最容易卡住新手的地方。Harness 客户端在安装插件时会对下载的文件做 SHA256 校验这个校验值是从插件包的清单文件里读取的。如果你手动改了插件包的二进制内容哪怕只是重新压缩一遍但清单文件里的哈希值没有同步更新客户端就一定报校验失败。所以打包插件尽量用官方 CLI 工具不要手动压缩改名。5.3 客户端拉取与跨域问题速查症状可能原因解决方式客户端显示市场连接失败服务器端口未放行或服务未启动先 curl 测试服务器本机 API再排外网能打开后台但客户端拉取失败跨域请求被浏览器或客户端拦截检查 dsh-market 配置里的 CORS 设置列表能拉到但安装超时服务器带宽不足升级带宽或在低谷期重试客户端配置了地址但始终用默认源配置未保存或未重启客户端保存配置后重启 Harness跨域问题我多啰嗦一句。有些版本的 Harness 客户端基于 WebView 实现插件市场页面前端 JavaScript 跨域请求服务端 API 时会受 CORS 策略限制。dsh-market 默认允许所有来源访问但如果你自己改了配置很容易把 CORS 限制加上去然后发现后台能访问、客户端拉不到数据。排查这类问题时看客户端日志和浏览器开发者工具里的 Network 面板是最直接的方式。如果你在配置过程中遇到上表没覆盖的报错我建议先静下心做一次链路切割先确认服务端本机 API 是否正常再从外部 curl 测试最后才排查客户端配置。按照这个顺序走绝大部分问题都能定位到具体环节而不是靠猜。6. 扩展玩法与个人实操体会搭建完成以后这个私有插件市场不是只能用来装插件它还能承担不少分发和协作任务。我在实际使用中最大的体会是dsh-market 帮我把“插件管理”这件事从个人行为变成了团队行为。以前同事找我拷贝插件包微信传一次就过期一次版本还经常对不上。现在所有人都指向同一个市场源我更新版本、上传新插件大家刷新就能看到不用再挨个通知。遇到插件升级后出现兼容性问题的场景我在后台把版本回退客户端重新拉取一次就恢复到可用状态比让同事手动卸载重装不知道省了多少事。另外建议做一件事把 upload 之后的服务端数据目录备份到腾讯云的对象存储里。插件市场本身是轻量服务数据量不大但插件包文件如果丢失重建成本还是很高的。一个简单的定时任务每天把/opt/dsh-market/data和/opt/dsh-market/plugins两个目录打包上传一次就能在服务器故障时快速恢复整个市场服务。如果你对自动化有要求还可以把插件打包、上传这一套流程集成到 CI 里代码提交后自动构建插件包、调用 dsh-market 的上传 API 发布新版本。我目前已经在团队内用这种方式跑了两周整体稳定团队成员不再需要关注打包和上传的细节只需要在代码仓库里提交变更剩下的全自动完成。关于 CI 集成这块等我把当前的流水线再打磨一段时间后续可以单独写一篇分享出来。