介绍
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}
目录结构
1.3 启动服务
1docker-compose down && docker-compose up -d
2# 本机测试绑定 hosts
3127.0.0.1 sso.halobug.cn
登录页 首页
上传后分享链接
2,创建多用户组
1,安装MinIO Client
1多种方式 docker,Homebrew (macOS),下载二进制文件(GNU/Linux)等
采用Homebrew(自行选择)
1brew install minio/stable/mc
2,客户端使用
11,连接服务(halobug)
2 mc config host add halobug http://oss.halobug.cn AKIAIOSFODNN7EXAMPLE wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
3
4 //msg:Added `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
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}
登录后即可正常使用