Appearance
MinIO 简介
MinIO 是一款基于 Go 语言的高性能对象存储服务,在 GitHub 上已有 28K+ Star。它采用了 Apache License v2.0 开源协议,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等。
MinIO 的安装
Windows 下的安装
- 下载 MinIO 在 Windows 下的安装包,下载地址:https://dl.min.io/server/minio/release/windows-amd64/minio.exe

- 如果上面的地址无法下载的话,可以使用备用地址:MinIO 下载和安装 | 用于创建高性能对象存储的代码和 MinIO 下载

- 下载完成后创建 MinIO 的数据存储目录,并使用如下启动命令启动 MinIO 服务:
bash
minio.exe server D:\developer\env\minio\data --console-address ":9001"- 此时 MinIO 的 API 将运行在 9000 端口,MinIO Console 管理页面将运行在 9001 端口。
Linux 下的安装
- 首先下载 MinIO 的 Docker 镜像:
bash
docker pull minio/minio- 下载完成后使用如下命令运行 MinIO 服务,注意使用
--console-address指定 MinIO Console 的运行端口(否则会随机端口运行):
bash
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 的使用
MinIO Console 是 MinIO 自带的可视化管理工具,下面我们来体验下这个工具。
- MinIO 服务运行成功后就可访问 MinIO Console 的管理界面了,输入账号密码
minioadmin:minioadmin即可登录,访问地址:http://localhost:9001

- 看下 MinIO Console 的左侧菜单,不仅支持了存储桶、文件的管理,还增加了用户、权限、监控等管理功能。
- 在存储文件之前,我们首先得创建一个存储桶,下方选项的用法直接参考右侧说明即可,非常方便。
- 创建成功后,再上传一个文件。
- 上传成功后如果你想从外部访问文件的话,我们需要对存储桶的访问策略进行设置。

- 设置存储桶的访问策略为自定义。

- 然后只给匿名用户分配获取文件的权限即可。

- 具体设置访问策略如下:
json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": [
"*"
]
},
"Action": [
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::blog/*.**"
]
}
]
}- 之后把地址改为外网访问地址即可访问图片,外网访问地址:http://localhost:9000/blog/avatar.png

兼容 AWS S3
当我们对接第三方服务要用到对象存储时,这些服务往往都是支持 AWS S3 的。比如说一个直播的回放功能,需要对象存储来存储回放的视频,由于 MinIO 兼容 AWS S3 的大多数 API,我们可以直接拿它当 AWS S3 来使用。
- 我们可以下载个 AWS S3 的客户端来试试,MinIO 到底能不能支持 S3 的 API,这里使用的是 S3 Browser,下载地址:Amazon S3 Client for Windows. User Interface for Amazon S3. S3 Bucket Explorer.

- 安装好 S3 Browser 之后,添加一个 Account,输入相关登录信息,注意选择 Account 类型为 S3 Compatible Storage。

- 连接成功后,我们可以看见之前我们创建的存储桶和上传的文件。

- S3 Browser 这个工具功能还是很强大的。

- 如果你想修改存储桶的访问权限的话直接通过 Permissions 标签修改即可,是不是比 MinIO Console 灵活多了。

命令行客户端的使用
其实对于对象存储来说,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 镜像:
bash
docker pull minio/mc- 在 Docker 容器中运行 mc:
bash
docker run -it --entrypoint=/bin/sh minio/mc- 运行完成后我们需要进行配置,将我们自己的 MinIO 服务配置到客户端上去,配置的格式如下:
bash
mc config host add <ALIAS> <YOUR-S3-ENDPOINT> <YOUR-ACCESS-KEY> <YOUR-SECRET-KEY>- 对于我们的 MinIO 服务可以这样配置:
bash
mc config host add minio [http://192.168.7.142:9090](http://192.168.7.142:9090) minioadmin minioadmin常用操作
- 查看存储桶和查看存储桶中存在的文件:
bash
# 查看存储桶
mc ls minio
# 查看存储桶中存在的文件
mc ls minio/blog- 创建一个名为 test 的存储桶:
bash
mc mb minio/test- 共享 avatar.png 文件的下载路径:
bash
mc share download minio/blog/avatar.png- 查找 blog 存储桶中的 png 文件:
bash
mc find minio/blog --name "*.png"- 设置 test 存储桶的访问权限为只读。
bash
# 目前可以设置这四种权限:none, download, upload, public
mc policy set download minio/test/
# 查看存储桶当前权限
mc policy list minio/test/小结
如果你想自建对象存储服务的话,MinIO 确实是首选。它能兼容 AWS S3 的 API,使用 MinIO 相当于是在使用 AWS S3,能兼容一些主流的第三方服务。