第 129 期·对象存储·Rust·Apache-2.0

先给判断:如果你自建的 S3 端点原来跑在 MinIO 社区版上,RustFS 是目前外形最接近接盘者的那一个 —— 同样是单二进制、同样吃 S3 API、同样带 Web 控制台,许可还从 AGPLv3 换成了 Apache-2.0。但有一条前提必须先说在前面:我抓到的最近十个 Release 全部被标记为预发布,最新一个是今天发布的 1.0.0-preview.4,也就是说它到现在还没有一个正式版。拿它接盘可以做,但镜像 tag 必须钉死到具体版本,别用 latest。

背景不用多解释。MinIO 社区版这几年一直在往回收:许可从 Apache-2.0 换成 AGPLv3;2025 年上半年把社区版 Web 控制台里的用户、策略、桶、配置管理整块删掉,只留下一个对象浏览器(据 Blocks and Files 等公开报道,官方给的理由是维护两套控制台成本太高,而缺乏专人维护的管理界面本身会引入安全风险);随后社区版停止在 Docker Hub 发布镜像与预编译二进制;到 2025 年 12 月 3 日,社区仓库被置为维护模式。对已经在用的人来说,这已经不是技术问题,而是我依赖的东西正在被一点点拿走。


一、它到底是做什么的

项目是 rustfs/rustfs,用 Rust 写的分布式对象存储,仓库主题里直接把 minio、s3、object-storage、ai-native 都挂上了。README 开头把自己的定位讲得很直白:

RustFS is a high-performance, distributed object storage system built in Rust—one of the most
loved programming languages worldwide. RustFS combines the simplicity of MinIO with the memory
safety and raw performance of Rust.

接着它把许可这件事单独拎出来讲了一句:

Unlike other storage systems, RustFS is released under the permissible Apache 2.0 license,
avoiding the restrictions of AGPL.

功能面上,README 用一张状态表把能力分成两档:标成 Available 的是已经随包发布、并且有 CI 门禁覆盖的;标成 Preview 的是要靠开关打开、或者只在受限范围内承诺兼容。已经可用的那一档相当齐:单机与分布式、版本控制、Bitrot 保护、Object Lock(WORM)、Healing 与 Scanner、服务端加密、Bucket 复制、生命周期管理、生命周期分层到远端 S3、Bucket 配额、IAM 与策略、OIDC 单点登录、多租户、Web 控制台、K8s Helm Chart、事件通知,另有 OpenStack Swift API 与 Keystone 认证。

服务端加密这块它单独写了一句限定:KMS 后端里 Vault(KV2 与 Transit)和 AWS KMS 可以用于生产,而 LocalStatic 两个后端只供开发和测试。换句话说,想开加密又不想把密钥交出去之前,先确认自己的 KMS 后端属于哪一档。

默认端口沿用对象存储的惯例:9000 给 S3 接口,9001 给 Web 控制台。它对外强调的是能与 MinIO、Ceph 之类已有的 S3 平台共存、并支持迁移。


二、怎么用:一条 docker run,加一次 chown

README 的快速开始给了六条路(一键脚本、Docker、源码构建、Helm、Nix、x-cmd),最省事的是 Docker 那条。但它在命令之前先加了一段提醒,这段提醒正是最容易踩的地方:容器不是以 root 跑的,而是以非 root 用户 rustfs(UID 与 GID 都是 10001)运行,所以每一个绑定挂载的宿主目录都必须对 10001 可写,否则启动会直接以权限拒绝告终。

README 给出的原命令是这样,注意 chown 那行不是可选步骤:

# Create data and logs directories
mkdir -p data logs

# Change the owner of these directories
chown -R 10001:10001 data logs

# Using latest version
docker run -d -p 9000:9000 -p 9001:9001 -v $(pwd)/data:/data -v $(pwd)/logs:/logs rustfs/rustfs:latest

# Using specific version
docker run -d -p 9000:9000 -p 9001:9001 -v $(pwd)/data:/data -v $(pwd)/logs:/logs rustfs/rustfs:1.0.0-rc.6

如果在用 podman,README 给的是同一套参数,只在挂载上加两个标志位让 podman 自己处理属主:

podman run -d -p 9000:9000 -p 9001:9001 -v $(pwd)/data:/data:Z,U -v $(pwd)/logs:/logs:Z,U rustfs/rustfs:latest

用 Compose 的话,仓库根目录里那份简化版文件是:

docker compose -f docker-compose-simple.yml up -d

起来之后的三步 README 也写好了:浏览器打开 9001 端口进控制台,默认账号密码是 rustfsadminrustfsadmin,进去建一个桶,然后从控制台上传对象,或者直接用 S3 客户端接。这里顺一句:默认口令等于没有口令,控制台别裸暴露在公网。

另外 README 还给了两条容易忽略的前提。一是单机单盘部署只能作为独立本地路径存在,既不能原地扩容、也不能当作一个 Pool 加进已有集群,要换多盘拓扑只能新起一套再从 S3 迁数据;二是想开 webhook 通知的话,从 1.0.0-beta.11 起,指向私有网络或容器网络的 webhook 端点默认是被拦的,必须把 scheme://host:port 这个精确来源写进 RUSTFS_OUTBOUND_ALLOW_ORIGINS 才放行。

需要说明:本文未安装、未实机验证,以上步骤均为 README 原文转述,实际操作请以官方文档为准。


三、优点:许可干净,控制台没被砍,协议面更宽


四、缺点:它自己还没到 GA,而数据类项目最怕的就是这个

先说最硬的一条:抓到的最近十个 Release 全部标记为预发布,一个正式版都没有,而 issue 里最新的几条正指着当前版本。这一点在下面单独一节展开。除了版本状态,还有几类问题是这段时间的问题单里反复出现的:

许可这层可以放心,但有几处细节值得看清楚。LICENSE 是 11,570 字节的标准 Apache-2.0 全文,附录之后没有追加任何补充条款,也没有非商用限制,这是它相对 MinIO 社区版最实在的优势。两个可以顺手记下的差异:一是 LICENSE 附录里填的版权方是 Beijing Henghesha Technology Co., Ltd.,即北京恒河沙科技有限公司,而 README 末尾写的商标持有方是 RustFS, Inc.,两处主体名称并不一致;二是官网当前的下载页只列了两个产品 —— RustFS Server 与 RustFS CLI Client,没有出现定价页或付费版,所以现在不存在开源的付费墙。公司化运营加上商标在手,属于需要留意的方向,但不构成当下的使用限制。

五、挖到底:它现在到底算第几版

这一节是本期最值得单独看的核实结果,因为它决定你敢不敢上生产。GitHub 的最新发行端点返回 404,而发行列表里最近十个版本无一例外都标着 prerelease,最新的一个叫 1.0.0-preview.4,就是今天发出来的。换句话说,一个功能表上已经写着分布式、纠删码、复制、KMS 的项目,至今没有对外发布过 GA 版本。版本号本身也还是 beta 与 rc 与 preview 三种后缀轮着用。

版本发布时间状态包形态
1.0.0-preview.409-16prerelease仅 zip(Linux 四种组合 + macOS + Windows)
1.0.0-rc.609-11prereleasezip + deb + rpm + SBOM
1.0.0-rc.509-02prereleasezip + deb + rpm + SBOM
1.0.0-rc.408-28prerelease仅 zip(这一版没有 deb 与 rpm)
1.0.0-rc.108-08prerelease首次带上 deb 与 rpm

平台覆盖也有个明确的缺口:我看到的这十个 Release 里,macOS 只有 aarch64 一种包,没有 Intel 的 x86_64 包,也没有出现 Universal 命名;Windows 只有 x86_64。Linux 是最全的,x86_64 与 aarch64 各有 gnu 与 musl 两份。用 Intel Mac 的人只能自己从源码编,或者退回到容器里跑。

还有一个细节值得单独拎出来,因为它是纯粹的下载陷阱:从 rc.1 到 rc.6 这几版的附件里同时挂着两批文件,一批名字里带具体版本号,比如 rustfs-linux-x86_64-gnu-v1.0.0-rc.6.zip;另一批名字里写的是 latest,比如 rustfs-linux-x86_64-gnu-latest.zip。这两批文件都挂在同一个 Release 下,而最新的 preview.4 里反而只有带版本号的一批;要拿最新的构建就得进最新那个 Release 页,而不是在旧版本的页面里点名字里带 latest 的那个包。同一个版本号还有三种拼法:zip 里写 v1.0.0-rc.6,deb 包里写成 1.0.0.rc.6,rpm 里写成 1.0.0_rc.6。自动化脚本按名字匹配的话,这三处都得覆盖。


六、最终效果:你能拿到什么,以及要付什么

把 RustFS 跑起来之后,你得到的是一套自己完全掌握的 S3 端点:控制台功能是齐的,CI 里的构建产物、备份归档、K8s 的存储后端、AI 训练用的数据集,都可以走同一套 S3 API,而不用为 AGPL 去找法务评估。许可干净加上控制台完整,这两条正好打在 MinIO 社区版的痛处上。代价则集中在两处:一是它还没 GA,二是它对集群运维的要求不低 —— 复制、扫描、用量统计这些正是问题单里最活跃的地方,小规模单机用不太容易撞上,集群一上就开始考人。

谁适合现在就用:

谁不适合:

三件上手前必须先做的事:第一,镜像 tag 钉到具体版本,别用 latest,并且把上一版留在手边,因为 rc 与 rc 之间出现过内存回归;第二,挂载目录先 chown 到 10001,data、logs 与证书目录都要,这一步不做就是权限拒绝起步;第三,进控制台第一件事是改掉默认口令,别让 9001 裸暴露在公网。另外补一句:如果以后要从 MinIO 迁数据,别指望原地把二进制换掉 —— MinIO 磁盘格式兼容那一项还标着 Preview,要靠开关打开且默认构建里没有,而且 MinIO 加密过的对象 RustFS 读不了,只能按 S3 重新搬一遍。

下期预告:既然这期拆了 MinIO 的替代品,下一篇把自建对象存储横向摆一次 —— RustFS、MinIO 社区版、SeaweedFS、Garage 这几个放在同一张表里,对比它们的许可、部署门槛、控制台成色和迁移路径,讲清哪一种场景该选谁。

项目:github.com/rustfs/rustfs(Rust)· 许可证:Apache-2.0(标准全文,无追加条款;README 末尾声明 RustFS 是 RustFS, Inc. 的商标)· 资料来源:仓库主页、raw README(main 分支)、开放问题列表、发行与标签接口、官网下载页 · 抓取时间:2026-09-16 · 环境限制说明:本轮未对镜像仓库做存在性验证,README 里出现的镜像名与 tag 只按原文转述;官网首页未做全站遍历,关于是否有付费版的结论仅基于下载页所见。本文未安装、未实机验证,安装步骤逐字取自 README,结论请以实际环境为准。