Minio
概览
Minio是一个基于Golang开发的高性能分布式对象存储应用,它兼容amazon的S3云存储服务接口,非常适合存储大容量的非结构化的数据,例如图片、视频、日志文件、备份数据以及镜像等,单个文件的大小从几KB到5TB不等。
Minio是一个轻量级的应用,提供了多种SDK与各语言平台对接。
下载
Minio提供了多种环境的安装包,如windows,mac,docker以及linux,相关说明请看Minio online doc ,这里主要说一下在linux下的安装和部署。
Minio Server
Minio server的下载地址
1
| wget https://dl.minio.io/server/minio/release/linux-amd64/minio
|
下载到本地是一个文件名为minio的可执行文件
添加执行权限
Minio Client
Minio Client的下载地址
1
| https://dl.minio.io/client/mc/release/linux-amd64/mc
|
下载到本地是一个文件名为mc的可执行文件
添加执行权限
安装部署
Minio Server 启动
首先要给Minio server指定一个存储空间,用来定义bucket以及在bucket内存放的数据。
启动Minio Server,可以通过address参数来指定启动端口,最后需要设置minio对应的存储路径。
1
| minio server --address 192.168.1.1:9090 /home/user/mnt/data
|
启动后会有如下的信息提示
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| Endpoint: http://192.168.1.104:9000 http://172.17.0.1:9000 http://127.0.0.1:9000 AccessKey: B19YB85EGNOFN1XFGD6R SecretKey: Ny+Gckaai+fzj15TKeeOIXY9ySM13XeP4DFh37p8
Browser Access: http://192.168.1.104:9000 http://172.17.0.1:9000 http://127.0.0.1:9000
Command-line Access: https://docs.minio.io/docs/minio-client-quickstart-guide $ mc config host add myminio http://192.168.1.104:9000 B19YB85EGNOFN1XFGD6R Ny+Gckaai+fzj15TKeeOIXY9ySM13XeP4DFh37p8
Object API (Amazon S3 compatible): Go: https://docs.minio.io/docs/golang-client-quickstart-guide Java: https://docs.minio.io/docs/java-client-quickstart-guide Python: https://docs.minio.io/docs/python-client-quickstart-guide JavaScript: https://docs.minio.io/docs/javascript-client-quickstart-guide .NET: https://docs.minio.io/docs/dotnet-client-quickstart-guide
|
其中Endpoint是Minio的管理端。AccessKey以及SecurityKey如果用过七牛云的应该清楚,通过客户端或者SDK访问server时必要的认证。


可以在管理面板中创建bucket以及上传文件。我们点击上传文件最右端的···,可以选择分享或者删除这个文件,但是分享只能设置最大7天的时效,超过了即会失效。

这并不是我们期望的,我们需要针对某些文件能够永久能够被访问。这样就需要客户端的配合了。
Minio Client
启动客户端,首先我们我们要将客户端设置为指定的Minio server设置一个别名
1
| mc config host add my-minio http://192.168.1.104:9000 {AccessKey} {SecurityKey}
|
执行成功后,我们可以在~/.mc/config.json中看到我们新添加的server

关于mc的命令我们可以通过官方提供的文档查询,这里就不多做说明了。下面我们来设置一下对象的永久访问
执行命令即可
1
| mc policy download {别名}/{bucket}/{path}
|
这样我们就可以直接通过endpoints的ip端口来访问对象了,如http://192.168.1.104:9000/dcits/acatar.png
SDK使用
官方提供了多语言的SDK,如JavaScript,java,python,golang以及.net,这里拿java举个例子
首先导入maven dependency
1 2 3 4 5
| <dependency> <groupId>io.minio</groupId> <artifactId>minio</artifactId> <version>3.0.10</version> </dependency>
|
将本地文件上传到Minio中
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| import java.io.IOException; import java.security.NoSuchAlgorithmException; import java.security.InvalidKeyException;
import org.xmlpull.v1.XmlPullParserException;
import io.minio.MinioClient; import io.minio.errors.MinioException;
public class FileUploader { public static void main(String[] args) throws NoSuchAlgorithmException, IOException, InvalidKeyException, XmlPullParserException { try { MinioClient minioClient = new MinioClient("https://192.168.1.104:9000", "Q3AM3UQ867SPQQA43P2F", "zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG");
boolean isExist = minioClient.bucketExists("patrick"); if(isExist) { System.out.println("Bucket already exists."); } else { minioClient.makeBucket("patrick"); }
minioClient.putObject("patrick","avatar.png", "/home/user/Photos/avatar.png"); } catch(MinioException e) { System.out.println("Error occurred: " + e); } }
|
其中MinioClient的putObject有多种实现,例子中是从本地文件上传,还可以直接通过web请求中的流直接上传。更多的可以去官方文档瞅瞅