1db9badec86e1a7d10276f3e5c22eeb1d788beea
any-hub
any-hub 是一个面向个人与小型团队的多仓库代理,主打匿名访问、命令行部署与单一 config.toml 控制平面。当前阶段已交付 Phase 1:构建 Host→Hub 路由、磁盘缓存与示例代理。
单仓代理 (Phase 1)
Phase 1 的 HTTP 服务与磁盘缓存能力详见 specs/002-fiber-single-proxy/spec.md 与 plan.md。目标是:
- 构建 Fiber HTTP 服务 + Host 驱动(共享
ListenPort)的 Hub Registry,使docker.hub.local、npm.hub.local等域名在同一端口内路由到独立上游。 - 实现
StoragePath/<Hub>/<path>目录下的磁盘缓存,依靠文件mtime+ 上游HEAD请求完成动态标签的再验证。 - 提供 Docker/NPM/PyPI 示例配置、quickstart、测试桩,运行
go test ./tests/integration即可验证代理/缓存流程。
随着 Phase 1 推进,cmd/any-hub 将接入 server/cache/quickstart 章节,便于复用 Phase 0 的配置与日志骨架。
ListenPort 与凭证迁移指南
- 全局端口:在配置全局段声明
ListenPort = <port>,所有 Hub 共享该端口;旧的[[Hub]].Port字段已弃用,any-hub --check-config会在检测到遗留字段时直接失败。 - Hub 类型:为每个
[[Hub]]添加Type = "docker|npm|go|pypi",驱动日志中的hub_type字段并预留协议特定行为;非法值会被校验阻断。 - 可选凭证:如需突破上游限流,成对提供
Username/Password。CLI 仅在这两个字段同时出现时注入 Basic Auth,并在日志中输出掩码形式的auth_mode=credentialed。 - 验证命令:使用
any-hub --check-config --config ./config.toml快速确认迁移是否完成,成功时日志会显示listen_port、hub_type等字段。
凭证配置示例
[[Hub]]
Name = "secure"
Domain = "secure.hub.local"
Upstream = "https://registry.corp.local"
Type = "npm"
Username = "ci-user"
Password = "s3cr3t"
- CLI 日志不会打印明文凭证,而是输出
credentials=["secure:credentialed"],可在any-hub --check-config --config secure.toml中验证。 - 建议结合环境变量或密钥管理器生成
config.toml,并通过chmod 600或 CI Secret 注入限制可见范围。
快速开始
- 复制
configs/config.example.toml为工作目录下的config.toml并调整[[Hub]]配置:- 在全局段添加/修改
ListenPort,并从每个 Hub 中移除Port。 - 为 Hub 填写
Type,并按需添加Module(缺省为legacy,自定义模块需在internal/hubmodule/<module-key>/注册)。 - 根据 quickstart 示例设置
Domain、Upstream、StoragePath等字段,并按需添加Username/Password。
- 在全局段添加/修改
- 参考
specs/003-hub-auth-fields/quickstart.md完成配置校验、凭证验证与日志检查。 - 常用命令:
any-hub --check-config --config ./config.tomlany-hub --config ./config.tomlany-hub --version
模块化代理与示例
configs/docker.sample.toml、configs/npm.sample.toml展示了 Docker/NPM 的最小配置,包含新的Module字段,复制后即可按需调整。- 运行
./scripts/demo-proxy.sh docker(或npm)即可加载示例配置并启动代理,日志中会附带module_key字段,便于确认命中的是legacy还是自定义模块。 - 若需自定义模块,可复制
internal/hubmodule/template/、在init()中调用hubmodule.MustRegister描述 metadata,并通过proxy.RegisterModuleHandler注入模块专属的ProxyHandler,最后运行make modules-test自检。 - 示例操作手册、常见问题参见
specs/003-hub-auth-fields/quickstart.md以及本特性的quickstart.md。
CLI 标志
| Flag | 描述 |
|---|---|
--config, -c |
指定配置文件路径,优先级高于 ANY_HUB_CONFIG |
--check-config |
仅执行配置校验并退出,退出码区分成功/失败 |
--version |
打印语义化版本信息并立即退出 |
更多细节可查阅 contracts/cli-flags.md。
优先级:
--config⬆ANY_HUB_CONFIG⬆ 默认./config.toml。--version会短路其他逻辑,--check-config则在日志中记录action=check_config并返回退出码。
配置校验错误示例
$ any-hub --check-config --config broken.toml
Config.ListenPort: 必须在 1-65535
Hub[npm].Type: 不支持的值 "rubygems"
错误消息以 字段路径: 原因 形式展示,可根据 quickstart.md 的“常见错误排查”章节快速定位。
Description
Languages
Go
84.6%
Shell
15.1%
Dockerfile
0.2%
Makefile
0.1%