在咱们平时做我的项目的时候,文件存储是个很常见的需要。这时候咱们就会用到对象存储服务,平时咱们可能会抉择 OSS、AWS S3 这类第三方服务。明天带大家搭建一款本人的对象存储服务,带可视化治理,用起来也挺简略!
SpringBoot 实战电商我的项目 mall(50k+star)地址:https://github.com/macrozheng/mall
MinIO 简介
MinIO 是一款基于 Go 语言的高性能对象存储服务,在 Github 上已有 28K+Star。它采纳了 Apache License v2.0 开源协定,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器 / 虚拟机镜像等。
装置
应用 Docker 装置 MinIO 服务非常简单,几个命令就能够搞定!
- 首先下载 MinIO 的 Docker 镜像;
docker pull minio/minio
- 下载实现后应用如下命令运行 MinIO 服务,留神应用
--console-address
指定 MinIO Console 的运行端口(否则会随机端口运行):
docker run -p 9090:9000 -p 9001:9001 --name minio \
-v /mydata/minio/data:/data \
-e MINIO_ROOT_USER=minioadmin \
-e MINIO_ROOT_PASSWORD=minioadmin \
-d minio/minio server /data --console-address ":9001"
- 运行胜利后就可拜访 MinIO Console 的治理界面了,输出账号密码
minioadmin:minioadmin
即可登录,拜访地址:http://192.168.7.142:9090
MinIO Console 应用
MinIO Console 是 MinIO 自带的可视化管理工具,比起上一代的可视化工具性能还是弱小了不少的,上面咱们来体验下这个工具。
- 先来看下上一代的 MinIO Browser,根本只反对存储桶及文件的治理性能;
- 再来看下 MinIO Console,不仅反对了存储桶、文件的治理,还减少了用户、权限、日志等治理性能,强了不少;
- 在存储文件之前,咱们首先得创立一个存储桶;
- 创立胜利后,再上传一个文件;
- 上传胜利后如果你想从内部拜访文件的话,须要把拜访策略设置为公开,这里的策略只有公开和公有两种,感觉不太灵便;
- 之后把地址改为外网拜访地址即可拜访图片,默认只能下载不能间接查看(这个问题咱们上面再解决),外网拜访地址:http://192.168.7.142:9090/blo…
客户端应用
其实对于对象存储来说,MinIO Console 的性能还是不够用的,所以官网还提供了基于命令行的客户端 MinIO Client(简称 mc),上面咱们来讲讲它的应用办法。
常用命令
咱们先来相熟下 mc 的命令,这些命令和 Linux 中的命令有很多相似之处。
命令 | 作用 |
---|---|
ls | 列出文件和文件夹 |
mb | 创立一个存储桶或一个文件夹 |
rb | 删除一个存储桶或一个文件夹 |
cat | 显示文件和对象内容 |
pipe | 将一个 STDIN 重定向到一个对象或者文件或者 STDOUT |
share | 生成用于共享的 URL |
cp | 拷贝文件和对象 |
mirror | 给存储桶和文件夹做镜像 |
find | 基于参数查找文件 |
diff | 对两个文件夹或者存储桶比拟差别 |
rm | 删除文件和对象 |
events | 治理对象告诉 |
watch | 监听文件和对象的事件 |
policy | 治理拜访策略 |
session | 为 cp 命令治理保留的会话 |
config | 治理 mc 配置文件 |
update | 查看软件更新 |
version | 输入版本信息 |
装置及配置
因为 MinIO 服务端中并没有自带客户端,所以咱们须要装置并配置完客户端后能力应用,这里以 Docker 环境下的装置为例。
- 下载 MinIO Client 的 Docker 镜像;
docker pull minio/mc
- 在 Docker 容器中运行 mc;
docker run -it --entrypoint=/bin/sh minio/mc
- 运行实现后咱们须要进行配置,将咱们本人的 MinIO 服务配置到客户端下来,配置的格局如下;
mc config host add <ALIAS> <YOUR-S3-ENDPOINT> <YOUR-ACCESS-KEY> <YOUR-SECRET-KEY>
- 对于咱们的 MinIO 服务能够这样配置。
mc config host add minio http://192.168.7.142:9090 minioadmin minioadmin
罕用操作
- 查看存储桶和查看存储桶中存在的文件;
# 查看存储桶
mc ls minio
# 查看存储桶中存在的文件
mc ls minio/blog
- 创立一个名为
test
的存储桶;
mc mb minio/test
- 共享
avatar.png
文件的下载门路;
mc share download minio/blog/avatar.png
- 查找
blog
存储桶中的 png 文件;
mc find minio/blog --name "*.png"
- 设置
test
存储桶的拜访权限为只读
。
# 目前能够设置这四种权限:none, download, upload, public
mc policy set download minio/test/
# 查看存储桶以后权限
mc policy list minio/test/
兼容 AWS S3
当咱们对接第三方服务要用到对象存储时,这些服务往往都是反对 AWS S3 的。比如说一个直播的回放性能,须要对象存储来存储回放的视频,因为 MinIO 兼容 AWS S3 的大多数 API,咱们能够间接拿它当 AWS S3 来应用。
- 咱们能够下载个 AWS S3 的客户端来试试,MinIO 到底能不能反对 S3 的 API,这里应用的是
S3 Browser
,下载地址:https://s3browser.com/
- 装置好
S3 Browser
之后,增加一个 Account,输出相干登录信息,留神抉择 Account 类型为S3 Compatible Storage
;
- 连贯胜利后,咱们能够看见之前咱们创立的存储桶和上传的文件;
S3 Browser
这个工具性能还是很弱小的,MinIO Console 和它比起来切实太弱了;
- 下面有提到一个问题,图片文件无奈间接查看,其实是因为拜访图片文件时,MinIO 返回的 Content-Type 为
application/octet-stream
导致的;
- 接下来咱们能够通过
S3 Browser
来批改默认返回的响应头;
- 而后将
.png
结尾的文件的响应头改为image/png
就能够了;
- 须要留神的是之前上传的文件须要从新上传下才能够失效,此时拜访链接就能够间接查看图片了;
- 如果你想批改存储桶的拜访权限的话间接通过
Permissions
标签批改即可,是不是比 MinIO Console 灵便多了。
总结
如果你想自建对象存储服务的话,MinIO 的确是首选。它能兼容 AWS S3 的 API,应用 MinIO 相当于是在应用 AWS S3,能兼容一些支流的第三方服务。不过它自带的客户端 MinIO Console 的确有点鸡肋,还好反对了 AWS S3,能够应用一些功能强大的 S3 客户端工具。
参考资料
官网文档:https://docs.min.io/
本文 GitHub https://github.com/macrozheng/mall-learning 曾经收录,欢送大家 Star!