⭐⭐⭐ Spring Boot 项目实战 ⭐⭐⭐ Spring Cloud 项目实战
《Dubbo 实现原理与源码解析 —— 精品合集》 《Netty 实现原理与源码解析 —— 精品合集》
《Spring 实现原理与源码解析 —— 精品合集》 《MyBatis 实现原理与源码解析 —— 精品合集》
《Spring MVC 实现原理与源码解析 —— 精品合集》 《数据库实体设计合集》
《Spring Boot 实现原理与源码解析 —— 精品合集》 《Java 面试题 + Java 学习指南》

摘要: 原创出处 juejin.cn/post/7523256725127987226 「_Jude」欢迎转载,保留摘要,谢谢!


🙂🙂🙂关注微信公众号:【芋道源码】有福利:

  1. RocketMQ / MyCAT / Sharding-JDBC 所有源码分析文章列表
  2. RocketMQ / MyCAT / Sharding-JDBC 中文注释源码 GitHub 地址
  3. 您对于源码的疑问每条留言都将得到认真回复。甚至不知道如何读源码也可以请教噢。
  4. 新的源码解析文章实时收到通知。每周更新一篇左右。
  5. 认真的源码交流微信群。

一、MinIO 牺牲开源精神走向商业利益

今天部署好minio后打开web界面发现只剩下纯对象存储:

图来源于小众软件

原因是2月26号的一个PR以“精简控制台”为由删了114736行代码:

而官方这么说: “对于需要图形界面完成管理的场景,请迁移到我们的商业产品(AiStor),社区用户则可以使用 mc 命令行”。网友对此表示强烈谴责 :)

二、寻找平替,尝试RustFS

RustFS 是一个用 Rust 语言构建的高性能分布式对象存储系统,定位为 MinIO 的替代方案。

Rust的安全性和高性能以及Apache 2.0的开源协议是我将它作为MinIO的平替的主要原因。

因为RustFS是比较新的项目,按照官网的docker部署命令有点问题。

但官方在相关 issue 中已经给了解决方案,下面是我结合该方案并使用docker-compose部署成功的实操记录:

2.1. 准备好以下目录结构:

/mnt/rustfs/
├── data/
└── docker-compose.yml

docker-compose.yml文件内容:

services:
rustfs:
image:rustfs/rustfs:latest
container_name:rustfs
ports:
-"9000:9000"# API 端口
-"9001:9001"# Console 端口
volumes:
-./data:/data# 数据存储
environment:
-RUSTFS_ROOT_USER=rustfsadmin
-RUSTFS_ROOT_PASSWORD=rustfsadmin
-RUSTFS_ADDRESS=:9000
-RUSTFS_CONSOLE_ADDRESS=:9001
-RUSTFS_CONSOLE_ENABLE=true
-RUSTFS_LOG=warn
restart:unless-stopped

2.2 /mnt/rustfs/目录下启动。

docker-compose up -d 启动容器

docker compose ps查看状态:

2.3 开放安全组

如果访问不了记得新增安全组,开放9000/9001的端口:

2.4 测试访问

控制台页面访问9001端口:

默认的账号密码:rustfsadmin/rustfsadmin

2.5 配置https

为了安全考虑,我希望服务只能由https协议通过nginx转发来访问,而不能直接通过ip访问:

首先将docker-compose.yml文件做如下改动:

ports:
# - "9000:9000" # API 端口
# - "9001:9001" # Console 端口
- "127.0.0.1:9000:9000" # API 端口
- "127.0.0.1:9001:9001" # Console 端口

然后创建一个子域名 rustfs.yourdomain.cn 映射到 yourdomain.cn:9001,nginx配置如下:

upstream rustfs_console {
server localhost:9001;
}

upstream rustfs_api {
server localhost:9000;
}

# RustFS Console (Web UI)
server {
listen 443 ssl;
server_name rustfs.yourdomain.cn;

ssl_certificate /etc/letsencrypt/live/yourdomain.cn-0001/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/yourdomain.cn-0001/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;


location / {
proxy_pass http://rustfs_console;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Port $server_port;

# WebSocket 支持
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}

# RustFS API
server {
listen 443 ssl;
server_name rustfsapi.yourdomain.cn;

ssl_certificate /etc/letsencrypt/live/yourdomain.cn-0001/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/yourdomain.cn-0001/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

location / {
proxy_pass http://rustfs_api;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}

# HTTP 重定向到 HTTPS
server {
listen 80;
server_name rustfs.yourdomain.cn rustfsapi.yourdomain.cn;
return 301 https://$server_name$request_uri;
}

测试https访问:

总结

随着 MinIO 社区版自 2024 年 2 月起全面移除 Web 管理界面,标志着其加速向商业化闭源演进,对广大习惯图形化管理的用户来说无疑是一种“背刺”。

尽管 MinIO 声称 CLI(如 mc)功能更专业,但对中小企业、个人开发者甚至初学者而言,图形界面不可或缺。

同时,RustFS 作为国产、开源、Rust 编写的分布式对象存储项目,凭借以下优势,已具备成为 MinIO 替代品的潜力:

对比项 MinIO(社区版) RustFS
开源协议 AGPL v3(限制较多) Apache 2.0(更宽松)
管理界面 ✅ 已被移除(需付费) ✅ 自带 Web 控制台
命令行支持 mc REST API + 后续工具支持
部署复杂度 简单 较简单,支持 Docker Compose
性能与安全性 高,但维护封闭 Rust 架构,天生安全高效
中文社区与生态支持 较少(商业倾向) 正在建设中

注意:RustFS 项目还处于早期阶段,功能在逐步完善,生产环境部署需做额外验证。

文章目录
  1. 1. 一、MinIO 牺牲开源精神走向商业利益
  2. 2. 二、寻找平替,尝试RustFS
    1. 2.1. 2.1. 准备好以下目录结构:
    2. 2.2. 2.2 /mnt/rustfs/目录下启动。
    3. 2.3. 2.3 开放安全组
    4. 2.4. 2.4 测试访问
    5. 2.5. 2.5 配置https
  3. 3. 总结