Hacker News 中文摘要

RSS订阅

单节点本地 S3 的 MinIO 替代方案 -- Alternatives to MinIO for single-node local S3

现在开始探索用于单节点本地 S3 的 MinIO 替代方案,以及把 MinIO 换掉有多容易。我拿上述项目做尝试,尽量少改动就改用替代品,并保留 MinIO 的 S3 客户端 mc,因为真要彻底移除 MinIO,换成 s3cmd 或 aws CLI 也不麻烦。先测试 S3Proxy 3.0.0,配置很简单,有 Docker 镜像,采用 Apache 2.0 许可证;它依赖的 jclouds 已在 2025 年中移至 Apache Attic。接着测试 RustFS 1.0.0-alpha.79,配置同样容易。

正文

我们来探讨 MinIO 的各种替代方案,以及把它们换掉有多容易。我拿之前的项目试了试,尽量少做改动来用替代方案。MinIO 的 S3 客户端 mc 我保留着,因为真要彻底弃用 MinIO 时换掉它也无关紧要(比如换成 s3cmd、aws CLI 等)。

S3Proxy

版本测试:3.0.0

  • ✅ Docker 镜像(拉取量 500 万+)
  • ✅ 许可证:Apache 2.0
  • ✅ S3 兼容性

配置难易度:👍👍

实现非常简单,看起来是个不错的轻量选项。我注意到 S3Proxy 所用的一个项目 jclouds 在 2025 年中移入了 Apache Attic(即退役),不过如果只用作本地存储大概也没什么大碍?

RustFS

版本测试:1.0.0-alpha.79

配置难易度:✅✅

  • ✅ Docker 镜像(拉取量 10 万+)
  • ✅ 许可证:Apache 2.0
  • ✅ S3 兼容性

需注意,RustFS 最近被发现一个相当严重的安全漏洞,让一些人对它望而却步。官网看起来挺漂亮,但好几个链接都指向同一页,透着新项目“刚刷了漆”的味道 :) 如果易于替换,对演示可能影响不大。另外要注意项目目前还只是“alpha”版本。

RustFS 架构图

RustFS 还带一个图形界面:

RustFS 图形界面

SeaweedFS

版本测试:4.06

  • ✅ Docker 镜像(拉取量 500 万+)
  • ✅ 许可证:Apache 2.0
  • ✅ S3 兼容性

配置难易度:👍

SeaweedFS 架构图

这个快速入门对实现最基础的 S3 功能很有用。(不过我还是直接让 Claude 做的实现……)。整体上改动不多,基本就是换掉 Docker 镜像,但认证需要单独的配置文件(和 Garage 一样,我把它内联进了 Docker Compose)。

编辑:刚发完博客,项目方就回复说会去掉这个额外要求,用起来更省事了!真棒 :)

SeaweedFS 自带一个实用的基础界面:

SeaweedFS 界面

SeaweedFS 官网出奇地简陋,乍一看很容易忽略它是个开源项目,因为页面上有“定价”选项,首页标题还是“SeaweedFS Enterprise”(而且我没找到 GitHub 链接!)。但它确实是开源项目,而且历史悠久:自 2018 年的 0.91 版本起就支持 S3 了。你还可以从一些幻灯片里了解更多,包括与 MinIO 的对比图。

Zenko CloudServer

版本测试:9.2.8

  • ✅ Docker 镜像(Docker Hub 上过期版本拉取量 500 万+)
  • ✅ 许可证:Apache 2.0
  • ✅ S3 兼容性

配置难易度:👍

CloudServer 架构图

CloudServer 以前叫 S3 Server,是 Scality 发布的 Zenko 工具集的一部分。替换 MinIO 相当容易,但我起初有点搞不清 cloudserver/zenko/scality 这些名字和实际要运行的软件之间的关系。文档链接到过时的 Docker 镜像也让人觉得有点怪。

Garage

配置难易度:😵

版本测试:1.0.0

  • ✅ Docker 镜像(拉取量 100 万+)
  • ✅ 许可证:AGPL
  • ✅ S3 兼容性

这个我得找“朋友”帮忙(指 Claude)。除了 garage 容器,还需要另一个容器做初始化配置,以及一个 TOML 配置文件,我把它内联进 Docker Compose 以保持简洁。

Garage 架构图

我能不能自己读文档搞定?能。但我有更值得花时间的事。

所以 Garage 确实能用,但天呐……它不是代码改动上直接替换的那种。初始化需要不同的管道,而且也不简单。举个简单例子:“指定的密钥 ID 不是有效的 Garage 密钥 ID(以 GK 开头,后接 12 个十六进制字节)”。对生产环境规范很好,但对本地演示过度了,说实话有点碍事。

这评价完全公平吗?如果把它当作全新专业技术来看,绝对不公平!许多优秀技术,尤其能支持分布式运行的,配置学习曲线都陡。但我这里的需求是简单替换 MinIO——Garage 不是。

Apache Ozone

版本测试:2.1.0

  • ✅ Docker 镜像(拉取量 100 万+)
  • ✅ 许可证:Apache 2.0
  • ✅ S3 兼容性

Ozone 2020 年从 Apache Hadoop 独立出来(还记得吗?),最初是 2015 年作为 HDFS 项目的一部分创建的。

配置难易度:😵

Apache Ozone 架构图

它确实能替换 MinIO,但绝非轻量替代;我和 Claude 都没法用少于四个节点部署它。很有重口味 Hadoop 的感觉,我可不会急着在本场景采用。

Ceph Object Gateway

Ozone(上文)已经够重量级了;我相信两者都很胜任本职,但它们都不是能塞进我 Docker Compose 栈做本地演示的轻量容器。

评论

围绕 MinIO 之后单节点本地 S3 该用什么,讨论迅速变成一份替代品清单,Garage、SeaweedFS、RustFS 被反复提起。分歧集中在两点:你要的究竟是「S3 类似」,还是「MinIO 兼容」;以及该接受轻量工具的取舍,还是选功能更全但更重的一套。

认为直接用文件系统就行,不必什么都套一层 HTTP

  • 有人对本地场景动辄上 S3 协议表示不耐烦,觉得直接用文件系统更省事。(少数人) > 直接用文件系统就好,为什么非要在一切东西之间塞一层 HTTP?(@sdcfgy)

把 Garage 当单节点替代是很多人的共同落点

  • Garage 被提得最多:有人从 MinIO 迁移过来后发现复杂度差不多,只是少了 GUI,实际承载 registry、Loki、Mimir 等负载时配置改动也只有密钥和地址。(较多人)
  • 新版提供了单节点自动配置,一条命令就能起服务并建默认桶,降低了上手门槛。(较多人)
  • 有人用它跑本地开发环境,也有人从出问题的 SeaweedFS 迁移过来,认为它单节点很稳,实测到约 10TB。(较多人)

但 Garage 的能力边界也很明确

  • 元数据引擎必须放在 NVMe 上,否则小文件会变慢;没有按桶的保留策略等设置,本质就是「只是」一个 S3 桶。(较多人)
  • 用于 Iceberg 不行:Iceberg 依赖条件 PUT 的正确语义,而 Garage 是最终一致的,给不了这个保证。(少数人)
  • Docker 镜像不会像数据库镜像那样自动建密钥、桶和权限,首次手动配置很烦,不过文档不错。(少数人)

认为 SeaweedFS 功能更全但更重

  • 组件更多、功能更丰富,对家庭实验室属于杀鸡用牛刀,所以有人转向了 Garage。(较多人)
  • 它的 IAM、STS 和策略层做得不错,能靠 OIDC 集成支持类似 AWS IRSA 的无密钥认证流程。(较多人)
  • 批评集中在运维细节:通过 Terraform 模块建用户时删除接口响应有问题,也缺少 S3 过期规则,只能用自身配置或 API 做。(少数人)

看好 RustFS 作为 MinIO 的平滑接替

  • 从 MinIO 迁移过去的过程相当顺滑,也有人把它跑在生产环境,作为归档服务的后端,在裸金属上表现良好并与现有 S3 客户端无缝对接。(较多人)
  • 提醒来自内网部署的经验:公网场景要留意文章里提到的 CVE。(少数人)

推崇 VersityGW 的 POSIX 后端

  • 它的 posix 后端最实用:多部分上传会以真实文件落盘,测试失败时可以直接用 ls 检查。(少数人)

更轻量的绕开做法:挂载、代理或复用现有系统

  • 本地目录加 s3fs 挂载、rclone serve、localstack 都被当作比 MinIO 更轻的选择,localstack 顺带还能给其他 AWS 服务。(较多人)
  • 已有系统自带能力也被点名:Incus 内置了简单的 S3 服务,Filestash 的 S3 网关插件能把请求代理到 SFTP、FTP、另一套 S3、SMB、NFS、IPFS 等后端。(少数人)
  • 其他备选包括 JuiceFS、不按单文件存对象且集成 DuckDB 的 hs5、S2、Scality S3(Zenko Cloudserver,注意要用最新镜像源),以及由维护者实名接手、承诺持续打补丁的 pgsty/minio 分叉。(少数人)

怀疑这些并不构成 MinIO 的真正替代

  • 文章标题说的是「单节点本地 S3」,实际问的却是「MinIO 兼容性」,这是两个不同的问题;真正使用本地 S3 的代码层面,迁移往往只是改密钥和地址。(较多人)
  • MinIO 是为规模而生的,这些方案大多不是同一类东西,Ceph 可能才是最接近的。(较多人)
  • 有人感叹 MinIO 退出后留下的真空大得离谱。(少数人) > MinIO 留下的真空真大。(@nater5000)

有价值的补充

  • 想找一套严格实现条件 GET/PUT/DELETE 和 ETag 语义的本地对象存储并不容易,这是 Iceberg 一类依赖条件写的工作负载的硬门槛。
  • VersityGW 的 posix 后端把多部分上传落成磁盘上的真实文件,调试时可直接检查,这一点比黑盒式存储友好。
  • SeaweedFS 的 OIDC 集成能做到类似 IRSA 的无密钥认证,是它相对其他轻量方案的能力差异点。
  • Garage 的元数据引擎必须跑在 NVMe 上,否则小文件性能会明显退化。