MINIO介绍
MinIO 是在 Apache License v2.0 下发布的高性能对象存储,100% 开放源代码。 它是与 Amazon S3 云存储服务兼容的 API。MinIO 是一个高性能的对象存储原生支持 Kubernetes 部署的解决方案。Minio 是一个非常轻量的服务,它可以存储⼤容量的⾮结构化数据,例如图⽚、视频、⽇志⽂件、备份数据和容器/虚拟机镜像等。对于⼤多数的企业来说,这可以说是最为理想的存储媒介了。而一个对象文件可以是任意大小,从几 kb 到最大 5T 不等。
前言
需要用到的东西
1.docker环境
2.服务器
3.域名以及域名证书
步骤
1.安装docker
2.使用docker安装MINIO
3.访问MINIO控制台登陆并上传文件测试
4.使用代码进行文件上传
5.域名以及域名SSL证书的准备
6.配置公钥私钥开启https
一、安装docker
服务器安装宝塔面板,成功之后会返回访问地址以及账号密码,如果不小心关掉了可以在服务器上通过shell连接工具连接 成功后输入 bt 操作面板
进入宝塔页面之后点击左侧docker直接安装docker
二、使用docker安装MINIO
下载MINIO镜像
docker pull minio/minio
查看镜像
docker images
docker run --name minio -p 9090:9000 -p 9999:9999 -d \
--restart=always -e \
"MINIO_ROOT_USER=admin" \
-e "MINIO_ROOT_PASSWORD=123456" \
-v /home/minio/data:/data \
-v /home/minio/config:/root/.minio minio/minio server /data --console-address '0.0.0.0:9999'
命令 | 描述 |
-d | 后台运行容器,并返回容器ID |
-p 9090:9000 | 将容器内9090端口映射至宿主机9000端口,这个是访问的端口 |
-p 9999:9999 | 将容器内9999端口映射至宿主机9999端口 |
--restart=always | 开启自动重启 |
-e \ "MINIO_ROOT_USER=admin" | 设置用户名为”admin“ |
-e \ "MINIO_ROOT_PASSWORD=123456" | 设置密码为“123456” |
-v /home/minio/data:/data | 安装目录 |
三、访问MINIO控制台登陆并上传文件测试
执行完成命令之后访问minio管理界面 ,服务器ip:9090
用户名密码输入刚才命令中设置的用户名和密码
点此处创建一个存储桶
创建完成之后即可在存储桶中上传文件
上传成功之后点击上传的文件可以进行各种操作,可以直接查看
四、使用代码进行文件上传
第一步:导入minio的依赖 ,参考文档 Minio官方文档
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>7.1.0</version>
</dependency>
第二步:编写上传代码
public class MinioUpload {
private static final String accessKey = "admin";//账号
private static final String secretKey = "123456";//密码
private static final String bucket = "test";//存储桶名称
public static String imageUpload(MultipartFile file){
String filePath = "";
try {
// 构建一个Minio客户端
MinioClient minioClient = MinioClient.builder()
//创建容器时指定的账号
.credentials(accessKey, secretKey)
//上传地址
.endpoint("http://服务器ip:9090").build();
// 对象键(Key)是对象在存储桶中的唯一标识。
String key = "";
//文件名
key = file.getOriginalFilename();
//构建上传内容
PutObjectArgs putObjectArgs = PutObjectArgs.builder()
.object(key) //文件名
.contentType(file.getContentType()) //文件类型
.bucket(bucket) //存储桶名称
.stream(file.getInputStream(), file.getSize(), -1).build(); //文件流,以及大小,-1代表不分片
//执行上传
minioClient.putObject(putObjectArgs);
//上传之后的文件地址是:
filePath = "http://服务器ip:9090/"+ bucket + "/" + key;
log.info("上传成功:{}",filePath);
} catch(MinioException | IOException | NoSuchAlgorithmException | InvalidKeyException e) {
log.error(String.valueOf(e));
}
return filePath;
}
}
第三步:执行代码测试
接下来在浏览器访问测试,http://服务器ip:9090/存储桶名称/文件名
这个意思是说匿名(游客没登录)用户没有访问权限,如果我们需要我们上传的文件可以被匿名用户访问,那么需要添加访问权限:找到文件存储目录,点击manager设置access Rules添加访问规则
保存规则设置之后再次访问
五、域名以及域名SSL证书的准备
上述方式只支持http方式访问,在项目上线的时候,大多数情况都是需要通过https访问的,提高安全性,这时候就需要准备域名和域名证书。
以腾讯云为例,购买好自己喜欢的域名之后还需要通过ICP备案才可以正常使用
六、配置公钥私钥开启https
下载完成之后进行解压,然后会看到这么几个文件,我们需要用到".key"后缀文件和".crt"后缀文件
".key"后缀文件重命名为"private.key",".crt"后缀文件重命名为"public.crt",因为MINIO只识别这个名称的文件
然后把文件上传到服务器中MINIO对应的配置文件处,可以直接通过宝塔面板可视化操作
上传完成后重启MINIO
接着进入MINIO控制台,通过https访问,选择任意一个文件点击分享可以看到前缀也变成https了
接着在浏览器通过https访问文件测试