MinIO快速入門

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測試

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市兔港,隨后出現(xiàn)的幾起案子庸毫,更是在濱河造成了極大的恐慌,老刑警劉巖衫樊,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件飒赃,死亡現(xiàn)場離奇詭異,居然都是意外死亡科侈,警方通過查閱死者的電腦和手機载佳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來臀栈,“玉大人蔫慧,你說我怎么就攤上這事∪ㄊ恚” “怎么了姑躲?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長盟蚣。 經常有香客問我黍析,道長,這世上最難降的妖魔是什么屎开? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任阐枣,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘侮繁。我一直安慰自己虑粥,他們只是感情好,可當我...
    茶點故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布宪哩。 她就那樣靜靜地躺著娩贷,像睡著了一般。 火紅的嫁衣襯著肌膚如雪锁孟。 梳的紋絲不亂的頭發(fā)上彬祖,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天,我揣著相機與錄音品抽,去河邊找鬼储笑。 笑死,一個胖子當著我的面吹牛圆恤,可吹牛的內容都是我干的突倍。 我是一名探鬼主播,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼盆昙,長吁一口氣:“原來是場噩夢啊……” “哼羽历!你這毒婦竟也來了?” 一聲冷哼從身側響起淡喜,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤秕磷,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后炼团,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體澎嚣,經...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年瘟芝,在試婚紗的時候發(fā)現(xiàn)自己被綠了易桃。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡模狭,死狀恐怖颈抚,靈堂內的尸體忽然破棺而出踩衩,到底是詐尸還是另有隱情嚼鹉,我是刑警寧澤,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布驱富,位于F島的核電站锚赤,受9級特大地震影響,放射性物質發(fā)生泄漏褐鸥。R本人自食惡果不足惜线脚,卻給世界環(huán)境...
    茶點故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧浑侥,春花似錦姊舵、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至伶选,卻和暖如春史飞,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背仰税。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工构资, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人陨簇。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓吐绵,卻偏偏與公主長得像,于是被迫代替她去往敵國和親河绽。 傳聞我的和親對象是個殘疾皇子拦赠,可洞房花燭夜當晚...
    茶點故事閱讀 45,037評論 2 355

推薦閱讀更多精彩內容