介绍

MinIO 是一款高性能、分布式的对象存储系统. 它是一款软件产品,可以100%的运行在标准硬件。即X86等低成本机器也能够很好的运行MinIO。

MinIO与传统的存储和其他的对象存储不同的是:它一开始就针对性能要求更高的私有云标准进行软件架构设计。因为MinIO一开始就只为对象存储而设计。所以他采用了更易用的方式进行设计,它能实现对象存储所需要的全部功能,在性能上也更加强劲,它不会为了更多的业务功能而妥协,失去MinIO的易用性、高效性。 这样的结果所带来的好处是:它能够更简单的实现局有弹性伸缩能力的原生对象存储服务。

MinIO在传统对象存储用例(例如辅助存储,灾难恢复和归档)方面表现出色。同时,它在机器学习、大数据、私有云、混合云等方面的存储技术上也独树一帜。当然,也不排除数据分析、高性能应用负载、原生云的支持。

了解更多

为什么选择要用 minio

在搭建minio之前,我们团队一直都使用阿里云OSS,因阿里云RAM账号权限安全等问题,需要技术同学上传后生成相关链接,无法满足运营同学及会议相关人员随时上传的需求(也为了解放技术同学),调研后选择minio

1.要求易于部署

2.开源免费

3.支持界面操作

4.开放共享

5.支持私有化部署,支持分布式部署

结合以上需求,选择了Minio作为项目建设中的文件存储服务。

操作实践

1,启动minio

1.1,创建minio工作目录;

1// 创建文件
2mkdir minio

1.2,创建docker-compose.yml 配置如下:

1touch docker-compose.yml

docker-compose.yml 配置文件

 1# docker-compose.yml
 2    
 3version: "3"
 4
 5services:
 6
 7  nginx:
 8    image: nginx:1.19.5-alpine
 9    volumes:
10           - ./default.conf:/etc/nginx/conf.d/default.conf:ro
11    expose:
12      - 80
13    environment:
14      - NGINX_HOST=localhost
15      - NGINX_PORT=80
16    networks:
17      - traefik
18    labels:
19      - "traefik.enable=true"
20      - "traefik.docker.network=traefik"
21      - "traefik.http.routers.oss-ssl.entrypoints=http"
22      - "traefik.http.routers.oss-ssl.rule=Host(`oss.halobug.cn`)"
23      - "traefik.http.services.oss-backend.loadbalancer.server.scheme=http"
24      - "traefik.http.services.oss-backend.loadbalancer.server.port=80"
25    depends_on:
26      - minio
27
28  minio:
29    image: minio/minio:RELEASE.2020-12-12T08-39-07Z
30    container_name: oss.data.lab.com
31    networks:
32      - traefik
33    volumes:
34      #持久化数据
35      - ./data:/data:rw
36    command: server /data
37    expose:
38      - 9000
39    environment:
40      - MINIO_ACCESS_KEY=AKIAIOSFODNN7EXAMPLE
41      - MINIO_SECRET_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
42      - MINIO_REGION_NAME=cn-home
43      - MINIO_REGION_COMMENT=homelab
44      - MINIO_BROWSER=on
45      - MINIO_DOMAIN=oss.halobug.cn
46    healthcheck:
47      test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
48      interval: 10s
49      timeout: 10s
50      retries: 3
51
52networks:
53  traefik:
54    external: true

Nginx 配置文件 default.conf

 1# default.conf
 2server {
 3    listen       80;
 4    listen  [::]:80;
 5    server_name  localhost;
 6
 7    #charset koi8-r;
 8    #access_log  /var/log/nginx/host.access.log  main;
 9    client_max_body_size 5120M;
10
11    location / {
12        proxy_pass http://oss.data.lab.com:9000;
13	    proxy_set_header Host $host;
14        proxy_set_header X-Real-IP $remote_addr;
15    }
16
17    error_page   500 502 503 504  /50x.html;
18    location = /50x.html {
19        root   /usr/share/nginx/html;
20    }
21}

目录结构

Center

1.3 启动服务

1docker-compose down && docker-compose up -d
2# 本机测试绑定 hosts
3127.0.0.1 sso.halobug.cn

登录页 Center 首页 Center

上传后分享链接 Center

2,创建多用户组

更多参考

1,安装MinIO Client

1多种方式 docker,Homebrew (macOS),下载二进制文件(GNU/Linux)等

采用Homebrew(自行选择)

1brew install minio/stable/mc

Center

2,客户端使用

 11,连接服务(halobug
 2    mc config host add halobug http://oss.halobug.cn AKIAIOSFODNN7EXAMPLE wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
 3    
 4    //msgAdded `halobug` successfully.
 5
 62,创建策略 readwrite
 7    
 8    mc admin policy add halobug readwrite readwrite.json
 9
10    // 配置文件如下(readwrite.json )
11    // Added policy `readwrite` successfully.
12    
133, 创建用户 密码必须为8位以上 (用户名 halo 密码 halo123123
14    mc admin user add halobug halo halo123123
15    
16    //Added user `halo` successfully.
174,成功创建用户后, 为该用户应用策略(readwrite)。
18    mc admin policy set halobug readwrite user=halo
19    
20    //Policy readwrite is set on user `halo`
21# 到此登录后就可以正常使用了,继续分组管理用户
22
235 创建分组 halogroup
24
25    mc admin group add halobug halogroup halo
26    
27    //Added members {halo} to group halogroup successfully.
28    
296,成功创建组后,对该组应用策略。
30
31    mc admin policy set halobug readwrite group=newgroup
32    
33    //Policy readwrite is set on group `newgroup`
34
357,更改权限后 需重新导入
36
37    mc admin policy add halobug readwrite readwrite.json
38    
39    // Added policy `readwrite` successfully.
40    

Center

Center

readwrite.json

 1# readwrite.json (注释内容删除后使用)
 2
 3{
 4  "Version": "2012-10-17",
 5  "Statement": [
 6    {
 7      "Effect": "Allow",
 8      "Action": [ //  权限列表
 9    		"s3:ListAllMyBuckets",//  查看所有的桶权限
10    		"s3:ListBucket",//  查看桶内对象权限
11    		"s3:GetBucketLocation",//  定位bucket权限
12    		"s3:GetObject", //   下载权限
13    		"s3:PutObject",//   上传权限
14    		"s3:DeleteObject" //   删除权限
15      ],
16      "Resource": [
17      // client 为允许操作的目录
18        "arn:aws:s3:::client/*" // arn:aws:s3不用动,后面用*表示所有桶,用onebucket/*表示只针对这个桶
19      ]
20    }
21  ]
22}

登录后即可正常使用