OwnDsh 动态小鲸鱼图标

OwnDsh

OwnDsh · Truly Own Your DeepSeek-Harness.

The Self-Hosted Control Plane for DeepSeek-Harness.

真正拥有属于你的 DeepSeek-Harness。
DeepSeek-Harness 的私有化控制面。

OwnDsh 是 [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) 的自托管团队控制面。管理员统一管理身份、模型、API Key、访问权限、配额、插件、设备和审计;员工继续在自己的 DSH Desktop 或 Harness Web 中工作。 OwnDsh 不 fork 官方 Harness Web UI,不接管员工工作区,也不远程执行员工工具。员工可以安装标准 Harness 插件 `owndsh-plugin`,或使用预装插件和运行环境的 [OwnDsh Desktop](https://github.com/boe1900/owndsh-desktop),客户端由独立仓库构建 macOS Intel、Apple Silicon 与 Windows x64 安装包。 > 当前处于预发布阶段。Docker 镜像只发布 `next`,npm 插件只发布 `next`,不会更新 `latest`。 ## 能力 | 使用者 | 能力 | |---|---| | 平台管理员 | 自托管控制台、LOCAL/LDAP/OIDC 身份、成员与设备治理 | | 模型管理员 | 集中保管供应商 API Key,管理模型、模型集、授权、Token、RPM 与并发 | | 插件管理员 | 配置安装地址、发布企业插件,设置可见范围并查看客户端状态 | | 审计员 | 查询管理操作、模型调用、用量与 request ID 关联记录 | | 员工 | 用企业账号登录 Harness,使用获准模型并自主安装企业插件,无需持有上游 API Key | ## Docker Compose 部署 当前镜像目标为 Linux `amd64` 和 `arm64`。准备 Docker Engine、Docker Compose `2.20.3+` 和 Git。 Server/Console 同时发布到 GHCR(`ghcr.io/boe1900`)和阿里云杭州 ACR(`registry.cn-hangzhou.aliyuncs.com/cola1900`),两边镜像名称均为 `owndsh-server`、`owndsh-console`,版本标签一致。Compose 默认使用阿里云,GitHub Packages 中的 GHCR 镜像也持续更新;PostgreSQL/Redis 仍从 Docker Hub 拉取。若 ACR 仓库为私有,先执行 `docker login registry.cn-hangzhou.aliyuncs.com`,按提示输入 ACR 用户名与仓库登录密码。 ### 1. 启动 ```sh git clone https://github.com/boe1900/owndsh.git cd owndsh docker compose up -d --wait ``` 默认访问 [http://localhost:8080](http://localhost:8080),初始账号 `admin`,密码 `owndsh`。第一次登录会强制设置符合安全策略的正式密码。数据库与账号由 PostgreSQL 创建,全部建表、种子数据和后续升级由 Server 内置 Flyway 自动执行,无需额外 SQL 文件。 需要让其他设备访问或覆盖默认凭据时,再创建 `.env`: ```sh cp .env.example .env ``` OwnDsh 只有一个公开地址配置。默认由 Compose 生成为 `http://localhost:8080`;需要让局域网设备访问时,把它改成部署机的实际 IP 和发布端口,例如: ```dotenv ENT_PUBLIC_BASE_URL=http://192.168.1.50:8080 ``` 其中 `192.168.1.50` 替换为运行 Docker Compose 的机器 IP;若修改 `OWNDSH_HTTP_PORT`,这里使用相同端口。管理端回调会自动派生为 `/enterprise/auth/callback`,不需要单独配置。 生产环境应由现有 Nginx、Ingress 或负载均衡提供可信 HTTPS,并把这个值改成外部 HTTPS 地址。OwnDsh Compose 只开放 Console 的 HTTP 端口,不直接管理证书。`.env.example` 中的数据库、Redis、JWT、master key 是开箱测试默认值;公网部署必须通过同名环境变量覆盖。 ### 2. 可选:设置初始密码 Compose 默认使用下面的一次性管理员账号和密码;创建 `.env` 后可以自由修改: ```dotenv ENT_BOOTSTRAP_ADMIN_USERNAME=admin ENT_BOOTSTRAP_ADMIN_PASSWORD=owndsh ``` 第一次登录会强制设置符合安全策略的正式密码。 ### 3. 管理服务 ```sh docker compose up -d --wait docker compose ps docker compose logs -f server ``` Server 日志仅输出到 stdout/stderr,由 Docker/K8s 与日志平台采集和轮转,不需要应用日志卷。 打开 `ENT_PUBLIC_BASE_URL` 配置的地址,以配置的初始账号和密码登录。数据库 marker 保证初始化只执行一次;首次改密后,默认初始密码立即失效。 ### 4. 配置企业 1. 在“成员”中配置 LOCAL、LDAP 或 OIDC 身份来源。 若 LDAP 服务只提供明文 `ldap://`,在身份源表单填写 `ldap://...`;TLS 目录填写 `ldaps://...`。 2. 在“模型”中添加供应商、API Key 和受管模型。 3. 创建模型集,并向全部成员、用户组或指定成员授权。 4. 按需配置 Token 配额、RPM 和并发限制。 5. 按需登记 npm 精确包名和版本,发布企业插件;服务端输出标准 DSH plugin market index,插件包自身通过 `peerDependencies` 声明范围,安装时由官方 Host 校验。 6. 邀请员工安装 OwnDsh 并登录;员工在官方 Plugins → Discover 页面发现和安装已发布插件。 员工设备不会得到供应商 API Key;每次模型请求都由 OwnDsh 网关重新校验身份、授权和额度。 ## 安装员工插件 使用独立仓库构建的 OwnDsh Desktop 时,直接打开应用并填写 Server 地址即可,无需另装 Node、pnpm 或插件。下面的命令用于已有 Harness/社区 Desktop 的设备。 先确保 `pnpm` 是 PATH 中可直接执行的命令。Harness 当前基线使用 pnpm `11.7.0`: ```sh corepack enable corepack install --global pnpm@11.7.0 pnpm --version ``` 安装 npm 测试版到需要使用的 profile: ```sh # Harness Web dsh plugin --profile web add --ignore-scripts owndsh-plugin@next dsh --profile web # DSH Desktop dsh plugin --profile desktop add --ignore-scripts owndsh-plugin@next ``` 从 DeepSeek Harness 源码运行 CLI 时: ```sh pnpm --dir /path/to/deepseek-harness dsh \ plugin --profile web add --ignore-scripts owndsh-plugin@next ``` 安装完成后重启对应 profile。OwnDsh 全屏页面会要求填写管理员提供的 OwnDsh Server HTTP(S) 地址;保存后完成企业登录即可使用管理员授权的模型。 Server 地址和 Refresh Token 由 Harness Host 的官方 settings/credentials 服务持久化。Access Token 只存在 Host 内存,浏览器页面不会读取或保存 Token;正常重启会静默恢复登录。主动退出、设备撤销、成员停用、改密或 30 天有效期结束后需要重新登录。 官方 Plugins → Discover 页面展示已安装、内置和企业索引插件。OwnDsh 不维护第二套市场页或安装状态;点击安装或更新后,官方 `pluginMarket`/`pluginManager` 负责索引刷新、兼容校验、安装、启停、卸载、进度和重启状态。 OwnDsh 闲置时不建立企业 SSE、不定时拉配置或提前续期。用户请求时按需续期,服务端认证 401 最多续期重试一次;Refresh Token 失效或设备撤销时显示登录门禁,重新登录后可继续对话。网络暂不可达保留凭据,可再次发起请求或在 OwnDsh 设置点击刷新;模型目录按需刷新;插件发现和安装由官方 Plugins → Discover 读取 OwnDsh Server 的标准自定义索引。 ## 更新 更新服务端测试镜像: 已有 `.env` 若仍指定旧镜像地址,先更新这两个值;固定版本部署可将 `next` 换成已发布的版本号: ```dotenv OWNDSH_SERVER_IMAGE=registry.cn-hangzhou.aliyuncs.com/cola1900/owndsh-server:next OWNDSH_CONSOLE_IMAGE=registry.cn-hangzhou.aliyuncs.com/cola1900/owndsh-console:next ``` ```sh docker compose pull docker compose up -d --wait ``` 更新员工插件: ```sh dsh plugin --profile web remove owndsh-plugin dsh plugin --profile web add --ignore-scripts owndsh-plugin@next ``` 把 `web` 换成实际使用的 profile。移除后重新安装可以避免 pnpm 复用同版本缓存。 ## 常见问题 ### `pnpm not found on PATH` 执行上面的 `corepack enable` 和 `corepack install --global pnpm@11.7.0`,直到直接运行 `pnpm --version` 成功。只写 `corepack pnpm ...` 不够,因为 `dsh plugin` 的子进程仍需要从 PATH 找到 pnpm。 ### 保存 Server 后显示平台不可用 从员工设备访问 `/healthz`,再检查 DNS、防火墙、反向代理和 TLS 证书。Server 地址必须是完整 HTTP(S) origin,不能附带 API 路径。 ### 登录后看不到模型 确认供应商和模型都已启用,并且该员工、员工所在用户组或全部成员拥有对应模型访问授权。配额策略不会代替访问授权。 ### 重启后要求重新登录 确认启动的是原 profile,且它的官方 credentials provider 可写。主动退出、Server 地址切换、设备/成员撤销和 30 天有效期结束都会使长期会话失效。 ### 阿里云镜像无法拉取 确认阿里云 ACR 的 `cola1900/owndsh-server` 与 `cola1900/owndsh-console` 仓库已有对应标签。公开仓库可匿名拉取;私有仓库需先执行 `docker login registry.cn-hangzhou.aliyuncs.com`,使用有拉取权限的 ACR 账号登录。镜像发布凭证配置见 [部署文档](deploy/README.md#镜像发布凭证)。 ## 运维与开发 - [官网与 Cloudflare Pages 部署](website/README.md) - [离线发布包、备份、恢复、升级与回滚](deploy/README.md) - [插件 workspace 与真实 Harness 验收](plugin/README.md) - [V1 产品功能清单](docs/v1-product-feature-catalog.md) - [技术架构与安全边界](docs/owndsh-governance-mvp-design.md) 本地开发体验可运行 `./scripts/local-demo.sh`。该脚本要求同级存在锁定的 `deepseek-harness` checkout,并使用隔离状态启动正式 Server 和 Harness。 ## 上游与声明 OwnDsh 是独立项目,不隶属于 DeepSeek AI 或 Anywhere Labs。DeepSeek Harness 与 DSH Desktop 的名称、代码和商标归各自所有;OwnDsh 只通过公开插件扩展点集成。