2026-06-03 18:41:52 +08:00

3.3 KiB
Raw Permalink Blame History

FLNXI 付费模块 Registry 代理

这个目录只用于“客户拉取付费模块镜像”的 Registry 前置代理示例。

核心规则:

  • 发布方推送镜像仍走发布账号,不把发布账号给客户。
  • 客户拉取 flnxi/premium/* 付费模块时,用户名固定为 flnxi-module,密码是验证系统签发的 15 分钟短期 pullToken。
  • Nginx 代理会把 Authorization、Registry 主机、模块仓库路径、请求类型、tag/reference 和 digest 转发给 license-server 的 GET /api/registry/auth。
  • 验证系统确认 token、token 审计记录、许可证、激活实例和模块授权都有效后,代理才把请求放行到 Registry。

启动示例

先确认许可证服务和本代理在同一个 Docker 网络里,或者把 LICENSE_SERVER_AUTH_URL 改成代理能访问到的地址。

cd deploy/registry-proxy

cat > .env <<'EOF'
REGISTRY_PROXY_PORT=5000
LICENSE_NETWORK_NAME=license-network
LICENSE_SERVER_AUTH_URL=http://license-server:3000/api/registry/auth
EOF

docker compose up -d

如果许可证服务是通过 license-server/nginx/nginx.conf 里的外层 Nginx 暴露,可以把 LICENSE_SERVER_AUTH_URL 写成对应内网地址,例如:

LICENSE_SERVER_AUTH_URL=http://license-nginx/api/registry/auth

如果镜像站已经存在,不想再启动一个新的 registry:2,使用接入现有 Registry 的编排:

cat > .env <<'EOF'
REGISTRY_PROXY_PORT=5002
REGISTRY_NETWORK_NAME=flnxi-registry-net
LICENSE_NETWORK_NAME=license-network
REGISTRY_BACKEND=http://flnxi-registry:5000
REGISTRY_BACKEND_AUTH=Basic <proxy-backend-user-basic-token>
LICENSE_SERVER_AUTH_URL=http://license-server:3000/api/registry/auth
EOF

docker compose -f docker-compose.existing-registry.yml up -d

这种方式只新增 Nginx 拉取代理,不会创建新的 Registry 数据卷,也不会覆盖已有镜像站。如果现有 Registry 后端本身启用了 Basic Auth,必须配置一个只给代理使用的后端账号,并把 REGISTRY_BACKEND_AUTH 写成 Basic base64(username:password);客户仍然只拿验证系统签发的短期 pullToken,不会拿到这个后端账号。

客户拉取方式

客户侧 Go Agent 拿到验证系统返回的短期凭证后,等价于:

docker login registry.example.com:5000 -u flnxi-module -p '<pullToken>'
docker pull registry.example.com:5000/flnxi/premium/paid-core:1.0.0

没有短期 token、token 过期、仓库路径不匹配、tag 不匹配、镜像清单 digest 不匹配、许可证过期、激活失效或模块授权被吊销,都会被代理拒绝。Docker 拉取层文件时的 blob digest 不是整镜像 digest,最终整镜像 digest 由客户侧 Agent 拉取完成后再校验。

发布方注意

这个代理示例默认只放行客户拉取,不开放推送。发布付费模块镜像时应使用内部发布入口或临时直连 Registry 内网入口,再把固定 digest 写入 license-server 的模块配置:

PREMIUM_MODULE_PAID_CORE_IMAGE=registry.example.com:5000/flnxi/premium/paid-core:1.0.0
PREMIUM_MODULE_PAID_CORE_DIGEST=sha256:...

正式客户环境不要把发布账号、发布密码或 Registry 管理界面口令写进主应用 .env。Registry 原始后端也不要直接暴露给客户访问;客户入口应只到这个前置代理。