Minio安装与集成
1 Minio介绍
MinIO是一个高性能、开源的对象存储服务,专为云原生和容器化环境设计。它是Amazon S3协议的兼容实现,意味着它可以无缝集成到现有的S3生态系统中,为用户提供了一个强大且灵活的存储解决方案,官网链接如下:MinIO | S3 & Kubernetes Native Object Storage for AI。简而言之,使用Minio可以能方便对系统文件进行管理。下面来介绍如何安装Minio。
2 docker下安装Minio
官网介绍了5种安装方式,本文使用docker来安装Minio,如何安装docker网上文章比比皆是,本文不再赘述。
2.1 安装
直接运行
# 下载最新的minio镜像
docker pull minio/minio
# 创建挂载目录
mkdir -p ~/minio/data
# 运行minio镜像
docker run -d \ # 设置后台运行
-p 9000:9000 -p 9090:9090 \ # 暴露9000端口用于访问api,暴露9090端口用于访问控制台
--name minio \ # 设置容器名称
--restart=always \ # 设置开启自启
-e "MINIO_ACCESS_KEY=minio" \ # 设置账户
-e "MINIO_SECRET_KEY=minio" \ # 设置密码,线上环境注意更改
-v ~/minio/data:/data \ # 挂载数据
minio/minio server \
/data --console-address ":9090" -address ":9000"
使用docker compose编排
minio:
image: minio/minio
container_name: minio
restart: always
environment:
- MINIO_ACCESS_KEY=minio
- MINIO_SECRET_KEY=minio
volumes:
- ~/minio/data:/data
ports:
- "9000:9000"
- "9090:9090"
command: server /data --console-address ":9090" --address ":9000"
networks: # 指定网络
- test-net
2.2 测试
访问http://192.168.52.128:9090/login
页面,使用设定的账户密码登录来测试是否部署成功(url注意修改为自己的),看见以下页面代表成功(页面可能会变化)。

3 简单使用控制台
使用前需要介绍下Minio一些基础的概念。
- Bucket(桶):简单理解为文件夹,存储Object对象
- Object(对象):简单理解为文件
3.1 创建Bucket

bucket名称随意,其他默认即可,点击创建

创建后控制台页面就会显示刚刚创建的bucket,如下所示

3.2 上传文件
点击
Object Browser
,再点击刚刚创建的bucket

点击上传文件

3.3 bucket权限
bucket权限有三种
private
:私有,只有bucket的创建者有权限对其进行操作public
:公开,所有人不需要验证就能对其进行操作,不推荐custom
:自定义,使用json格式,参考访问管理
设置为public
后,所有人都可以访问该桶的资源,包括桶内的文件内容和文件目录。
设置private
后,所有人都无法直接访问该桶的资源,如果外部需要访问,只能通过外链(最长有效期7天)。
以下列资源为例,设置public
后通过该url访问资源:http://192.168.52.128:9000/test/750446.png
那么,是否可以既不暴露桶中所有资源,又能永久访问(不通过外链形式)呢?答案是可以的,需要使用custom
自定义。
{
"Version": "2012-10-17",
"Statement": [
{
"Action": "s3:GetObject",
"Effect": "Allow",
"Principal": "*",
"Resource": "arn:aws:s3:::test/*" // 注意test为当前bucket的名称
}
]
}

4 SpringBoot集成Minio
4.1 添加依赖
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>8.5.10</version>
</dependency>
4.2 将MinioClient交给容器管理
package com.example.config;
import io.minio.MinioClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class AppConfig {
@Bean
public MinioClient minioClient() {
return MinioClient.builder()
// 设置服务运行的地址
.endpoint("http://192.168.52.128:9000")
// 设置账号名和密码
.credentials(账号, 密码)
.build();
}
}
4.3 测试
@SpringBootTest
class ApplicationTests {
@Autowired
private MinioClient minioClient;
@Test
void contextLoads() throws Exception {
//判断test桶是否存在
boolean b = minioClient.bucketExists(BucketExistsArgs.builder()
.bucket("test")
.build());
System.out.println(b);
}
}
5 MinioClient
MinioClient能操作bucket和object,不存在线程安全问题
api参考以下
转载自:https://juejin.cn/post/7374055681890369571