Minio服务搭建与应用
1,docker 创建服务
docker run -d \
--name minio \
-p 9000:9000 \
-p 9001:9001 \
-v /data/minio:/bitnami/minio/data \
-v /data/minio/config:/root/.minio \
-v /etc/timezone:/etc/timezone:ro \
-v /etc/localtime:/etc/localtime:ro \
--env MINIO_ROOT_USER="admin" \
--env MINIO_ROOT_PASSWORD="admin123" \
bitnami/minio:latest
这里需要设置挂在目录权限,否者会:Permission denied
chmod -R 777 /data/minio
2,登录到Minio
地址为:http://localhost:9001,账号密码为在docker 运行时设置的 admin admin123
3,创建Bucket
点击”Create a Bucket.“创建一个 bucket
访问bucket需要发起websocket请求,如果使用nginx代理,nginx需要加上websocket代理:
# 开启websocket
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
4,设置匿名访问
设置所有文件均可匿名访问
5,创建 Access Key
access key 用于程序中 api访问 文件资源
6,java引入
(1) 引入 maven 仓依赖包
<!-- https://mvnrepository.com/artifact/io.minio/minio -->
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>8.5.6</version>
</dependency>
(2) 初始化客户端对象
MinioClient minioClient = MinioClient.builder()
.endpoint("http://192.168.10.126:9000")
.credentials("VLK7P6IDlgdN1ThcEzm3", "DhxI8IgP0ZLYYlZk9p5gJ6O2mU2iW5WbyqTQdXNl")
.build();
(3) MultipartFile文件对象上传
// 构造一个上传文件的路径
// MultipartFile file 文件流对象
String fileName = path + LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd"))
+ "/" + UUID.randomUUID()
+ Objects.requireNonNull(file.getOriginalFilename()).substring(file.getOriginalFilename().lastIndexOf("."));
//构造上传文件对象
PutObjectArgs objectArgs = PutObjectArgs.builder().bucket("test").object(fileName)
.stream(file.getInputStream(), file.getSize(), -1).contentType(file.getContentType()).build();
//文件名称相同会覆盖
//response 可以监听返回之
ObjectWriteResponse response = minioClient.putObject(objectArgs);
(4) uploadObject本地文件上传
minioClient.uploadObject(
UploadObjectArgs.builder()
.bucket("my-bucketname")
.object("start.sh")
.filename("D:\\deploy\\service\\general-task\\start.sh")
.build());
(5) 删除文件
// 填写Bucket名称和Object完整路径。Object完整路径中不能包含Bucket名称。
// url = http://192.168.10.126:9000/test/upload/20231016/7f7a3b05-25bf-432d-abfe-284cf75c8d1c.png
// String bucket = "test";
String filename = URI.create(url).getPath();
filename = filename.replace("/" + bucket, ""); // 移除掉路径中的 bucket
minioClient.removeObject(
RemoveObjectArgs.builder().bucket(bucket).object(filename).build());
System.out.println("删除文件:" + url);
(6) 客户端jq测试
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<script src="https://cdn.bootcss.com/jquery/1.10.2/jquery.min.js"></script>
<title></title>
</head>
<body>
<form id="uploadForm" enctype="multipart/form-data">
文件:<input id="file" type="file" name="file"/>
</form>
<button id="upload">上传文件</button>
<input type="text" id="del-filename">
<button id="delete">删除文件</button>
</body>
<script type="text/javascript">
$(function () {
$("#upload").click(function () {
var formData = new FormData($('#uploadForm')[0]);
$.ajax({
type: 'post',
url: "/minio/upload", //上传文件的请求路径必须是绝对路劲
data: formData,
cache: false,
processData: false,
contentType: false,
}).success(function (data) {
debugger
alert(data);
}).error(function () {
alert("上传失败");
});
});
$("#delete").click(function () {
var filename = $('#del-filename').val();
$.ajax({
type: 'delete',
url: "/minio/remove?url=" + filename, //上传文件的请求路径必须是绝对路劲
}).success(function (data) {
alert(data);
}).error(function () {
alert("上传失败");
});
});
});
</script>
</html>
7,使用Rclone迁移数据到MinIO
Rclone 是一个命令行程序,用于管理云存储上的文件。它是云供应商的网络存储接口的一个功能丰富的替代品。超过 40 种云存储产品支持 rclone,包括 S3 对象存储、企业和消费者文件存储服务以及标准传输协议。Rclone 下载
1)配置
vim /root/.config/rclone/rclone.conf
[minio] # 自定义的名称
type = s3 # 存储类型,参考官方文档所有支持的类型
provider = Minio # 提供商,参考官方文档或者全部
env_auth = false # 不通过环境变量配置认证
access_key_id = AKxxxxxxxx # MinIO生成的acess key!注意: 不是登录控制台的用户名和密码!!!!
secret_access_key = Secretxxxxxxx # MinIO生成的access key对应的 secret key!注意: 不是登录控制台的用户名和密码!!!!
endpoint = http://127.0.0.1:9000 # MinIO API地址!能访问内网的情况下建议使用内网!效率高!注意:不是控制台地址!!!
windows 放在 Rclone.exe所在目录即可
2)测试 列出MinIO中所有的“桶”,(bucket信息)
rclone lsd minio:
3)迁移
rclone sync /root/data minio:file
4)常用命令
- rclone config : 配置会话;
- rclone copy : 将文件从原文件夹复制至目标文件夹,跳过已复制的文件;
- rclone sync : 将文件从原文件夹同步至目标文件夹,只修改目的地;
- rclone move : 将文件从原文件夹移动至目标文件夹;
- rclone delete : 删除路径中的内容;
- rclone purge : 清空指定路径下的所有文件数据;
- rclone mkdir : 创建一个新目录;
- rclone rmdir : 删除一个空目录;
- rclone rmdirs : 删除路径下的所有空目录;
- rclone check : 检查源和目标的数据是否匹配;
- rclone ls : 列出指定路径下所有的文件包含文件的大小及路径;
- rclone lsd : 列出路径中的所有目录containers和buckets;
- rclone lsl : 列出具有大小、修改时间和路径中的所有对象;
- rclone md5sum : 为路径中的所有对象生成一个md5sum文件;
- rclone sha1sum : 为路径中的所有对象生成一个sha1sum文件;
- rclone size : 返回远程路径中对象的总大小和数量;
- rclone version : 显示版本号;
- rclone cleanup : 如果可能的话,清理remote;
- rclone dedupe : 交互式查找重复文件并删除重命名它们;
- rclone authorize : 远程认证;
- rclone cat : 连接文件并将它们发送到stdout;
- rclone copyto : 将文件从源复制到目标,跳过已复制的文件;
- rclone genautocomplete : rclone输出完成脚本;
- rclone gendocs : rclone将markdown文档输出到所提供的目录;
- rclone listremotes : 列出所有远程的配置文件;
- rclone mount : 将远程目标挂载至本地;
- rclone moveto : 将文件或目录从源移动至目标;
- rclone obscure : 在rclone.conf文件中使用模糊密码;
- rclone cryptcheck : 检验远程认证;
- rclone about : 获取配额信息;
8,MinIO客户端mc使用
1)docker 安装 mc
docker run -it -v /data/minio:/data --entrypoint=/bin/sh minio/mc
2)登录到 mc 容器
docker exec -it 1eb0ec9171f5 bash
3)添加/删除 名为 minio 的 HOST 配置
# 添加
mc config host add minio http://192.168.31.22:9000 admin admin123 --api s3v4
Added `minio` successfully.
# 删除
mc config host remove minio
Removed `minio` successfully.
mc config host add oss <阿里云OSS地址> <Access Key> <Secret Key>
4)查看 mc config
mc config host list
5)列出服务器存储桶列表
mc ls minio # minio 为上面的连接名
6)存储桶同步
# 本地到云存储的镜像同步:将本地文件夹 /path/to/local/folder 中的内容同步到 MinIO 存储桶 mybucket 中。
mc mirror /path/to/local/folder myminio/mybucket/
# 云存储到本地的镜像同步:将 MinIO 存储桶 mybucket 中的内容同步到本地文件夹 /path/to/local/folder 中。
mc mirror myminio/mybucket/ /path/to/local/folder
# 云存储到云存储的镜像同步:将一个 MinIO 存储桶中的内容同步到另一个 MinIO 存储桶中。
mc mirror myminio/source-bucket/ myminio/target-bucket/
7)常用的mc命令以及它们的用法
- 列出存储桶列表:mc ls [选项] [HOST/ALIAS]
示例:mc ls myminio - 列出桶中的对象列表:mc ls [选项] [HOST/ALIAS]/BUCKET
示例:mc ls myminio/mybucket - 创建存储桶:mc mb [选项] [HOST/ALIAS]/BUCKET
示例:mc mb myminio/mynewbucket - 删除存储桶:mc rb [选项] [HOST/ALIAS]/BUCKET
示例:mc rb myminio/myoldbucket - 上传文件或文件夹:mc cp [选项] SOURCE [HOST/ALIAS]/DEST
示例:mc cp myfile.txt myminio/mybucket - 下载文件或文件夹:mc cp [选项] [HOST/ALIAS]/SOURCE DEST
示例:mc cp myminio/mybucket/myfile.txt myfile.txt - 删除文件或文件夹:mc rm [选项] [HOST/ALIAS]/OBJECT [HOST/ALIAS]/OBJECT...
示例:mc rm myminio/mybucket/myfile.txt - 递归删除文件夹下所有文件
mc rm -r --force prostorage/publish/openapi/v1.2.1 - 同步本地文件夹到存储桶:mc mirror [选项] SOURCE [HOST/ALIAS]/DEST
示例:mc mirror localfolder/ myminio/mybucket/ - 显示文件内容:mc cat [选项] [HOST/ALIAS]/OBJECT
示例:mc cat myminio/mybucket/myfile.txt - 搜索存储桶:mc find [选项] [HOST/ALIAS]/BUCKET [PREFIX]
示例:mc find myminio/mybucket/ myfile.txt