https://blog.csdn.net/qq_46921028/article/details/130279107?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522170226057116800192288274%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=170226057116800192288274&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-1-130279107-null-null.nonecase&utm_term=MinIo%E5%BF%AB%E9%80%9F%E5%85%A5%E9%97%A8&spm=1018.2226.3001.4450
一酒甸、MinIO概述
官網地址:http://www.minio.org.cn/
文檔地址:http://docs.minio.org.cn/docs/
MinIO是一款基于Apache License v2.0開源協(xié)議的分布式文件系統(tǒng)(或者叫對象存儲服務),可以做為云存儲的解決方案用來保存海量的圖片、視頻猜嘱、文檔等长搀。由于采用Golang實現(xiàn),服務端可以工作在Windows年枕、Linux播歼、 OS X和FreeBSD上。配置簡單苍柏,基本是復制可執(zhí)行程序尼斧,單行命令就可以運行起來。
MinIO兼容亞馬遜S3(Simple Storage Service试吁,簡單存儲服務)云存儲服務接口棺棵,非常適合于存儲大容量非結構化的數(shù)據,例如圖片熄捍、視頻烛恤、日志文件、備份數(shù)據和容器/虛擬機鏡像等余耽,而且每個對象文件可以是任意大小缚柏,從幾kb到最大5T不等。
MinIO特點:
1.高性能:作為高性能對象存儲碟贾,在標準硬件條件下它能達到55GB/s的讀币喧、35GB/s的寫速率;
2.可擴容:不同MinIO集群可以組成聯(lián)邦袱耽,并形成一個全局的命名空間杀餐,并跨越多個數(shù)據中心;
3.SDK支持: 基于Minio輕量的特點朱巨,它得到類似Java史翘、Python或Go等語言的sdk支持;
4.支持糾刪碼:MinIO使用糾刪碼冀续、Checksum來防止硬件錯誤和靜默數(shù)據污染琼讽。在最高冗余度配置下,即使丟失1/2的磁盤也能恢復數(shù)據洪唐;
MinIO基本概念:
bucket(桶) :類似文件系統(tǒng)的目錄(文件夾)钻蹬;
Object : 類似文件系統(tǒng)的文件;
Keys :類似文件名凭需;
MINIO_ACCESS_KEY:訪問key脉让,類似賬號;
MINIO_SECRET_KEY:秘鑰功炮,類似密碼溅潜。
文件存儲方式對比:
存儲方式? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?優(yōu)點? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?缺點
服務器磁盤? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?開發(fā)便捷,成本低? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?擴展困難
分布式文件系統(tǒng)(開源:FastDFS薪伏、MinIO)? ? ?容易實現(xiàn)擴展? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 復雜度高
第三方存儲(阿里云OSS滚澜、七牛云)? ?開發(fā)簡單,功能強大嫁怀,免維護? ? ? ? ? ? ? ? ? ? ? ? ? ? 收費
分布式文件系統(tǒng)對比:
FastDFS是阿里余慶做的個人項目设捐,也是一款開源高性能的分布式文件系統(tǒng)借浊,適合小規(guī)模文件數(shù)據存儲,默認不提供UI界面萝招,安裝部署(運維)復雜蚂斤,很難達到以G為單位的每秒讀寫速度,沒有完備的官方文檔槐沼,環(huán)境搭建較為復雜曙蒸;
MinIO是由MinIO.Inc運營的開源項目,號稱世界上速度最快的對象存儲服務器岗钩,并且社區(qū)活躍度高纽窟,標準硬件條件下它能達到55GB/s的讀、35GB/s的寫速率兼吓,而且MinIO部署自帶管理界面臂港,不需要額外安裝;MinIO提供了所有主流開發(fā)語言的SDK视搏,并且兼容亞馬遜S3云存儲服務接口审孽,在MinIO中一個對象文件可以是任意大小,從幾KB到最大的5T不等浑娜;最后它提供了與k8s佑力、etcd、docker等容器技術深度集成方案棚愤,可以說就是為云原生而生的搓萧。(缺點杂数,不支持動態(tài)增加節(jié)點)
更詳細文章參考:https://www.cnblogs.com/loveer/p/16857625.html
二宛畦、MinIO環(huán)境搭建
本文基于Docker實現(xiàn)MinIO環(huán)境快速部署,Docker安裝參考:https://blog.csdn.net/qq_46921028/article/details/129096134
1揍移、拉取鏡像(https://hub.docker.com/r/minio/minio/tags)
# 下載新版minio
docker pull minio/minio
# 或者下載指定版本的minio
docker pull minio/minio:RELEASE.2021-04-06T23-11-00Z
2次和、創(chuàng)建容器
docker run -p 9000:9000 --name minio -d --restart=always -e "MINIO_ACCESS_KEY=minio" -e "MINIO_SECRET_KEY=minio123" -v /docker/minio/data:/data -v /docker/minio/config:/root/.minio minio/minio server /data
# 或者指定鏡像版本并創(chuàng)建容器
docker run -p 9000:9000 --name minio -d --restart=always -e "MINIO_ACCESS_KEY=minio" -e "MINIO_SECRET_KEY=minio123" -v /docker/minio/data:/data -v /docker/minio/config:/root/.minio minio/minio:RELEASE.2021-04-06T23-11-00Z server /data
-p 9000:9000 ,端口映射
-e那伐,環(huán)境變量
-d踏施,后臺運行
–name,給容器起名字
–restart=always罕邀,開機自啟
-e “MINIO_ACCESS_KEY=minio”畅形,設置賬號
-e “MINIO_SECRET_KEY=minio123”,設置密碼
-v 掛載數(shù)據卷
3诉探、測試訪問MinIO后臺系統(tǒng)日熬,直接瀏覽器訪問 http://ip:9000 即可,賬號minio肾胯,密碼minio123
管理界面:
4竖席、創(chuàng)建 bucket(桶)
首先點擊右下角的"+"號耘纱,創(chuàng)建一個桶
給創(chuàng)建的桶起個名字:
最后在minio管理界面就能看到剛剛創(chuàng)建的桶結構:
三、快速入門
基于SpringBoot快速整合MinIO
1毕荐、創(chuàng)建springboot工程
2束析、導入相關依賴
<dependencies>
? ? <!--minio-->
? ? <dependency>
? ? ? ? <groupId>io.minio</groupId>
? ? ? ? <artifactId>minio</artifactId>
? ? ? ? <version>7.1.0</version>
? ? </dependency>
? ? <!--web-->
? ? <dependency>
? ? ? ? <groupId>org.springframework.boot</groupId>
? ? ? ? <artifactId>spring-boot-starter-web</artifactId>
? ? </dependency>
<!--test-->
? ? <dependency>
? ? ? ? <groupId>org.springframework.boot</groupId>
? ? ? ? <artifactId>spring-boot-starter-test</artifactId>
? ? </dependency>
? ? <!--knife4j(swagger) -->
? ? <dependency>
? ? ? ? <groupId>com.github.xiaoymin</groupId>
? ? ? ? <artifactId>knife4j-spring-boot-starter</artifactId>
? ? ? ? <version>3.0.2</version>
? ? </dependency>
? ? <!--lombok-->
? ? <dependency>
? ? ? ? <groupId>org.projectlombok</groupId>
? ? ? ? <artifactId>lombok</artifactId>
? ? </dependency>
</dependencies>
3、整合swagger
3.1憎亚、編寫Swagger配置類
package com.baidou.config;
import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
/**
* Swagger2配置類(生成接口文檔)
*
* @author 白豆五
* @version 2023/04/21
* @since JDK8
*/
@Configuration
@EnableSwagger2 //開啟swagger2注解支持
@EnableKnife4j? //開啟Knife4j注解支持
public class SwaggerConfig {
@Bean
? ? public Docket webApiConfig() { //生成接口文檔的清單
? ? ? ? // 文檔類型
? ? ? ? return new Docket(DocumentationType.SWAGGER_2)
? ? ? ? ? ? ? ? .groupName("webApi")
? ? ? ? ? ? ? ? .apiInfo(webApiInfo())
? ? ? ? ? ? ? ? .select()
? ? ? ? ? ? ? ? //指定controller包掃描路徑
? ? ? ? ? ? ? ? .apis(RequestHandlerSelectors.basePackage("com.baidou.controller"))
? ? ? ? ? ? ? ? .paths(PathSelectors.any())
? ? ? ? ? ? ? ? .build();
? ? }
//配置在線api文檔信息
? ? private ApiInfo webApiInfo() {
? ? ? ? return new ApiInfoBuilder()
? ? ? ? ? ? ? ? .title("網站-API文檔")
? ? ? ? ? ? ? ? .description("本文檔描述了xxx管理系統(tǒng)微服務接口定義")
? ? ? ? ? ? ? ? .version("1.0")
? ? ? ? ? ? ? ? .contact(new Contact("白豆五", "https://blog.csdn.net/qq_46921028", "13212341234@163.com"))
? ? ? ? ? ? ? ? .build();
? ? }
}
3.2员寇、設置靜態(tài)資源映射(對Swagger的靜態(tài)資源放行)
package com.baidou.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
// 對WebMvc進行一些配置,為swagger靜態(tài)資源進行放行
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
? ? // 靜態(tài)資源放行
? ? @Override
? ? public void addResourceHandlers(ResourceHandlerRegistry registry) {
? ? ? ? // 對swaggger靜態(tài)資源放行
? ? ? ? registry.addResourceHandler("/doc.html").addResourceLocations("classpath:/META-INF/resources/");
? ? ? ? registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
? ? }
}
4、編寫 MinIO屬性配置類
package com.baidou.dto;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.io.Serializable;
@Data
@Component
@ConfigurationProperties(prefix = "minio")? //自動注入屬性前綴為minio的配置
public class MinIOConfigProperties implements Serializable {
? ? private String accessKey; // 訪問key
? ? private String secretKey; // 秘鑰
? ? private String bucket;? ? // 桶
? ? private String endpoint;? // 地域節(jié)點
? ? private String readPath;? // 讀取路徑
}
5虽填、編寫MinIO配置類丁恭,注冊MinioClient客戶端的Bean對象
package com.baidou.config;
import io.minio.MinioClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* MinIO配置類
*
* @author 白豆五
* @version 2023/04/21
* @since JDK8
*/
@Configuration
public class MinIOConfig {
@Autowired
? ? private MinIOConfigProperties minIOConfigProperties;
? ? // 注冊MinIO實例
? ? @Bean
? ? public MinioClient buildMinioClient(){
? ? ? ? return MinioClient
? ? ? ? ? ? ? ? .builder()
? ? ? ? ? ? ? ? .credentials(minIOConfigProperties.getAccessKey(), minIOConfigProperties.getSecretKey())
? ? ? ? ? ? ? ? .endpoint(minIOConfigProperties.getEndpoint())
? ? ? ? ? ? ? ? .build();
? ? }
}
6、在application.yml文件中配置minio自定義屬性和文件上傳大小
minio:
? accessKey: minio
? secretKey: minio123
? bucket: testminio
? endpoint: http://192.168.200.128:9000
? readPath: http://192.168.200.128:9000
? servlet:
? ? multipart:
? ? ? # 單個上傳文件的最大值是200mb
? ? ? max-file-size: 200MB
? ? ? # 單次請求的最大值
? ? ? max-request-size: 200MB
7斋日、編寫操作minio相關業(yè)務接口
業(yè)務接口實現(xiàn)類:
8牲览、編寫統(tǒng)一結果處理類
9、編寫controller
10恶守、啟動項目第献,然后用postman測試