MinIO是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口,非常适合存储大容量非结构化的数据,如图片、视频、日志文件、备份数据、容器/虚机镜像等,而且MinIO非常轻量,只有一个单独的二进制文件。它的设计目标是实现轻量、快速和最佳的云存储体验。接下来,我们将详细介绍MinIO的特性,并演示如何使用Docker进行部署,还会给出如何在Spring Boot项目中集成它。
文章目录
MinIO的特性概述 高性能 S3兼容 数据保护 身份管理 Docker部署MinIO Spring Boot集成MinIO 测试类MinIO的特性概述
高性能
MinIO是高性能对象存储服务器,适合大规模数据存储。它的数据管理非常简单而且快速,可以存储在本地(例如,硬盘)或网络(例如,S3兼容的存储服务)上。
S3兼容
MinIO提供了S3兼容的API,允许我们使用现有的S3库(如boto和s3cmd)与它进行交互。
数据保护
MinIO使用Erasure Code和Bitrot Protection技术来保护数据。Erasure Code技术可以抗硬盘故障,而Bitrot Protection则能够保护和修复损坏的数据。
身份管理
MinIO支持用户和组的身份管理,以配合企业的安全策略。
现在我们已经对MinIO有了基本了解,接下来我们来看如何进行单机部署。
Docker部署MinIO
docker run -p 9000:9000 -p 9090:9090 --name minio1 \
-e "MINIO_ROOT_USER=root" \
-e "MINIO_ROOT_PASSWORD=rootpwd1234" \
-v ./file:/data \
minio/minio server /data --console-address ":9090"
在这段代码中,我们让Docker拉取了最新版的MinIO镜像,并创建名为minio1
的容器。我们在9000端口启动了MinIO服务器,并映射到宿主机的同一端口。然后我们通过MINIO_ROOT_USER
和MINIO_ROOT_PASSWORD
环境变量设置了MinIO的用户名和密码。最后,我们将服务器的数据文件挂在到了宿主机的/mnt/data
目录。
启动之后,你可以通过浏览器访问 http://localhost:9000,然后用之前设置的用户和密码登录。
接下来我们看看如何在Spring Boot项目中集成MinIO。
Spring Boot集成MinIO
在Spring Boot项目中,我们可以使用MinioClient
与MinIO服务器进行交互。首先,我们需要在pom.xml
文件中引入minio
的maven依赖:
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>8.0.3</version>
</dependency>
然后,我们在Spring Boot的配置文件中加入MinIO服务器的信息:
minio:
endpoint: http://localhost:9000
rootUser: UXGsBs0f6KOq3wQwrwa0
rootPassword: xx
注意打开miniio控制台页面,申请访问key,替换上面的rootUser, rootPassword
接着,我们创建一个配置类,将MinioClient
配置为一个Bean:
@Configuration
public class MinioConfig {
@Value("${minio.endpoint}")
private String endpoint;
@Value("${minio.rootUser}")
private String rootUser;
@Value("${minio.rootPassword}")
private String rootPassword;
@Bean
public MinioClient minioClient() {
return MinioClient.builder()
.endpoint(endpoint)
.credentials(rootUser, rootPassword)
.build();
}
}
现在,我们可以在Spring Boot项目中自动装配MinioClient
,并使用它与MinIO服务器进行交互了。
@Service
public class StorageService {
private final MinioClient minioClient;
public StorageService(MinioClient minioClient) {
this.minioClient = minioClient;
}
public boolean isObjectExist(String bucketName, String objectName) throws Exception {
return minioClient.statObject(StatObjectArgs.builder().bucket(bucketName).object(objectName).build());
}
}
测试类
上传一个文件,检查文件是否存在
package com.example.easyminiio;
import jakarta.annotation.Resource;
import lombok.SneakyThrows;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class EasyMiniIoApplicationTests {
@Resource
StorageService storageService;
@Test
void contextLoads() {
}
@Test
@SneakyThrows
public void test() {
storageService.isObjectExist("mall", "Snipaste_2024-05-15_22-31-25.png");
}
}
运行结果:
希望以上介绍和案例可以帮助你更好地理解和使用MinIO。 MinIO作为一个强大而易用的对象存储服务,将会在云计算领域发挥更大的作用。