当前位置:AIGC资讯 > AIGC > 正文

[AIGC ]详解MinIO:特性,Docker部署和Spring Boot集成

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_USERMINIO_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作为一个强大而易用的对象存储服务,将会在云计算领域发挥更大的作用。

更新时间 2024-05-25