OSS

OSS,全称就是对象存储服务。何为对象存储?我们来看下阿里云 OSS (Object Storage Service)的介绍:

  • 对象存储服务(Object Storage Service,OSS)是一种海量、安全、低成本、高可靠的云存储服务,适合存放任意类型的文件。容量和处理能力弹性扩展,多种存储类型供选择,全面优化存储成本。

对象存储呈现出来的是一个“桶”(bucket),你可以往“桶”里面放“对象(Object)”。这个对象包括三个部分:Key、Data、Metadata。key就是对象在这个桶中的唯一标识;data就是数据;metadata就是标签,可以方便排序。

Minio 是个基于 Golang 编写的开源对象存储套件,虽然轻量,却拥有着不错的性能。麻雀虽小,五脏俱全,适合中小企业使用。当然 Minio 除了直接作为对象存储使用,还可以作为云上对象存储服务的网关层,无缝对接到 Amazon S3、MicroSoft Azure。

MinIO非常适合于存储大容量非结构化的数据。 例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几 kb 到最大 5T 不等。

使用Docker部署MinIO

这里假如使用Minio自带的域名服务来配置https十分繁琐并且坑非常非常多,于是我们使用常见的nginx反代理来处理,使得https的配置非常简单,并且传输上更为安全

我们出于便捷上的考虑使用docker来部署MinIO

首先我们需要在本机上创建两个文件夹用于存放数据与配置文件

1
2
mkdir -p /home/minio/config
mkdir -p /home/minio/data

然后我们获取docker的镜像

1
docker pull minio/minio

查看一下镜像是否下载到本地的仓库中了,如果已经存在,我们即可直接运行,命令如下

1
2
3
4
5
6
7
8
docker run -d -p 9090:9090 -p 9000:9000 --name minio \
-e "MINIO_ROOT_USER=admin" \
-e "MINIO_ROOT_PASSWORD=12345678" \
-e "MINIO_SERVER_URL=https://minio.test.com  " \
-e "MINIO_BROWSER_REDIRECT_URL=https://minio.test.com/console" \
-v /home/minio/data:/data \
-v /home/minio/config:/root/.minio \
minio/minio server  /data --console-address ":9000" -address ":9090"

我们使用docker ps命令查看一下运行状态。这里注意由于MinIO安全要求,账户长度需要大于等于5位,密码长度大于等于8位。

我们配置nginx,使得可以使用域名和https来访问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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#ProxyStart
    upstream minio {
        server 127.0.0.1:9090 fail_timeout=0;
    }
    server {
         listen 443 ssl;
         server_name minio.test.com;

         ssl_certificate      /cert/minio.test.com.pem;
         ssl_certificate_key  /cert/minio.test.com.key;
         ssl_session_timeout 5m;
         ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
         ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
         ssl_prefer_server_ciphers on;
         client_max_body_size   30m; #最大上传限制
         proxy_set_header Host $http_host;
         proxy_set_header X-Real-IP $remote_addr;
         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
         proxy_set_header X-Forwarded-Proto $scheme;
         proxy_set_header Upgrade $http_upgrade;
         proxy_set_header Connection "upgrade";

        location / {
            proxy_pass http://localhost:9090/;
        }
        location /console/{
            proxy_pass http://localhost:9000/;
        }
        #异常状态码跳转
        error_page  307   https://www.test.com;
        error_page  400   https://www.test.com;
        error_page  403   https://www.test.com;
        error_page  404   https://www.test.com;
        error_page  500   https://www.test.com;
        error_page  502   https://www.test.com;

    }
    #ProxyEnd

    #http forced jump https http强制跳转https配置
    server{
        listen 80;
        server_name minio.test.com;
        rewrite ^(.*)$  https://minio.test.com;
        location ~ / {
        index index.html index.php index.htm;
        }
    }

配置完后reload一下配置。至此,我们的MinIO已经在服务器上运行了起来。然后我们就可以在浏览器中打开。其中浏览器中的地址为https://minio.test.com/console

在Goland中使用MinIO

此时我们已经可以将MinIO当作一个简单的图床和云盘来使用了,操作十分便利。

由于MinIo提供了Restful方法来操作MinIO,所以程序调用相关的api也是十分方便

我们以Goland为例子,MinIO提供了非常便利的sdk来操作Minio。在MinIO的官网上给出了使用案例

这里就不赘述了

参考文章: minio源代码

minio官网

MinIO+Nginx开启https域名访问

Go语言搬砖 操作minio