可以下线 Nexus 了:纯开源制品仓库 kkRepo v0.9.0 发布,新增 Alpine、Hugging Face Models 与全局搜索

g632104866 2026-08-20 11:46 1

上次在 V2EX 跟大家分享了 kkRepo v0.8.0 ,这次 v0.9.0 也正式发布了。


这一版不只是继续增加仓库格式,还补上了全局制品搜索、版本更新提醒、代理重定向白名单,以及一批界面和稳定性改进。



  • 项目地址:https://github.com/klboke/kkRepo

  • v0.9.0 Release:https://github.com/klboke/kkRepo/releases/tag/v0.9.0


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 、Hugging Face Models 、Docker/OCI 、NuGet 、RubyGems 、Yum 和 Raw 。


不同格式按协议能力支持 hosted 、proxy 或 group 仓库。


v0.9.0 主要更新


1. 新增 Alpine / APK 仓库


本次新增 Alpine/APK 的 hosted 、proxy 和 group 三种仓库类型:



  • Hosted 支持 APK v2 软件包发布和签名索引生成

  • Proxy 支持上游索引透传,以及验签后重新签名

  • Group 支持按成员顺序统一解析多个 Alpine 仓库

  • 支持 Browse 、Search 、Cleanup 和安全扫描

  • 使用真实 apk 客户端验证 updatesearchfetchaddupgrade

  • 支持从经过验证的 Nexus 3.94 数据结构迁移


2. 新增 Hugging Face Models 代理仓库


现在可以把 kkRepo 作为团队内部的 Hugging Face Models 代理:



  • 支持通过 HF_ENDPOINT 接入

  • 支持 hf downloadhuggingface_hubsnapshot_download

  • 支持 Transformers 与 Diffusers 下载模型

  • 服务端桥接 Git LFS 与 Xet 存储

  • 按 commit 固定并缓存模型文件,避免 mutable revision 带来的不确定性

  • 支持多副本协调、Browse 、Search 、Cleanup 和安全扫描


当前版本聚焦 Models proxy ,不包含 hosted/group 、Datasets 、Spaces 和推理 API 。


3. 新增带权限校验的全局制品搜索


Browse 和 Admin 现在都可以跨仓库搜索制品:



  • 搜索前校验仓库权限和 Content Selector

  • 无权限的仓库与制品不会出现在结果中

  • 使用稳定的 keyset pagination

  • 针对大规模 MySQL 数据做了自适应查询优化

  • 修复了 MySQL FULLTEXT 无法匹配短词坐标的问题


这项功能解决了仓库数量较多时,需要先进入某个仓库才能查找制品的问题。


4. 其他改进



  • 新增基于 GitHub Release 的版本更新提醒

  • Proxy 仓库可以配置可信的重定向目标域名,同时保留全局 SSRF 防护

  • 统一节点本地 TTL 缓存抽象,继续保持多副本下缓存可丢失、可重建

  • 优化 Browse 仓库详情、OIDC/LDAP 、账号、登录、顶部导航和欢迎页

  • 修复 URL 中经过百分号编码的 + 被错误解析为空格的问题

  • 修复长代理地址写入审计字段时可能导致 MySQL 请求失败的问题


现有核心能力


除仓库格式外,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

启动 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 。


容器镜像:


ghcr.io/klboke/kkrepo:0.9.0
ghcr.io/klboke/kkrepo:0.9.0-native
ghcr.io/klboke/kkrepo-scanner:0.9.0

均提供 Linux AMD64 和 ARM64 镜像。


从 v0.8.0 升级


v0.8.0 的 MySQL 和 PostgreSQL 部署可以通过 Flyway V46–V48 原地升级。


升级前请同时备份关系数据库和 blob store ,并等待数据库迁移完成后再恢复流量。新 schema 应用后,不要继续混合运行 v0.8.0 与 v0.9.0 实例。


组件数据量较大的部署,建议在低 I/O 时段执行 V47 索引迁移。


项目目前仍处于 1.0 之前,生产升级前请先阅读完整 Release Notes 。


如果你正在使用 Nexus ,也欢迎拿真实仓库和客户端测试 kkRepo 。遇到兼容性问题或缺少的仓库格式,可以直接在 GitHub 提 Issue 。


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

最新回复 (2)
  • 89ao 08-21 01:38
    1
    赞,支持一下,已 star
  • DreamSpace 08-21 08:45
    2
    看着整个项目就你在输出,其余贡献者才 1 个 commit ,你一停更这项目不就寄了,哪来的社区驱动。标题说可以下线 Nexus 要是真有人信了那不是寄了,这样宣传我认为实在是不合适。
* 帖子来源V2EX
返回