Skip to content

部署概述

Registry Server 是 Rack 架构的核心组件之一, 负责托管和分发 Registry JSON 配置、Preset 模板和项目模板文件。

什么是 Registry Server?

Registry Server 是一个静态资源分发服务器, 为 Rack CLI 工具提供统一的资源访问接口。它支持:

  • Registry 分发 - 托管 Registry JSON 配置和模板文件
  • 版本管理 - 支持多版本并存, 自动维护版本列表
  • 包上传 - 支持通过 API 上传新的 Registry 包
  • 命名空间管理 - 支持多租户隔离和访问控制
  • 认证授权 - 基于 Token 的细粒度权限管理, 支持 Admin Token 进行跨命名空间操作
  • Webhook 集成 - 事件驱动的通知机制
  • 性能优化 - 内置 ETag 缓存、压缩和速率限制

为什么需要自建服务?

虽然 Rack 提供了官方的 Registry 服务 (https://registry.rackjs.com), 但在以下场景下, 你可能需要部署自己的 Registry Server:

  • 企业私有化部署 - 企业内部使用, 需要将服务部署在私有网络或内网环境中。
  • 自定义 Registry 管理 - 需要托管企业内部开发的自定义 Registry 和模板。
  • 访问控制和审计 - 需要对 Registry 访问进行精细化的权限控制和审计。
  • 离线环境 - 在无法访问互联网的环境中使用 Rack。
  • 自定义集成 - 需要与企业现有的 CI/CD 流程、DevOps 平台集成。

服务架构

Registry Server 采用简洁的架构设计:

┌─────────────┐
│  Rack CLI   │ ←─────┐
└─────────────┘       │
                      │ HTTPS/HTTP
┌─────────────┐       │
│  CI/CD      │ ←─────┤
└─────────────┘       │

                ┌─────▼──────┐
                │  Registry  │
                │   Server   │
                └─────┬──────┘

        ┌─────────────┼─────────────┐
        │             │             │
   ┌────▼────┐  ┌─────▼────┐  ┌─────▼────┐
   │ Static  │  │   Auth   │  │  Webhook │
   │ Storage │  │  System  │  │  System  │
   └─────────┘  └──────────┘  └──────────┘

核心模块

  • 静态资源服务 - 分发 Registry、Preset、Schema 文件
  • 上传服务 - 接收并处理 Registry 包上传
  • 认证服务 - 基于 Token 的身份验证和权限控制
  • Webhook 服务 - 事件通知和集成
  • 监控服务 - 健康检查和 Prometheus 指标

存储模式与部署拓扑

通过 STORAGE_BACKEND 可选两种部署形态, 读写路径差异较大, 选型前请确认:

STORAGE_BACKEND=local (默认)

Server 同时承担上传与下载, 所有数据落在本地磁盘 (STORAGE_ROOT)。适合单机部署、内网环境、离线使用。

text
┌───────────────┐            ┌─────────────────┐     ┌─────────────────────────┐
│               │            │                 │     │                         │
│ Rack CLI / CI ├GET─/─POST─►│ Registry Server ├────►│ Local disk STORAGE_ROOT │
│               │            │                 │     │                         │
└───────────────┘            └─────────────────┘     └─────────────────────────┘

STORAGE_BACKEND=r2 (Cloudflare R2 + Worker)

上传仍走 Server (保留 SHA256 校验、tar 解压、schema 校验、webhook 派发等业务逻辑), 但文件落在 Cloudflare R2。下载由专门的 Cloudflare Worker 在边缘从 R2 直接分发, 对应域名是 registry.rackjs.com (自建可换成自己的域)。

text
┌───────────────┐                                  ┌────────────────────────────┐       ┌─────────────────────────┐
│               │                                  │                            │       │                         │
│ Rack CLI / CI │    ├───POST─/registries─upload──►│      Registry Server       ├─write►│ R2 bucket rack-registry │
│               │                                  │                            │       │                         │
└───────┬───────┘                                  └────────────────────────────┘       └─────────────────────────┘
        │                                                                                            ▲
        │                                                                                            │
        │                                                                                            │
        │                                                                                            │
        │                                                                                            │
        │                                          ┌────────────────────────────┐                  read
        │                                          │                            │                    │
        └────────────────GET─read─────────────────►│ Worker registry.rackjs.com ├────────────────────┘
                                                   │                            │
                                                   └────────────────────────────┘

r2 模式下 CLI / 客户端请把读取地址指向 Worker 域名

此模式下 Server 不再往本地盘写入, 其 GET /registries/** 路由仍存在但本地目录为空, 直接打 Server 读会 404。客户端 (Rack CLI、浏览器、CI) 读取请用 Worker 域名; 只有 POST /registries 上传才打 Server。

两端共用一份 auth.json

Server 读仓库根 config/auth.json (校验上传权限), Worker 读 R2 中的 .auth/auth.json (校验下载权限)。仓库里的 sync-auth.yml 工作流会在 config/auth.json 变更后自动同步到 R2, 不需要人工在两边维护。

API 端点

方法路径描述
GET/HEAD/registries/@ns/name/versions版本列表
GET/HEAD/registries/@ns/name最新版本
GET/HEAD/registries/@ns/name/1.0.0指定版本
GET/HEAD/registries/@ns/name/1.0.0/files/*模板文件
POST/registries上传 Registry 包
GET/namespaces列出命名空间(按认证过滤)
GET/namespaces/:ns/registries列出命名空间下的 Registry(需认证)
GET/HEAD/presets/:name获取 Preset 模板
GET/HEAD/schemas/:file获取 JSON Schema
GET/health健康检查
GET/metricsPrometheus 指标

Released under the MIT License.