0%

Minio private cloud storage

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的可执行文件

1
chmod +x minio

添加执行权限

Minio Client

Minio Client的下载地址

1
https://dl.minio.io/client/mc/release/linux-amd64/mc

下载到本地是一个文件名为mc的可执行文件

1
chmod +x mc

添加执行权限

安装部署

Minio Server 启动

首先要给Minio server指定一个存储空间,用来定义bucket以及在bucket内存放的数据。

1
2
cd ~
mkdir -p mnt/data

启动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 {
// 使用Minio服务的URL,端口,Access key和Secret key创建一个MinioClient对象
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 {
// 创建一个名为asiatrip的存储桶,用于存储照片的zip文件。
minioClient.makeBucket("patrick");
}

// 使用putObject上传一个文件到存储桶中。
minioClient.putObject("patrick","avatar.png", "/home/user/Photos/avatar.png");
} catch(MinioException e) {
System.out.println("Error occurred: " + e);
}
}

其中MinioClient的putObject有多种实现,例子中是从本地文件上传,还可以直接通过web请求中的流直接上传。更多的可以去官方文档瞅瞅