国产存储崛起!告别 MinIO!openEuler 单机纯离线部署 RustFs 实战指南
作者: ShunWah
公众号: "shunwah星辰数智社"主理人。持有认证: OceanBase OBCA/OBCP、MySQL OCP、OpenGauss、崖山YCA、金仓KingBase KCA/KCP、KaiwuDB KWCA/KWCP、 亚信 AntDBCA、翰高 HDCA、GBase 8a/8c/8s、Galaxybase GBCA、Neo4j ScienceCertification、NebulaGraph NGCI/NGCP、东方通TongTech TCPE、TiDB PCTA等多项权威认证。
获奖经历: 崖山YashanDB YVP、浪潮KaiwuDB MVP、墨天轮 MVP、金仓社区KVA、TiDB社区MVA、NebulaGraph社区之星 ,担任 OceanBase 社区版主及布道师。曾在OceanBase&墨天轮征文大赛、OpenGauss、TiDB、YashanDB、Kingbase、KWDB、Navicat Premium × 金仓数据库征文等赛事中多次斩获一、二、三等奖,原创技术文章常年被墨天轮、CSDN、ITPUB 等平台首页推荐。
- CSDN_ID: shunwahma
- 墨天轮_ID:shunwah
- ITPUB_ID: shunwah
- IFClub_ID:shunwah

一场由Rust语言驱动的存储革命正席卷而来。
当全球开发者因MinIO社区版突然移除Web管理界面而措手不及,当AGPL许可证的“传染性”风险让企业用户如履薄冰,一个来自中国的开源力量正以颠覆性姿态破局——RustFS。这款基于Rust语言的高性能分布式存储系统,仅用一年时间便在GitHub狂揽1.5k星,成为炙手可热的MinIO替代方案。
2025年2月,MinIO社区版以“精简控制台”为由删除11万行代码,彻底移除了Web管理功能。官方声明直白要求:“需要图形界面的用户请迁移至商业产品AiStor”。这一举动被社区视为对开源精神的背叛,引发开发者强烈抗议;到 2025年12月3日 ,MinIO更是宣布项目进入“维护模式”,意味着开发重心从新功能迭代转向确保现有功能的稳定性和安全性,同时不再主动处理新的功能请求、增强需求或社区贡献。
在此背景下,大量基于MinIO构建单机对象存储的企业和运维人员,急需一款 原生Linux部署、100%兼容S3协议、纯离线无依赖、高性能轻量的平替方案。RustFs凭借Rust语言编译的先天优势——无GC、无内存泄漏、静态二进制包直接运行,成为最优选择。它不仅资源占用仅为MinIO的1/5,读写性能反超30%+,还能完美兼容MinIO生态工具链(mc、aws cli等),实现业务零代码迁移。
本文基于 RustFs 1.0.0-alpha.78版本,严格遵循官方文档规范,以openEuler纯离线环境为载体,从环境准备、安装部署到功能验证,全程图文并茂拆解实操步骤,所有命令均可直接复制执行,适配单机部署需求。
openEuler 22.03 LTS 任意子版本root 超级管理员操作(官方文档默认配置)openEuler 22.03 LTS 默认开启的 SELinux 会拦截 RustFs 的目录读写和端口监听权限,导致服务启动失败,需立即关闭:
# 临时关闭 立即生效[root@openeuler-server ~]# setenforce 0# 验证关闭成功[root@openeuler-server ~]# getenforcePermissive [root@openeuler-server ~]#

RustFs 默认占用
9000(S3 API 端口)和
9001(Web 控制台端口),需放行端口或直接关闭防火墙:
# 方案一:放行指定端口(生产推荐)[root@openeuler-server ~]# firewall-cmd --permanent --add-port=9000/tcp --add-port=9001/tcp[root@openeuler-server ~]# firewall-cmd --reload# 验证放行结果[root@openeuler-server ~]# firewall-cmd --list-ports# 方案二:直接停止防火墙(测试环境快捷)[root@openeuler-server ~]# systemctl stop firewalld[root@openeuler-server ~]# systemctl status firewalld○ firewalld.service - firewalld - dynamic firewall daemon Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: ena> Active: inactive (dead) since Sun 2025-12-28 18:56:19 CST; 1 week 3 days ago Docs: man:firewalld(1) Main PID: 2541901 (code=exited, status=0/SUCCESS) 12月 24 11:19:48 openeuler-server systemd[1]: Starting firewalld - dynamic firewall daemon.> 12月 24 11:19:48 openeuler-server systemd[1]: Started firewalld - dynamic firewall daemon. 12月 28 13:19:35 openeuler-server firewalld[2541901]: WARNING: ALREADY_ENABLED: 8080:tcp 12月 28 18:56:18 openeuler-server systemd[1]: Stopping firewalld - dynamic firewall daemon.> 12月 28 18:56:19 openeuler-server systemd[1]: firewalld.service: Deactivated successfully. 12月 28 18:56:19 openeuler-server systemd[1]: Stopped firewalld - dynamic firewall daemon. [root@openeuler-server ~]#

官方原版文档提供在线下载命令,但纯离线环境需通过 外网机器下载 → 内网传输的方式获取安装包:
https://github.com/rustfs/rustfs/releases/tag/1.0.0-alpha.78rustfs-linux-x86_64-musl-latest.zip

SCP/U盘/内网传输工具,将安装包上传至 openeuler 离线服务器的
/opt 目录

登录 openEuler 22.03 LTS 离线服务器,执行官方原版解压、授权、移动命令,完成二进制包部署:
# 进入安装包目录[root@openeuler-server ~]# cd /opt/[root@openeuler-server opt]# lscontainerd kat-ui.tar rustfs-linux-x86_64-musl-latest.zip kat kwdb kat-server.tar patch_workspace [root@openeuler-server opt]#

# 官方原版解压命令[root@openeuler-server opt]# unzip rustfs-linux-x86_64-musl-latest.zip Archive: rustfs-linux-x86_64-musl-latest.zip inflating: rustfs [root@openeuler-server opt]#

# 官方原版赋执行权限[root@openeuler-server opt]# chmod +x rustfs# 官方原版移动到系统全局目录[root@openeuler-server opt]# mv rustfs /usr/local/bin/

执行版本查看命令,确认 RustFs 已正确部署:
[root@openeuler-server opt]# rustfs --versionrustfs 1.0.0-alpha.78 build time : 2025-12-30 15:29:50 +00:00 build profile: release build os : linux-x86_64 rust version : rustc 1.92.0 (ded5c06cf 2025-12-08) rust channel : stable-x86_64-unknown-linux-gnu git branch : git commit : 3c1494787848b38e0aff9608869007ab0f9b501d git tag : 1.0.0-alpha.78 git status : [root@openeuler-server opt]#

若 openEuler 22.03 LTS 服务器具备外网访问能力,可直接执行官方在线命令:
wget https://dl.rustfs.com/artifacts/rustfs/release/rustfs-linux-x86_64-musl-latest.zip unzip rustfs-linux-x86_64-musl-latest.zip chmod +x rustfs mv rustfs /usr/local/bin/
官方要求通过
/etc/default/rustfs 文件统一配置核心参数,
单机单盘模式下,直接复制以下命令创建配置文件,无需修改任何内容:
[root@openeuler-server opt]# tee /etc/default/rustfs <<EOF> RUSTFS_ACCESS_KEY=rustfsadmin > RUSTFS_SECRET_KEY=rustfsadmin > RUSTFS_VOLUMES="/data/rustfs0"> RUSTFS_ADDRESS=":9000"> RUSTFS_CONSOLE_ENABLE=true> RUST_LOG=error > RUSTFS_OBS_LOG_DIRECTORY="/var/logs/rustfs/"> EOF RUSTFS_ACCESS_KEY=rustfsadmin RUSTFS_SECRET_KEY=rustfsadmin RUSTFS_VOLUMES="/data/rustfs0"RUSTFS_ADDRESS=":9000"RUSTFS_CONSOLE_ENABLE=trueRUST_LOG=error RUSTFS_OBS_LOG_DIRECTORY="/var/logs/rustfs/"[root@openeuler-server opt]#

执行命令创建数据存储、日志、证书目录,同时配置正确权限:
[root@openeuler-server opt]# mkdir -p /data/rustfs0 /var/logs/rustfs /opt/tls[root@openeuler-server opt]# chmod -R 750 /data/rustfs* /var/logs/rustfs[root@openeuler-server opt]#

目录说明
/data/rustfs0:核心数据存储目录,存放所有对象存储文件/var/logs/rustfs:日志存储目录,包含运行日志和错误日志/opt/tls:证书目录,用于后续配置 HTTPS 访问
这是保障 RustFs 后台持久化运行的核心步骤,官方指定服务文件路径为
/etc/systemd/system/rustfs.service,直接复制以下命令创建完整配置文件:
[root@openeuler-server opt]# tee /etc/systemd/system/rustfs.service <<EOF> [Unit] > Description=RustFS Object Storage Server > Documentation=https://rustfs.com/docs/ > After=network-online.target > Wants=network-online.target > > [Service] > Type=notify > NotifyAccess=main > User=root > Group=root > > WorkingDirectory=/usr/local> EnvironmentFile=-/etc/default/rustfs > ExecStart=/usr/local/bin/rustfs \$RUSTFS_VOLUMES> > LimitNOFILE=1048576 > LimitNPROC=32768 > TasksMax=infinity > > Restart=always > RestartSec=10s > > OOMScoreAdjust=-1000 > SendSIGKILL=no > > TimeoutStartSec=30s > TimeoutStopSec=30s > > NoNewPrivileges=true> > ProtectHome=true> PrivateTmp=true> PrivateDevices=true> ProtectClock=true> ProtectKernelTunables=true> ProtectKernelModules=true> ProtectControlGroups=true> RestrictSUIDSGID=true> RestrictRealtime=true> > # service log configuration> StandardOutput=append:/var/logs/rustfs/rustfs.log > StandardError=append:/var/logs/rustfs/rustfs-err.log > > [Install] > WantedBy=multi-user.target > EOF [Unit] Description=RustFS Object Storage Server Documentation=https://rustfs.com/docs/ After=network-online.target Wants=network-online.target [Service] Type=notify NotifyAccess=main User=root Group=root WorkingDirectory=/usr/localEnvironmentFile=-/etc/default/rustfs ExecStart=/usr/local/bin/rustfs $RUSTFS_VOLUMESLimitNOFILE=1048576 LimitNPROC=32768 TasksMax=infinity Restart=always RestartSec=10s OOMScoreAdjust=-1000 SendSIGKILL=no TimeoutStartSec=30s TimeoutStopSec=30s NoNewPrivileges=trueProtectHome=truePrivateTmp=truePrivateDevices=trueProtectClock=trueProtectKernelTunables=trueProtectKernelModules=trueProtectControlGroups=trueRestrictSUIDSGID=trueRestrictRealtime=true# service log configurationStandardOutput=append:/var/logs/rustfs/rustfs.log StandardError=append:/var/logs/rustfs/rustfs-err.log [Install] WantedBy=multi-user.target [root@openeuler-server opt]#

创建服务文件后,需执行重载命令使配置生效:
[root@openeuler-server opt]# systemctl daemon-reload[root@openeuler-server opt]#

执行官方核心命令,一键启动 RustFs 并配置开机自启:
[root@openeuler-server opt]# systemctl enable --now rustfsCreated symlink /etc/systemd/system/multi-user.target.wants/rustfs.service → /etc/systemd/system/rustfs.service. [root@openeuler-server opt]#

执行状态查看命令,确认服务处于
active (running) 状态:
systemctl status rustfs
✅ 成功状态示例:
[root@openeuler-server opt]# systemctl status rustfs ● rustfs.service - RustFS Object Storage Server Loaded: loaded (/etc/systemd/system/rustfs.service; enabled; vendor preset: disabled) Active: active (running) since Fri 2026-01-09 15:01:07 CST; 23s ago Docs: https://rustfs.com/docs/ Main PID: 3085929 (rustfs) Status: "Starting..." Tasks: 24 Memory: 70.9M CGroup: /system.slice/rustfs.service └─ 3085929 /usr/local/bin/rustfs /data/rustfs0 1月 09 15:01:07 openeuler-server systemd[1]: Starting RustFS Object Storage Server... 1月 09 15:01:07 openeuler-server systemd[1]: Started RustFS Object Storage Server. [root@openeuler-server opt]#

执行端口查看命令,确认 9000 和 9001 端口已被 RustFs 进程监听:
[root@openeuler-server opt]# netstat -ntpl |grep rustfstcp6 0 0 :::9000 :::* LISTEN 3085929/rustfs tcp6 0 0 :::9001 :::* LISTEN 3085929/rustfs [root@openeuler-server opt]#

若提示
netstat: command not found,离线安装工具包即可:yum install -y net-tools --nogpgcheck
执行日志查看命令,确认无 ERROR 级别日志,服务启动正常:
[root@openeuler-server opt]# tail -f /var/logs/rustfs/rustfs*.log==> /var/logs/rustfs/rustfs-err.log <== ==> /var/logs/rustfs/rustfs.log <== RustFS Http API: http://172.20.2.121:9000 http://127.0.0.1:9000 RustFS Start Time: 2026-01-09 15:01:07 Console WebUI Start Time: 2026-01-09 15:01:07 Console WebUI available at: http://172.20.2.121:9001/rustfs/console/index.html Console WebUI (localhost): http://127.0.0.1:9001/rustfs/console/index.html RustFS server started successfully at [::]:9000, current time: 2026-01-09 07:01:07.370767100 UTC
http://172.20.2.121:9001/rustfs/console/auth/login
2. 输入官方默认账号密码登录:
- 用户名:`rustfsadmin` - 密码:`rustfsadmin`

登录控制台后,创建名为
iot-prod 的存储桶:
✅ 创建成功界面:

iot-prod 存储桶,点击上传文件夹按钮:






进入存储桶配置页面,可设置
私有、公有、自定义三种访问策略:
✅ 配置完成界面:

整理生产环境必备运维命令,可直接复制使用:
# 重启服务(修改配置后必执行)systemctl restart rustfs# 停止服务systemctl stop rustfs# 查看服务状态systemctl status rustfs# 关闭开机自启systemctl disable rustfs# 实时查看运行日志tail -f /var/logs/rustfs/rustfs.log# 查看错误日志tail -f /var/logs/rustfs/rustfs-err.log# 重载服务配置(修改service文件后必执行)systemctl daemon-reload
从MinIO移除Web控制台、进入维护模式的“背刺”,到RustFs凭借Rust语言优势实现的绝地反击,这场存储领域的变革,本质上是开源生态对“商业绑架开源”的一次正向回应。本次部署完全遵循RustFs官方文档规范,在openEuler 22.03 LTS纯离线环境下,实现了从环境准备到功能验证的全流程实操,通过Systemd托管保障服务持久化运行,所有核心参数均按官方标准配置,成功解决了早期非官方方案导致的启动失败问题。
作为一款国产开源存储方案,RustFs不仅实现了S3协议的100%兼容,还凭借轻量高性能、无商业授权风险、纯离线友好的特性,完美适配单机部署场景。部署完成后,业务代码、生态工具链无需任何修改即可无缝迁移,既规避了MinIO维护模式带来的技术断层风险,也摆脱了AGPL许可证的合规隐患。
从技术落地角度,RustFs的出现不仅填补了MinIO停更后的市场空白,更展现了国产开源项目在存储领域的技术实力——以Rust语言为基石,兼顾性能与安全性,以贴合国内企业的离线部署需求为导向,重构了单机对象存储的落地范式。对于企业而言,选择RustFs不仅是技术层面的替代,更是对开源生态健康发展的正向选择,也为后续分布式存储场景的拓展奠定了坚实基础。
作者注:
—— 本文所有操作及测试均基于 openEuler 操作系统 环境完成,核心围绕 对象存储替代方案落地展开,聚焦 MinIO 停更后 RustFs 的单机离线部署实战。请注意,RustFs 版本处于快速迭代中(本文基于 1.0.0-alpha.78 版本),部分配置参数与功能表现可能随版本更新发生变化,请以 RustFs 官方文档最新内容为准。
—— 以上仅为个人在存储领域的实践总结与技术思考,不代表任何企业或行业普遍观点。文中所有操作均需在具备足够权限的测试环境下先行验证,涉及生产环境部署时,请务必做好数据全量备份。文中案例、命令与实操思路仅供技术交流参考,若与实际项目场景重合,纯属巧合。期待与各位运维、存储领域从业者共同探讨国产开源存储方案的更多落地可能性,助力企业摆脱海外开源项目的授权与维护风险!
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70042915/viewspace-3107991/ ,如需转载,请注明出处,否则将追究法律责任。