栏目头部广告

开源对象存储服务MinIO容器化部署

一、MinIO简介

MinIO 是一款基于Go语言的高性能对象存储服务,它采用了Apache License v2.0开源协议,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等。它能兼容AWS S3的API,使用MinIO相当于是在使用AWS S3,能兼容一些主流的第三方服务。不过它自带的客户端MinIO Console确实有点鸡肋,还好支持了AWS S3,可以使用一些功能强大的S3客户端工具。

官网介绍:https://docs.min.io/

二、MinIO部署

2.1 容器化部署MinIO

推荐文章:Docker安装部署教程

(1)下载MinIO的Docker镜像

[root@10-27-0-224 ~]# docker pull minio/minio

(2)运行容器

[root@10-27-0-224 ~]# mkdir -p /data/minio/data
[root@10-27-0-224 ~]# docker run -p 9000:9000 -p 9001:9001 --name minio \
-d --restart=always \
-v /data/minio/data:/data \
-e MINIO_ROOT_USER=$user \
-e MINIO_ROOT_PASSWORD=$password \
-d minio/minio server /data --console-address ":9001"

--console-address # 指定MinIO Console的运行端口(否则会随机端口运行)

【注】$user和$password是账号密码变量,可自定义。-V持久化数据到本地后,删除容器minio对象存储数据不会丢失。

(3)MinIO Console的管理界面

http://10.27.0.224:9001/login

容器化部署开源对象存储服务MinIO (图1)

【注】这里我自定义的账号:minioadmin密码:minioadmin

2.2 MinIO Console使用 

MinIO Console是MinIO自带的可视化管理工具。

(1)MinIO Console,不仅支持了存储桶、文件的管理,还增加了用户、权限、日志等管理功能

容器化部署开源对象存储服务MinIO (图2)

(2)创建一个存储桶

容器化部署开源对象存储服务MinIO (图3)

容器化部署开源对象存储服务MinIO (图4)

(3)上传文件到对象存储

容器化部署开源对象存储服务MinIO (图5)

容器化部署开源对象存储服务MinIO (图6)

(4)设置共有和私有空间

容器化部署开源对象存储服务MinIO (图7)

容器化部署开源对象存储服务MinIO (图8)

(5)URL页面访问

容器化部署开源对象存储服务MinIO (图9)

【注】由于上传的图片的Content-Type为application/octet-stream,所以无法直接打开,默认是直接下载,后面我们会讨论一下解决方案。

(6)常见Content-Type类型

text/html                             html htm shtml;  
text/css                              css;  
text/xml                              xml rss;  
image/gif                             gif;  
image/jpeg                            jpeg jpg;  
application/x-javascript              js;  
application/atom+xml                  atom;  
text/mathml                           mml;  
text/plain                            txt;  
text/vnd.sun.j2me.app-descriptor      jad;  
text/vnd.wap.wml                      wml;  
text/x-component                      htc;  
image/png                             png;  
image/tiff                            tif tiff;  
image/vnd.wap.wbmp                    wbmp;  
image/x-icon                          ico;  
image/x-jng                           jng;  
image/x-ms-bmp                        bmp;  
image/svg+xml                         svg;  
application/java-archive              jar war ear;  
application/mac-binhex40              hqx;  
application/msword                    doc;  
application/pdf                       pdf;  
application/postscript                ps eps ai;  
application/rtf                       rtf;  
application/vnd.ms-excel              xls;  
application/vnd.ms-powerpoint         ppt;  
application/vnd.wap.wmlc              wmlc;  
application/vnd.wap.xhtml+xml         xhtml;  
application/x-cocoa                   cco;  
application/x-java-archive-diff       jardiff;  
application/x-java-jnlp-file          jnlp;  
application/x-makeself                run;  
application/x-perl                    pl pm;  
application/x-pilot                   prc pdb;  
application/x-rar-compressed          rar;  
application/x-redhat-package-manager  rpm;  
application/x-sea                     sea;  
application/x-shockwave-flash         swf;  
application/x-stuffit                 sit;  
application/x-tcl                     tcl tk;  
application/x-x509-ca-cert            der pem crt;  
application/x-xpinstall               xpi;  
application/zip                       zip;   
application/octet-stream              bin exe dll;  
application/octet-stream              deb;  
application/octet-stream              dmg;  
application/octet-stream              eot;  
application/octet-stream              iso img;  
application/octet-stream              msi msp msm;  
audio/midi                            mid midi kar;  
audio/mpeg                            mp3;  
audio/x-realaudio                     ra;  
video/3gpp                            3gpp 3gp;  
video/mpeg                            mpeg mpg;  
video/quicktime                       mov;  
video/x-flv                           flv;  
video/x-mng                           mng;  
video/x-ms-asf                        asx asf;  
video/x-ms-wmv                        wmv;  
video/x-msvideo                       avi;  
application/x-nokia-widget            wgz;  
text/cache-manifest                   mf manifest

三、MinIO客户端使用

对于对象存储来说,MinIO Console的功能还是不够用的,所以官方还提供了基于命令行的客户端MinIO Client(简称mc),下面我们来讲讲它的使用方法。

3.1 常用命令

命令作用
ls列出文件和文件夹
mb创建一个存储桶或一个文件夹
rb删除一个存储桶或一个文件夹
cat显示文件和对象内容
pipe将一个STDIN重定向到一个对象或者文件或者STDOUT
share生成用于共享的URL
cp拷贝文件和对象
mirror给存储桶和文件夹做镜像
find基于参数查找文件
diff对两个文件夹或者存储桶比较差异
rm删除文件和对象
events管理对象通知
watch监听文件和对象的事件
policy管理访问策略
session为cp命令管理保存的会话
config管理mc配置文件
update检查软件更新
version输出版本信息

3.2 安装配置

由于MinIO服务端中并没有自带客户端,所以我们需要安装并配置完客户端后才能使用,这里以Docker环境下的安装为例。

(1)下载MinIO Client 的Docker镜像

[root@10-27-0-224 ~]# docker pull minio/mc

(2)在Docker容器中运行mc

[root@10-27-0-224 ~]# docker run -it --entrypoint=/bin/sh minio/mc
sh-4.4#

(3)配置客户端

语法参考:mc config host add <ALIAS> <YOUR-S3-ENDPOINT> <YOUR-ACCESS-KEY> <YOUR-SECRET-KEY>

sh-4.4# mc config host add minio http://10.27.0.224:9000 minioadmin minioadmin
mc: Configuration written to `/root/.mc/config.json`. Please update your access credentials.
mc: Successfully created `/root/.mc/share`.
mc: Initialized share uploads `/root/.mc/share/uploads.json` file.
mc: Initialized share downloads `/root/.mc/share/downloads.json` file.
Added `minio` successfully.

3.3 常用操作

(1)查看存储桶

sh-4.4# mc ls minio
[2021-08-10 14:19:01 UTC]     0B img/

(2)查看存储桶中存在的文件

sh-4.4# mc ls minio/img 
[2021-08-10 14:23:16 UTC] 114KiB LOG.png

(3)创建一个名为video的存储桶

sh-4.4# mc mb minio/video
Bucket created successfully `minio/video`.

sh-4.4# mc ls minio
[2021-08-10 14:19:01 UTC]     0B img/
[2021-08-10 15:21:40 UTC]     0B video/

(4)共享LOG.png文件的下载路径

sh-4.4# mc share download minio/img/LOG.png
URL: http://10.27.0.224:9000/img/LOG.png
Expire: 7 days 0 hours 0 minutes 0 seconds
Share: http://10.27.0.224:9000/img/LOG.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=minioadmin%2F20210810%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20210810T152540Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=3a1cc44df0989f26d3a3193b4ecb467f0f1293cc910e85b956ada82bf3bc88b7

(5)查找img存储桶中的png文件

sh-4.4# mc find minio/img --name "*.png"
minio/img/LOG.png

(6)设置video存储桶的访问权限为只读

sh-4.4# mc policy set download minio/video  
Access permission for `minio/video` is set to `download`

sh-4.4# mc policy list minio/video/  
video/* => readonly

四、兼容AWS S3图形化工具

MinIO兼容AWS S3的大多数API接口,所以我们可以使用AWS S3 Browser工具,官网下载地址:https://s3browser.com/  国内备用地址:s3browser-9-9-7

4.1 配置S3 Browser

添加一个Account,输入相关登录信息,注意选择Account类型为S3 Compatible Storage;

容器化部署开源对象存储服务MinIO (图10)

image.png

4.2 S3 Browser使用

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

容器化部署开源对象存储服务MinIO (图11)

(2)功能展示

容器化部署开源对象存储服务MinIO (图12)

(3)默认MinIO返回的Content-Type为application/octet-stream,所以通过浏览器打开图片是直接下载。

容器化部署开源对象存储服务MinIO (图13)

容器化部署开源对象存储服务MinIO (图14)

(4)修改上传文件的默认返回的响应头,将.png开头的文件的响应头改为image/png,即可通过浏览器访问图片

容器化部署开源对象存储服务MinIO (图15)

容器化部署开源对象存储服务MinIO (图16)

【注意】需要注意的是之前上传的文件需要重新上传下才可以生效,此时访问链接就可以直接查看图片了。

(5)访问测试

http://10.27.0.224:9000/img/LOG.png

容器化部署开源对象存储服务MinIO (图17)

(6)修改存储桶的访问权限

容器化部署开源对象存储服务MinIO (图18)

五、MinIO WEB HTTPS解决方案

5.1 Nginx配置HTTPS转发访问MinIO WEB

https://img.starcto.com

[root@ansible ~]# vim /etc/nginx/nginx.conf
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    include /etc/nginx/conf.d/*.conf;
    server {
        listen 80;
        listen [::]:80;
        server_name img.starcto.com;
        rewrite ^ https://$http_host$request_uri? permanent;
    }
    server {
        listen       443 ssl http2 ;
        listen       [::]:443 ssl http2;
        server_name  img.starcto.com;

        ssl_certificate "/data/ssl/img.starcto.com/public.pem";
        ssl_certificate_key "/data/ssl/img.starcto.com/private.key";
        ssl_session_cache shared:SSL:1m;
        ssl_session_timeout  10m;
        ssl_ciphers HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers on;

        location / {
        proxy_pass        http://10.27.0.224:9001;
            proxy_set_header   Host             $host;
            proxy_set_header   X-Real-IP        $remote_addr;
            proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        }   
     }
}

5.2 Nginx配置HTTP转发MinIO数据传输通道

[root@ansible ~]# vim /etc/nginx/conf.d/img.starcto.com.conf
server {
    listen       80;
    server_name  img.starcto.com;

    location / {
    proxy_pass        http://10.27.0.224:9002;
        proxy_set_header   Host             $host;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        client_max_body_size    10240m;     # nginx配置上传文件大小(10G)
	    proxy_redirect off;
	    proxy_connect_timeout      240;
	    proxy_send_timeout         240;
	    proxy_read_timeout         3600;
	    proxy_http_version 1.1;
	    proxy_set_header Upgrade $http_upgrade;
	    proxy_set_header Connection "upgrade";        
    }
}

作者:UStarGao
链接:https://www.starcto.com/open-sourcing/204.html

来源:STARCTO
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处

UCloud云平台推荐


UCloud新用户专属注册连接

UCloud CDN超值特惠专场

UCloud全球云主机(UHost/VPS)大促页面

UCloud快杰云主机大促页面

文章页广告

随便看看

栏目底部广告
`