前言
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 配置
1 2 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
1 2 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 都需要
1 2 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 配置,调大请求体,调大超时时间
1 2 3 4
| proxy_send_timeout 3000s; proxy_read_timeout 3000s; proxy_connect_timeout 3000s; client_max_body_size 100G;
|