MinIO 停更!国产平替 openEuler 离线部署 RustFs 实战

国产存储崛起!告别 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

fHxQ9EAjr.png

前言

一场由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纯离线环境为载体,从环境准备、安装部署到功能验证,全程图文并茂拆解实操步骤,所有命令均可直接复制执行,适配单机部署需求。


一、部署前置要求

1.1 系统与权限要求

  • 系统版本: openEuler 22.03 LTS 任意子版本
  • 执行权限:全程使用  root 超级管理员操作(官方文档默认配置)

1.2 关闭 SELinux(必做)

openEuler 22.03 LTS 默认开启的 SELinux 会拦截 RustFs 的目录读写和端口监听权限,导致服务启动失败,需立即关闭:

# 临时关闭 立即生效[root@openeuler-server ~]# setenforce 0# 验证关闭成功[root@openeuler-server ~]# getenforcePermissive
[root@openeuler-server ~]#

image.png

1.3 防火墙端口配置

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 ~]#

image.png


二、下载安装包 & 解压部署

2.1 离线获取安装包

官方原版文档提供在线下载命令,但纯离线环境需通过 外网机器下载 → 内网传输的方式获取安装包:

  1. 外网机器访问 RustFs 官方下载地址:
    • GitHub 版本页: https://github.com/rustfs/rustfs/releases/tag/1.0.0-alpha.78
  2. 下载 X86 架构的二进制包: rustfs-linux-x86_64-musl-latest.zip
    image.png
  3. 通过  SCP/U盘/内网传输工具,将安装包上传至 openeuler 离线服务器的  /opt 目录
    image.png

2.2 解压与系统部署

登录 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]#

image.png

# 官方原版解压命令[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]#

image.png

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

image.png

2.3 验证部署成功

执行版本查看命令,确认 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]#

image.png

2.4 外网机器在线部署(可选)

若 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 < 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]#

image.png

3.1 创建官方指定目录并赋权

执行命令创建数据存储、日志、证书目录,同时配置正确权限:

[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]#

image.png

目录说明

  • /data/rustfs0:核心数据存储目录,存放所有对象存储文件
  • /var/logs/rustfs:日志存储目录,包含运行日志和错误日志
  • /opt/tls:证书目录,用于后续配置 HTTPS 访问

四、配置 Systemd 系统服务

这是保障 RustFs 后台持久化运行的核心步骤,官方指定服务文件路径为  /etc/systemd/system/rustfs.service,直接复制以下命令创建完整配置文件:

[root@openeuler-server opt]# tee /etc/systemd/system/rustfs.service < [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]#

image.png

4.1 重载系统服务配置

创建服务文件后,需执行重载命令使配置生效:

[root@openeuler-server opt]# systemctl daemon-reload[root@openeuler-server opt]#

image.png


五、启动服务 & 完整验证

5.1 启动服务并设置开机自启

执行官方核心命令,一键启动 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]#

image.png

5.2 验证服务运行状态

执行状态查看命令,确认服务处于  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]#

image.png

5.3 检查服务端口监听

执行端口查看命令,确认 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]#

image.png

若提示  netstat: command not found,离线安装工具包即可:

yum install -y net-tools --nogpgcheck

5.4 查看服务日志文件

执行日志查看命令,确认无 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

5.5 访问可视化控制台

  1. 打开内网浏览器,输入控制台完整访问地址:
    http://172.20.2.121:9001/rustfs/console/auth/login

image.png
2. 输入官方默认账号密码登录:

    - 用户名:`rustfsadmin`
    - 密码:`rustfsadmin`

image.png


六、RustFs 核心功能实操

6.1 创建存储桶

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

6.2 上传文件夹

  1. 进入  iot-prod 存储桶,点击上传文件夹按钮:
    image.png
  2. 选择本地待上传文件夹:
    image.png
  3. 确认开始上传:
    image.png

6.3 任务与文件管理

  1. 查看上传任务进度:
    image.png
  2. 查看已上传文件目录结构:
    image.png
  3. 查看文件对象详情:
    image.png

6.4 存储桶权限配置

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


七、RustFs 常用运维命令

整理生产环境必备运维命令,可直接复制使用:

# 重启服务(修改配置后必执行)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 官方文档最新内容为准。

—— 以上仅为个人在存储领域的实践总结与技术思考,不代表任何企业或行业普遍观点。文中所有操作均需在具备足够权限的测试环境下先行验证,涉及生产环境部署时,请务必做好数据全量备份。文中案例、命令与实操思路仅供技术交流参考,若与实际项目场景重合,纯属巧合。期待与各位运维、存储领域从业者共同探讨国产开源存储方案的更多落地可能性,助力企业摆脱海外开源项目的授权与维护风险!


请使用浏览器的分享功能分享到微信等