minio对象存储服务实践

MinIO作为文件服务器挺好用,还能进行权限控制,支持匿名下载挺很好用,简单好配置

部署

也支持docker部署,不过docker部署在进行二次设置(比如设置某个目录匿名下载)时会麻烦些,推荐采用二进制方式安装:

  • minio 服务端程序
  • mc 客户端程序,用于进行参数设置

安装服务端程序(minio)

参考官方:https://docs.min.io/docs/minio-quickstart-guide.html,下载安装

mkdir /home/minio_home
cd /home/minio_home
wget https://dl.min.io/server/minio/release/linux-ppc64le/minio
chmod +x minio
./minio server ./data

会提示:

Detected default credentials 'minioadmin:minioadmin', please change the credentials immediately using 'MINIO_ACCESS_KEY' and 'MINIO_SECRET_KEY'

为安全起见,最好不要采用默认密码,通过环境变量

export MINIO_ACCESS_KEY=minioadmin 
export MINIO_SECRET_KEY=minioadmin1234
nuhup ./minio server ./data & #后台方式,通过nohup命令启动

启动后,可以通过默认的9000端口进行访问了

安装客户端(mc)

安装 https://docs.min.io/docs/minio-client-quickstart-guide.html

wget https://dl.min.io/client/mc/release/linux-amd64/mc
chmod +x mc
./mc --help

根据help的提示“ Use 'mc --autocompletion' to enable shell autocompletion”
执行./mc --autocompletion

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.
mc: enabled autocompletion in '$SHELLRC'. Please restart your shell.

客户端使用

服务端和客户端跟部署目录没有关系,是通过消息通信的,首要要先增加自己的云存储服务作为别名

 ./mc config host add myminio http://10.1.192.120:9000 minioadmin minioadmin1234

可以执行ls查看有多少个bucket

./mc ls myminio  # myminio为上一步加的服务别名

设置匿名下载策略

设置可下载的匿名存储桶策略,参见:https://docs.min.io/cn/minio-client-complete-guide.html#policy
对于英文版:https://docs.min.io/docs/minio-client-complete-guide.html#policy

./mc policy set download myminio/ai123/docker/ #myminio为服务名,后面为路径

注意:权限不支持继承,即上面设置了ai123/docker/目录可以匿名下载,但是ai123/docker/a/b就不支持匿名下载,还需要单独设置
我用的版本是(minio version RELEASE.2020-05-28T23-29-21Z)

匿名下载后就可以url直接下载文件了,比如浏览器下载或者wget命令等

python代码调用样例

打开 http://: (例如 http://10.1.192.120:9000 )用默认的'minioadmin:minioadmin’既可操作文件系统了

可以手工创建一个bucket,上传一个文件,然后通过下列python代码下载文件了,需要先安装pip install minio

from minio import Minio
from minio.error import ResponseError

minioClient = Minio('10.1.192.120:9000',
                  access_key='minioadmin',
                  secret_key='minioadmin',
                  secure=False)

# Get a full object.
try:
    data = minioClient.get_object('pre-inquiry', 'fabric-dev-servers.tar.gz') # 你的bucket,你的对象名称
    with open('fabric-dev-servers.tar.gz', 'wb') as file_data:
        for d in data.stream(32*1024):
            file_data.write(d)
except ResponseError as err:
    print(err)

附:docker方式安装说明

特别说明:通过命令行方式安装使用

MinIO快速入门指南

mkdir /home/minio-data
docker run -d --name minio -p 9000:9000 -v /home/minio-data:/data  minio/minio server /data
docker logs -f minio #  可以看到默认的'minioadmin:minioadmin’

附: docker-compose样例

  minio:
    image: minio/minio:RELEASE.2021-05-22T02-34-39Z
    volumes:
      - ../minio_data/:/data
    ports:
      - "8039:9000"
    environment:
      MINIO_ROOT_USER: admin
      MINIO_ROOT_PASSWORD: admin123abc
    command: server /data

通过nginx作为代理

注意proxy_pass后的路径不要加/,否则会出现307错误错误

location /minio/ {
    proxy_pass http://10.17.157.168:8039;  # 
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

参考

  • Deploy MinIO on Docker Compose
  • MinIO Docker Quickstart Guide

你可能感兴趣的:(minio对象存储服务实践)