MinIo
eMinIo 介绍
MinIO 是一种高性能、S3 兼容的对象存储。 它专为大规模 AI/ML、数据湖和数据库工作负载而构建,并且它是由软件定义的存储,不需要购买任何专有硬件,就可以在云上和普通硬件上拥有分布式对象存储。 MinIO拥有开源 GNU AGPL v3 和商业企业许可证的双重许可。
下面是MinIO中的几个核心概念,这些概念在所有的对象存储服务中也都是通用的。
对象(Object)
对象是实际的数据单元,例如我们上传的一个图片。
存储桶(Bucket)
存储桶是用于组织对象的命名空间,类似于文件夹。每个存储桶可以包含多个对象。
端点(Endpoint)
端点是MinIO服务器的网络地址,用于访问存储桶和对象,例如
http://192.168.10.101:9000
注意:
9000
为MinIO的API的默认端口,前边配置的9001
以为管理页面端口。Access Key 和 Secret Key
Access Key是用于标识和验证访问者身份的唯一标识符,相当于用户名。
Secret Key是与Access Key关联的密码,用于验证访问者的身份。
使用Docker 部署MinIo
*-
说明
系统基于centos7
解决国内无法拉取镜像
1 | docker pull docker.211678.top/minio/minio |
使用docker拉取minIo镜像
1
docker pull minio/minio
启动MinIO
说明: /opt/module/minio/data 为宿主机数据存储目录
1
2
3
4
5
6
7
8
9
10docker run -p 9000:9000 -p 9001:9001 \
--name minio -d \
--restart=always \
-e "MINIO_ROOT_USER=minio" \
-e "MINIO_ROOT_PASSWORD=123456" \
-v /opt/module/minio/data:/data \
-v /opt/module/minio/config:/root/.minio minio/minio server /data \
--console-address ":9000" --address ":9001"
docker run -p 9000:9000 -p 9001:9001 --name minio -d --restart=always -e "MINIO_ACCESS_KEY=minio" -e "MINIO_SECRET_KEY=123456.." -v /opt/module/minio/data:/data -v /opt/module/minio/config:/root/.minio minio/minio server /data --console-address ":9000" --address ":9001"查看启动容器, 并查看日志, 检查是否正常启动
1
2
3
4
5
6
7
8查看启动容器
docker ps
查看日志
docker logs minio
查看minio版本
docker exec -it minio minio --version
HTTPS配置
使用FRP配置minio HTTPS
1 | [minio-https] |
MinIO 配置
使用浏览器访问 MinIO 用户名:
minio
password:123456..
若不能访问MinIO Web服务, 检查是否放行云服务器 9000 90001端口
进入minio的控制台,并点击左侧菜单的Buckets
点击createBucket, 创建桶, 进行下述操作
更改访问权限为 public
设置Access Keys

使用FRP 反向代理实现MinIo的 HTTPS
配置前准备:
- 一台具有公网IP 的服务器
- 内网设备
- SSL 证书
原理
当访问页面的时候,通过Nginx监听80端口(http)和443端口(https),所有http请求将重定向https请求。接着Nginx将请求转发给frp的http虚拟端口,然后最后将请求发给frp客户端。
Seriver 配置
nginx
1 | events { |
运行时开放端口
1 | docker run --name nginx --restart=always \ |
frps配置
1 | [common] |
Client配置
frpc配置
1 | [minio-http] |
PicGo配置MinIO
在PicGo中下载MinIO插件
配置如下:
配置说明:
上传图片测试
Java 整合 MInIO
创建一个Maven项目
引入如下依赖
1
2
3
4
5<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>8.5.3</version>
</dependency>编写如下内容
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66public class TestMInIO {
public void testCreateBucket() throws Exception{
String endPoint = "http://192.168.126.130:9000";
String accessKey = "minioadmin";
String secretKey = "minioadmin";
//1.创建minio的链接对象
MinioClient minioClient = MinioClient.builder()
.endpoint(endPoint)
.credentials(accessKey,secretKey)
.build();
//System.out.println("minIO对象创建成功");
//2.创建bucket桶 hello-minio
String bucketName = "hello-minio";
//3校验bucket是否存在
BucketExistsArgs bucketExistsArgs = BucketExistsArgs.builder().bucket(bucketName).build();
boolean flag = minioClient.bucketExists(bucketExistsArgs);
if(!flag){
//创建bucket
MakeBucketArgs makeBucketArgs = MakeBucketArgs.builder().bucket(bucketName).build();
minioClient.makeBucket(makeBucketArgs);
System.out.println("创建成功");
// %s 字符串 %d 整数
String config =
"""
{
"Statement" : [ {
"Action" : "s3:GetObject",
"Effect" : "Allow",
"Principal" : "*",
"Resource" : "arn:aws:s3:::%s/*"
} ],
"Version" : "2012-10-17"
}
""".formatted(bucketName);
SetBucketPolicyArgs policyArgs = SetBucketPolicyArgs.builder().bucket(bucketName).config(config).build();
minioClient.setBucketPolicy(policyArgs);
System.out.println("策略定义成功");
//4.上传文件
String resource = "F:\\students\\231113\\adminSpace\\springboot_1\\src\\main\\resources\\static\\image\\web.jpg";
UploadObjectArgs uploadObjectArgs = UploadObjectArgs.builder()
.bucket(bucketName)
.object("流程图.jpg")
.filename(resource).build();
minioClient.uploadObject(uploadObjectArgs);
System.out.println("文件上传成功");
}else{
//删除minIO中的文件
RemoveObjectArgs removeObjectArgs = RemoveObjectArgs.builder().bucket(bucketName).object("流程图.jpg").build();
minioClient.removeObject(removeObjectArgs);
System.out.println("删除图片成功!!!");
//删除minIO中的bucket
RemoveBucketArgs removeBucketArgs = RemoveBucketArgs.builder().bucket(bucketName).build();
minioClient.removeBucket(removeBucketArgs);
System.out.println("bucket已存在-删除bucket");
}
}
}运行测试
运行上述代码,然后查看MinIO管理页面,观察是否上传成功。
关于文本字符串中的转义字符