前言
minio 在今年 5 月份时, 控制台 ui 出现了一个很大的变化 – 删减了绝大多数 ui 特性
现状
下图是社区版前后的对比


可以看到 Access Keys 和 Policies 的菜单都没了
讨论
在 github 上,有讨论这个问题的相关 issue
官方给出的答复如下图

我的看法
minio 在 oss 的开源圈中小有名气,我自己的图床也是基于 minio 搭建的
minio 项目的开源协议是 AGPL-3.0. 这个协议最大限制是它的传染性,就是说如果你修改了源代码,那么你必须要公开你修改之后的版本
就协议来说,对于我这种没有修改需求的用户而言,没有什么影响
这次的主要问题在于,我一个社区用户不能再通过控制台 ui 来管理访问 key,也不能通过控制台 ui 来管理访问策略
选择
如果想要在 minio 的控制台 ui 上用上以上的特性,有两个选择
- 回退 minio 版本到 RELEASE.2025-04-22T22-12-26Z, 这是拥有完整 ui 特性的最后版本
- 升级到商用版本
我最近刷到的有关 rustfs 的广告真的有点多,那不然就试试呗
rustfs 现在最新的版本是 1.0.0-alpha.66,都还没发布正式版本,也不知道是哪些人在吹
不过 rustfs 是一个国产项目,文档有中文版本,对国人还是很友好的
开搞
部署 rustfs
直接部署一个新环境肯定没什么问题,但我之前使用的是 minio, 数据也要迁移过来才行
另外就是,我在 minio 中配置的是多磁盘,那肯定也是想要能直接换到 rustfs 就能用的
我的环境虽然说是多磁盘,但实际上是伪多磁盘,实际磁盘也只有一块
之前的部署使用的是 docker compose 配置
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 
 | services:minio:
 image: minio/minio:RELEASE.2025-04-22T22-12-26Z
 container_name: minio
 restart: always
 networks:
 - minio
 environment:
 MINIO_ROOT_USER: xxx
 MINIO_ROOT_PASSWORD: xxx
 volumes:
 - ~/applications/minio/data/disk1:/mnt/data/disk1
 - ~/applications/minio/data/disk2:/mnt/data/disk2
 - ~/applications/minio/data/disk3:/mnt/data/disk3
 - ~/applications/minio/data/disk4:/mnt/data/disk4
 command: |
 server
 /mnt/data/disk{1...4}
 --console-address ":9001"
 nginx:
 image: nginx:1.29.1
 container_name: route-minio
 restart: always
 depends_on:
 - minio
 networks:
 - minio
 volumes:
 - ~/applications/minio/nginx/nginx.conf:/etc/nginx/nginx.conf:ro
 - ~/applications/cert/home.wuhunyu.top:/etc/cert:ro
 - ~/applications/minio/nginx/logs:/opt/nginx/logs
 ports:
 - 9000:9000
 - 9001:9001
 
 
 networks:
 minio:
 driver: bridge
 
 | 
简单修改一下 docker compose 的配置,换成 rustfs
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 
 | services:rustfs:
 image: rustfs/rustfs:1.0.0-alpha.66
 container_name: rustfs
 restart: unless-stopped
 networks:
 - rustfs
 environment:
 TZ: Asia/Shanghai
 RUSTFS_ACCESS_KEY: xxx
 RUSTFS_SECRET_KEY: xxx
 RUST_LOG: error
 RUSTFS_OBS_LOG_DIRECTORY: "/var/logs/rustfs/"
 RUSTFS_ADDRESS: ":9000"
 RUSTFS_CONSOLE_ENABLE: true
 volumes:
 - ~/applications/rustfs/data/disk1:/mnt/data/disk1
 - ~/applications/rustfs/data/disk2:/mnt/data/disk2
 - ~/applications/rustfs/data/disk3:/mnt/data/disk3
 - ~/applications/rustfs/data/disk4:/mnt/data/disk4
 - ~/applications/rustfs/logs:/var/logs/rustfs
 - /etc/localtime:/etc/localtime:ro
 command: |
 /mnt/data/disk{1...4}
 
 nginx:
 image: nginx:1.29.1
 container_name: route-rustfs
 restart: unless-stopped
 environment:
 TZ: Asia/Shanghai
 depends_on:
 - rustfs
 networks:
 - rustfs
 volumes:
 - ~/applications/rustfs/nginx/nginx.conf:/etc/nginx/nginx.conf:ro
 - ~/applications/cert/home.wuhunyu.top:/etc/cert:ro
 - ~/applications/rustfs/nginx/logs:/opt/nginx/logs
 - /etc/localtime:/etc/localtime:ro
 ports:
 - 9000:9000
 - 9001:9001
 
 networks:
 rustfs:
 driver: bridge
 
 | 
启动, 登录控制台 ui

数据迁移
部署的任务是完成了,但之前在 minio 的数据也需要迁移过来
如果要一个个地走 S3 的标准 API 那就有点麻烦了.看官方文档也支持 mc 工具,那不妨拿来用用
mc 工具是 minio 官方开发的一个命令行工具,它的功能要比控制台 ui 上的特性更丰富
但对于一般用户来说用的还是比较少
要用 mc 工具,那就得把两个 oss 服务都跑起来才行. 简单地修改修改一下原来的 minio 服务的端口就行了,避免端口冲突
比方说,我修改 minio 的 api 端口为 9002, 控制台 ui 端口为 9003
真实操作之前,还等登录控制台 ui 生成一个 Access Keys, minio 和 rustfs 都需要
| 12
 3
 4
 5
 6
 7
 8
 
 | # 配置 minio$ mc alias set minio https://[访问地址]:9002 [Access Key] [Secret Key]
 
 # 配置 rustfs
 $ mc alias set rustfs https://[访问地址]:9000 [Access Key] [Secret Key]
 
 # 开始全量迁移
 $ mc mirror --overwrite --remove --preserve minio/ rustfs/
 
 | 
等结束就好了

最后我的 images bucket 是需要匿名可访问的
| 1
 | $ mc anonymous set download rustfs/images
 | 
注意事项
超时
如果像我一样配置了 nginx 反向代理,迁移过程中可能会因为迁移的文件太大而超时
这时候需要修改 nginx 配置,调大请求体,调大超时时间
| 12
 3
 4
 
 | proxy_send_timeout 3000s;proxy_read_timeout 3000s;
 proxy_connect_timeout 3000s;
 client_max_body_size 100G;
 
 |