g632104866
V2EX  ›  Java

纯开源 Nexus 替代方案 kkRepo 1.0.0 正式发布,新增 R/CRAN、Go Hosted 和多套 UI 主题

  •  
  •   g632104866 · 3h 23m ago · 250 views

    前言

    从 0.x 一路迭代到现在,kkRepo 终于迎来了首个稳定版本:kkRepo 1.0.0

    这个版本新增了完整的 R/CRAN 仓库、Go Hosted 仓库和多套可切换 UI 主题,同时完善了 PyPI 代理、组件上传、全局搜索与 Maven Snapshot 删除等能力。

    kkRepo 是什么?

    kkRepo 是一款社区驱动、完全开源的自托管制品仓库,目标是解决 Sonatype Nexus Community Edition 在格式支持、容量限制、迁移和高可用部署等方面的痛点。

    项目围绕 Nexus 的客户端协议、权限模型和 /repository/<repo>/... URL 布局实现兼容,并提供存量仓库、制品、用户、角色和权限迁移能力,尽量让原有客户端配置和 CI 工作流保持不变。

    目前已经支持 20+ 种仓库格式和代理类型:

    Maven 、npm 、PyPI 、Go 、Helm 、Cargo/Rust 、Dart/Pub 、Composer/PHP 、Terraform 、Swift Package Registry 、Ansible Galaxy 、Conda 、APT/Debian 、Conan 2 、Alpine/APK 、R/CRAN 、Hugging Face Models 、Docker/OCI 、NuGet 、RubyGems 、Yum 和 Raw 。

    不同格式根据官方协议支持 hosted 、proxy 或 group 仓库。

    为什么是 1.0.0 ?

    1.0.0 是 kkRepo 的首个稳定版本。

    这并不意味着项目已经停止演进,而是代表核心仓库、权限、存储、迁移、搜索、多副本协调以及 JVM/Native 部署能力已经形成一条稳定发布线。

    v1.0.0 主要更新

    1. 新增 R / CRAN 仓库

    v1.0.0 新增 R/CRAN 的 hosted 、proxy 和 group 三种仓库类型。

    主要能力包括:

    • Hosted 保存企业内部 R source package
    • Proxy 缓存公开 CRAN 镜像
    • Group 统一解析私有包和公共包
    • 自动生成确定性的 PACKAGES.gz
    • Package coordinate 不可变,相同内容重试幂等
    • Group 按 snapshot 固定具体成员和 checksum
    • 支持 Cleanup Policy 和制品安全扫描
    • 支持多副本发布协调和故障恢复
    • 支持经过数据结构验证的 Nexus 3.94 迁移
    • 使用真实 R 4.5/4.6 客户端完成兼容性验证

    R 客户端可以直接配置 kkRepo:

    local({
      repos <- getOption("repos")
      repos["KKRepo"] <- "https://repo.example.com/repository/r-group"
      options(repos = repos)
    })
    

    然后正常使用:

    install.packages(
      "acmepkg",
      repos = "https://repo.example.com/repository/r-group",
      type = "source"
    )
    

    当前 hosted 和 group 聚焦 source .tar.gz package ; Windows 、macOS binary package 可以通过 proxy 透传缓存。

    2. Go 仓库补齐 Hosted 能力

    此前 kkRepo 的 Go 仓库主要用于 proxy 和 group 。v1.0.0 增加了完整的 Go hosted repository ,可以正式托管企业内部 Go Module 。

    上传一个规范的 Module ZIP 后,kkRepo 会在同一个数据库事务中生成并发布:

    • .mod
    • .info
    • .zip

    这样即使部署了多个副本,客户端也不会读取到只发布了一部分的 Module Version 。

    Go hosted 还支持:

    • Module Path 、Version 、ZIP Root 和 go.mod 校验
    • DENYALLOW_ONCEALLOW 写入策略
    • Admin UI 和 Components API 上传
    • Cleanup Policy
    • 制品安全扫描和下载阻断
    • Nexus Go Hosted 数据迁移
    • Hosted 与多个 Proxy 组成统一 Group
    • 真实 go listgo mod downloadgo mod verify 验证

    客户端只需要把 GOPROXY 指向 group:

    go env -w GOPROXY=https://repo.example.com/repository/go-group/,direct
    

    3. 新增多套 UI 主题

    Admin 、Browse 和登录页面现在支持统一切换主题。

    v1.0.0 内置:

    • kkRepo Original
    • Indigo
    • Ocean
    • Sunset
    • JFrog-inspired
    • Nexus-inspired

    主题设置保存在数据库中,多副本之间保持一致。

    管理员可以在保存前实时预览主题,配置异常时也会安全回退到默认样式。升级用户默认继续使用原来的 kkRepo 设计,不会因为升级突然改变界面。

    4. PyPI Proxy 支持自定义远程 Index Path

    过去 PyPI Proxy 默认假设上游索引位于 /simple,但 PyTorch 等仓库的 Package Index 可能直接位于 Remote URL 根路径。

    v1.0.0 新增 Remote Index Path

    • 普通 PyPI 保持 /simple
    • 上游 URL 本身就是 Index Root 时可以留空
    • 也可以配置 /api/simple 等自定义路径
    • 客户端访问 kkRepo 的地址仍保持 /repository/<repo>/simple

    例如代理 PyTorch CPU Index 时,可以把 Remote URL 配置为:

    https://download.pytorch.org/whl/cpu/
    

    然后将 Remote Index Path 留空。

    现有 PyPI Proxy 升级后仍然保留 /simple,原有行为不会改变。

    5. 一批兼容性和使用体验修复

    v1.0.0 还修复和优化了:

    • Maven Release 、Snapshot 和 Timestamped Snapshot 在 Browse 中删除后,能够正确重建对应 metadata
    • PyPI Hosted 可以接收包含大量 metadata 字段的 Twine multipart 上传
    • MySQL 全局搜索不会再因为 com 等 InnoDB Stopword 丢失有效结果
    • 上传页面根据仓库能力展示目录、文件名和多文件控件
    • NuGet 、RubyGems 等格式继续保持严格的单文件上传
    • Browse 搜索导航、格式选择、侧栏滚动和包详情布局得到优化
    • Admin 与 Browse 使用统一的滚动条样式
    • 仓库请求路由改为 fail-closed 的协议 Handler SPI ,为后续扩展新格式提供统一边界

    现有核心能力

    除了仓库格式,kkRepo 目前还支持:

    • Nexus 存量仓库、制品、用户、角色和权限迁移
    • Local 、LDAP 、OIDC 认证
    • 匿名访问策略和细粒度权限管理
    • 带权限校验的全局制品搜索
    • CycloneDX SBOM 和漏洞扫描
    • 安全策略、豁免和可选下载阻断
    • 面向全部仓库格式的 Cleanup Policy
    • Prometheus 指标和 Grafana 面板
    • MySQL 或 PostgreSQL 元数据存储
    • OSS 、S3 和 File blob storage
    • JVM 与 GraalVM Native 两种运行时
    • 多副本高可用部署
    • 按仓库配置 HTTP 或 SOCKS5 出站代理

    Native 版本通常约 1 秒启动就绪,内存占用低于 200 MB 。

    快速体验

    机器上安装好 Docker 与 Docker Compose 后执行:

    curl -fsSL https://raw.githubusercontent.com/klboke/kkrepo/main/scripts/quickstart.sh | bash
    

    使用 PostgreSQL:

    curl -fsSL https://raw.githubusercontent.com/klboke/kkrepo/main/scripts/quickstart.sh | KKREPO_DATABASE_TYPE=postgresql bash
    

    启动 Native 版本:

    curl -fsSL https://raw.githubusercontent.com/klboke/kkrepo/main/scripts/quickstart.sh | KKREPO_RUNTIME=native bash
    

    启动后访问:

    • 管理控制台:http://127.0.0.1:19090/admin/
    • 用户侧浏览器:http://127.0.0.1:19090/browse/
    • 健康检查:http://127.0.0.1:19091/actuator/health

    首次进入页面时,在 UI 中创建 Local/admin 管理员密码。

    Quickstart 默认使用 File blob storage ,适合本地试用;生产环境建议使用独立的 MySQL/PostgreSQL 和 OSS/S3 ,并替换默认加密密钥。

    容器镜像

    JVM:

    ghcr.io/klboke/kkrepo:1.0.0
    ghcr.io/klboke/kkrepo:latest
    

    Native:

    ghcr.io/klboke/kkrepo:1.0.0-native
    ghcr.io/klboke/kkrepo:native-latest
    

    安全扫描器:

    ghcr.io/klboke/kkrepo-scanner:1.0.0
    

    所有发行镜像均支持 Linux AMD64 和 ARM64 。

    GitHub Release 同时提供 JVM 压缩包、AMD64/ARM64 Native 压缩包以及统一的 SHA-256 校验文件。

    从 v0.9.0 升级

    现有 v0.9.0 MySQL 和 PostgreSQL 部署可以通过 Flyway V49–V50 原地升级。

    升级前请注意:

    1. 同时备份关系数据库和 blob store 。
    2. 等待 Flyway 迁移完成后再恢复业务流量。
    3. 新 schema 应用后,不要混合运行 v0.9.0 和 v1.0.0 实例。
    4. 新的 R/CRAN 仓库不会自动创建,需要管理员手动配置。
    5. 现有 PyPI Proxy 在未配置 Remote Index Path 时继续使用 /simple
    6. 现有 Go Proxy 和 Group 行为保持不变,只有显式创建或加入 Go Hosted 成员后才会启用新的 Hosted 能力。

    最后

    从 Maven 、npm 、PyPI ,到 Docker 、Conda 、APT 、Conan 、Alpine 、R/CRAN 和 Hugging Face Models ,kkRepo 正在逐步补齐一套真正开源、可迁移、支持多副本部署的制品仓库方案。

    如果你正在使用 Nexus ,欢迎拿真实仓库、真实客户端和实际 CI 流程测试 kkRepo 。

    遇到兼容性问题或者希望支持新的仓库格式,可以直接提交 Issue:

    https://github.com/klboke/kkRepo/issues

    如果项目对你有帮助,也欢迎 Star 、反馈和参与贡献。

    1 replies    2026-08-27 16:12:09 +08:00
    yidinghe
        1
    yidinghe  
    PRO
       3h 8m ago via Android
    这就是特别赚钱的公司吗,还有精力搞这个
    ⊙﹏⊙
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3304 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 11:20 · PVG 19:20 · LAX 04:20 · JFK 07:20
    ♥ Do have faith in what you're doing.