前言
MinIO对象存储服务开发机部署与Spring Boot项目整合入门。
MinIO
MinIO 是一个基于 Go 实现的高性能、兼容 S3 协议的对象存储。它采用 GNU AGPL v3 开源协议,项目地址是 https://github.com/minio/minio,官网是 https://min.io。
它适合存储海量的非结构化的数据,例如说图片、音频、视频等常见文件,备份数据、容器、虚拟机镜像等等,小到 1 KB,大到 5 TB 都可以支持。
MinIO的运行模式
MinIO 支持三种部署拓扑结构:
单节点单驱动
Single-Node Single-Drive,也可称为SNSD 或 “Standalone”。指具有单个存储卷或文件夹的单个 MinIO 服务器。 SNSD部署提供故障转移保护。驱动器级可靠性和故障转移取决于底层存储卷。SNSD部署最适合使用 MinIO 进行对象存储的应用程序的评估和初始开发。
单节点多驱动
Single-Node Multi-Drive,也可称为SNMD 或 “Standalone Multi-Drive”。指具有四个或更多存储卷的单个 MinIO 服务器。 SNMD部署仅提供驱动器级可靠性和故障转移。
多节点多驱动
Multi-Node Multi-Drive,也可称为MNMD 或 “Distributed”。指分布式 MinIO 服务器,所有服务器上至少有四个驱动器。分布式MNMD拓扑支持具有驱动器和节点级可用性和弹性的生产级对象存储。
作为入门部署,下面仅展示SNSD部署。
安装部署
参考官方文档:https://min.io/download
仅考虑开发环境,用Docker部署是最方便的,下面是部署过程。
Docker部署(MacOS arm64):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# 查看minio镜像
docker search minio
# 拉取镜像
docker pull minio/minio
# 创建本地路径
mkdir myminio myminio/config myminio/data
# 创建环境变量配置文件
touch myminio/config/config.env
# config.env写入内容如下
# 设置 MinIO 服务器的root账号,此用户具有对部署中的任何资源执行 S3 和管理 API 操作的不受限制的权限。
MINIO_ROOT_USER=myminioadmin
# 至少8位
MINIO_ROOT_PASSWORD=minio-secret-key-change-me
# 设置用于 MinIO 服务器的存储路径。
MINIO_VOLUMES="/mnt/data"
# MINIO_SERVER_URL设置本地机器的主机名以用于 MinIO 服务器
# 取消注释以下行,并将该值替换为本地机器的正确主机名和 MinIO 服务器的端口(默认为 9000)
#MINIO_SERVER_URL="http://minio.example.net:9000"
# 运行容器
docker run -dt \
-p 9000:9000 -p 9090:9090 \
-v /path/to/myminio/data:/mnt/data \
-v /path/to/myminio/config:/etc \
-e "MINIO_CONFIG_ENV_FILE=/etc/config.env" \
--name "myminio" \
minio/minio server --console-address ":9090"
MinIO中默认配置9000端口是用于访问MinIO的对象存储服务的API端口,通过该端口可以执行各种对象存储相关的操作。而9090端口是用于访问MinIO的管理界面,通过该端口可以登录并执行MinIO实例的管理操作。
基础配置
运行容器成功后,可以通过MinIO的管理界面进行简单配置,访问 http://localhost:9090 进入管理界面。
然后新建存储桶,用于文件上传。点击桶,选择Anonymoous
创建一条Prefix为/
,Access为readonly
的匿名访问规则。
这样配置以后,文件访问地址的格式为http://localhost:9000/mybucket/{filename}
。
另外,MinIO Client (mc) 是 MinIO 提供的命令行工具,用于访问 MinIO Server。它的命令设计的非常棒,和我们在使用 ls、cat、cp、mirror、diff、find 等 Unix 命令基本接近,主要如下:
1 | ls 列出文件和文件夹 |
整合Spring Boot项目
下面在Spring Boot项目引入MinIO相关依赖实现文件的上传与删除的功能。
引入依赖如下。1
2
3
4
5
6<!-- MinIO 客户端 -->
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>8.2.2</version>
</dependency>
新建 MinIOConfiguration
配置类,创建 MinioClient Bean
,如下。
1 | import io.minio.MinioClient; |
新建 MinIOFileController
类,实现文件上传与删除的 RESTful API 接口。
1 |
|
打开Swagger界面就可以进行接口测试了,上传返回结果示例如下。1
http://127.0.0.1:9000/mybucket/a72a02c5-4dff-44d8-841b-ad5a3b4c5b71
直接浏览器输入地址就可以看到,或者在管理界面查看。
删除时,以文件路径作为参数输入即可,如a72a02c5-4dff-44d8-841b-ad5a3b4c5b71
。
上传大文件
如果有上传大文件的需求,在没有配置类的情况下,可以通过配置文件设置。
1 | spring: |
参考
[1] https://min.io/docs/minio/container/operations/install-deploy-manage/deploy-minio-single-node-single-drive.html
[2] https://www.iocoder.cn/Spring-Boot/MinIO/?yudao
[3] https://blog.csdn.net/BThinker/article/details/125412751
后记
首发于 silencezheng.top,转载请注明出处。