合作方按你给的 registry 执行 npm install,却一直 401——私有仓要令牌,你又不想把 Deploy Token 发给对方。网盘发 zip 能救急,却没有版本页,也没有可复制的安装命令。
公开门户做的事很窄:把指定 HOSTED 标成 isPublic 后,访客在 /explore 匿名搜索、打开详情、复制免认证安装命令。它和管控台同一套数据,不是另建的下载站;私有仓仍然不可见,也不能匿名上传。示例主机 repo.anguskit.com(以控制台接入配置为准)。
口诀: 匿名只读,且只见
isPublic;单独public-*HOSTED,禁 SNAPSHOT;写靠 Deploy Token,读走详情页命令;Docker 不要手写/v2。

环境未就绪时先完成第一次跑通(或安装与部署)。手册:公开门户。下面从边界到三步开启。
1. 边界:访客永远看不到什么
规则只有一句:匿名只读,且只见显式标为公开的仓库。
| 项 | 规则 |
|---|---|
| 可见范围 | 仅 isPublic=true 的仓库及其制品 |
| 私有资源 | 不可搜索;门户不能枚举私有仓 |
| 写操作 | 上传、删除、改配置一律要登录 / 令牌 |
| 协议拉取 | 非公开仓仍需认证(密码位填访问令牌) |
不要把日常开发仓或 SNAPSHOT 仓勾公开。也不要把聚合了私有 HOSTED 的 GROUP 标公开——访客可能间接摸到不该看的坐标。只公开真正要交付的 HOSTED。
2. 为何单独建 public-*,而不是把现有仓勾公开
| 做法 | 风险 / 收益 |
|---|---|
把内部 npm-hosted 直接勾公开 |
易误带 SNAPSHOT、内部包名、未 scrub 的 README |
单独 public-npm / public-docker / public-raw |
交付物与内网坐标隔离;审计公开列表更简单 |
推荐:对外交付物进公开 HOSTED;内网仍走私有 HOSTED + GROUP。权限与分仓见 权限隔离。
3. /explore 打开之后能看到什么

入口:https://repo.anguskit.com/explore(顶栏 Explore 也会跳到这里;未上证书时用控制台给出的 http://)。
| 页面 | 路径 |
|---|---|
| 首页 | /explore |
| 公开仓库列表 | /explore/repositories |
| 仓库详情 | /explore/repositories/{name} |
| 制品搜索 | /explore/artifacts |
| 制品详情 | /explore/artifacts/{repoName}/{packageName} |
详情页通常包括:版本列表、README、依赖与文件清单、许可证;若做过扫描,可能有漏洞摘要——有摘要 ≠ 已深度扫过、可当发版放行(门禁见 入库门禁)。
安装命令以详情页免认证块为准,例如:
# npm
npm install @company/utils --registry https://repo.anguskit.com/npm/public-npm/
# Maven(坐标以详情页为准)
# <repository>…/maven/public-maven/</repository>
# Docker(镜像名不要手写 /v2)
docker pull repo.anguskit.com/public-docker/myapp:1.4.0
# Raw
curl -O "https://repo.anguskit.com/raw/public-raw/my-app/1.0.0/my-app-1.0.0-linux-amd64.tar.gz"
Raw 文本与小体积配置可在线预览(约 1 MB 文本 / 15 MB 多媒体内自动加载);预览不计下载。匿名能看能下;登录用户可额外收藏与订阅(写仍在控制台)。
4. 三步开启 + 验证闭环
- 单独建公开 HOSTED — 如
public-npm/public-raw/public-docker,仓库配置勾选公开(isPublic)。 - 用 Deploy Token 上传一版正式制品 — 令牌对该公开仓具备 Write(常见
repod_前缀);不要把 Admin 令牌写进合作方文档。见 Deploy Token 与 ACL。各格式 publish:npm 私服 · Docker · Raw。 - 无痕浏览器打开
https://repo.anguskit.com/explore— 搜到该仓与制品,复制详情页安装命令并在干净环境执行。
勾选公开后索引可能有 数十秒~数分钟 延迟;搜不到先等刷新,再核对 isPublic。
验证清单:
- [ ] 未登录可打开
/explore并看到目标仓 - [ ] 私有仓名称不会出现在门户搜索
- [ ] 安装命令可在干净环境跑通(或至少
curl -I/npm view/docker pull) - [ ] 未登录上传仍被拒绝
- [ ] 公开列表里没有 SNAPSHOT 坐标
三种常见用法
- 开源 / 对外 SDK 页 — 版本、README、安装命令一页齐全。
- 向合作方交付 — 单独公开 HOSTED,把
/explore链接发出去。 - 内网制品商店 — 门户只开在内网,减少重复造轮子。
5. 上线后别忘了
- 定期审计公开仓库列表(见 最佳实践)。
- 发版后链接可不变,内容随仓库走。
- 公开仓仍建议禁止覆盖正式版;修 bug 升版本。
- 对外二进制路径与 Raw 实践对齐。
报错速查
| 现象 | 常见原因 | 怎么处理 |
|---|---|---|
| 门户搜不到 | 未勾选公开,或索引略延迟 | 核对 isPublic,等数十秒~数分钟再试 |
| 安装命令 401 | 链到了私有仓或路径错 | 用详情页生成的免认证命令 |
| 上传 401 / 403 | 未配 Deploy Token 或无 Write | 控制台建令牌,绑定该公开 HOSTED |
| Docker pull 失败 | 镜像名手写了 /v2 |
去掉 /v2,对照接入配置 |
| 合作方仍要网盘 | 公开的是 SNAPSHOT 或不稳定路径 | 只公开正式版坐标 |
FAQ
公开仓能不能匿名上传?
不能。公开只放开读;写始终要认证(Deploy Token / 登录)。
能不能把整个私服默认公开?
不要。按交付物单独建公开 HOSTED,内网仓保持私有。
含私有源的 GROUP 可以公开吗?
不要。只公开交付用的 HOSTED;GROUP 若聚合了私有仓,勾公开等于扩大暴露面。
门户和控制台是两套系统吗?
不是。同一实例、同一数据;改公开属性后门户可见性跟着变。
小结
- 公开门户解决分发最后一公里,不是另建下载站。
- 单独公开 HOSTED;SNAPSHOT、密钥、含私有源的 GROUP 不要放进去。
- Deploy Token 负责写;无痕
/explore+ 详情页命令负责验;Docker 勿手写/v2。