一、MinIO基本知识

一、简介

  • 英文官网:https://min.io/
  • 中文官网:https://www.minio.org.cn
  • MinIO 是一个非常轻量的服务,可以很简单的和其他应用的结合使用,它兼容亚马逊 S3 云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等。
  • MinIO 是一款开源的对象存储服务器,它是使用 Go 语言开发的,可以在多个操作系统上运行,包括 Linux、Windows 和 macOS。
  • MinIO是一个对象存储:对象存储(Object Storage)是一种数据存储架构,它以对象为单位来处理、存储和检索数据,每个对象都包含了数据本身以及元数据
    • 元数据主要包括对象的描述信息(如用户、存储桶以及存储桶索引等)
  • 对象存储系统通常通过基于HTTP或HTTPS协议的API进行数据读写。

1.许可

  • MniIO具有双重许可
    • 开源GNU APGPL v3:完全免费
    • 商业企业许可证:收费
  • 兼容亚马逊S3云存储服务接口

二、部署

1.Docker部署

1.1 部署容器

# 1.拉取最新镜像
docker pull minio/minio
# 2.创建minio挂载目录
mkdir -p /data/minio/data
mkdir -p /data/minio/config
# 3.启动容器
docker run -p 9000:9000 -p 9090:9090 \
     --net=host \
     --name minio \
     -d --restart=always \
     -e "MINIO_ACCESS_KEY=minioadmin" \
     -e "MINIO_SECRET_KEY=minioadmin" \
     -v /data/minio/data:/data \
     -v /data/minio/config:/root/.minio \
     minio/minio server \
     /data --console-address ":9090" -address ":9000"
  • 参数解释
    • -p 9000:9000 -p 9090:9090:将本地机器上的端口 9000 和 9090绑定到容器上相同的端口。 这允许通过本地机器访问容器。
      • 9090是客户端端口
    • -v /data/minio/data:/data:将本地机器上的存储卷 /data/minio/data 绑定到容器上的 /data 路径。 将此值替换为本地机器上一个存储卷或文件夹的完整路径。
    • -v /data/minio/config:/root/.minio:将上一步创建的环变变量配置文件挂载到容器上
      • MinIO服务器使用此环境变量配置文件进行配置。
    • -e “MINIO_CONFIG_ENV_FILE=/etc/config.env”:设置一个MinIO环境变量,指向容器挂载的环变变量配置文件的路径。
    • minio server --console-address “:9001”:使用之前步骤中拉取的 minio:minio 镜像启动MinIO服务器。 minio server --console-address “:9001” 选项指示服务器为MinIO控制台Web界面设置一个静态端口
    • -e “MINIO_ACCESS_KEY=minioadmin”:账号
    • -e “MINIO_SECRET_KEY=minioadmin”:密码(账号长度必须大于等于5,密码长度必须大于等于8位)

1.2 MinIO页面访问

  • http://部署服务器ip:9090
    在这里插入图片描述
  • 使用账号密码:minioadmin/minioadmin登录

1.3 创建Bucket在这里插入图片描述

三、Python-API

1.安装包

pip install minio

2.Bucket、Object概念

  • Bucket是存储Object的逻辑空间,每个Bucket之间的数据是相互隔离的,对用户而言,相当于存放文件的顶层文件夹;
  • Object是存储到Minlo的基本对象,对用户而言,相当于文件;

3.Bucket-API

from minio.error import S3Error
from minio import Minio


client = Minio(endpoint="192.168.86.128:9000",
               access_key="minioadmin",
               secret_key="minioadmin",
               secure=False
               )
# 1.判断Bucket是否存在
bucket_exists = client.bucket_exists("myfolder")
print(bucket_exists)

# 2.创建新的Bucket
try:
    client.make_bucket("myfolder1")
except S3Error:
    print("该名称目录已被创建")

# 3.获取所有Bucket名称和创建时间
print([(bucket.name, bucket.creation_date) for bucket in client.list_buckets()])

# 4.删除已存在的Bucket
try:
    client.remove_bucket("xxxxx")
except S3Error:
    print("该Bucket不存在")

4.MinIOClient-API

import os

from minio import Minio, S3Error
from minio.commonconfig import CopySource
from minio.deleteobjects import DeleteObject

client = Minio(endpoint="192.168.86.128:9000",
               access_key="minioadmin",
               secret_key="minioadmin",
               secure=False
               )
bucket_name = "myfolder"
# 1.判断Bucket是否存在
if not client.bucket_exists(bucket_name):
    client.make_bucket(bucket_name)

# 2.通过文件句柄上传文件到bucket
"""
单个对象的最大大小限制在5TB。put_object在对象大于5MiB时,自动使用multiple parts方式上传。
这样,当上传失败时,客户端只需要上传未成功的部分即可(类似断点上传)。
上传的对象使用MD5SUM签名进行完整性验证。
"""
with open('./test.txt', 'rb') as file:
    file_stat = os.stat('./test.txt')
    print(client.put_object(bucket_name, 'test.txt', file, file_stat.st_size))

# 3.通过文件名称上传文件到bucket(推荐)
print(client.fput_object(bucket_name, '12.docx', './12.docx'))
# 上传有文件路径的文件
print(client.fput_object(bucket_name, 'folder_name/12.docx', './12.docx'))

# 4.获取object元对象
try:
    object = client.stat_object(bucket_name, "12.docx")
    print(f"文件名称:{object.object_name}")
    print(f"文件大小:{object.size}")
except S3Error:
    print("文件不存在")

# 5.下载对象(文件)
data = client.get_object(bucket_name, '12.docx')
with open('./download/12.docx', 'wb') as file:
    for d in data.stream(32 * 1024):
        file.write(d)

# 6.下载对象(文件)(推荐)
client.fget_object(bucket_name, '12.docx', './download/123.docx')

# 7.拷贝object(从一个bucket的对象拷贝到另一个bucket)(从myfolder复制文件到myfolder1)
# 拷贝对象存储服务上的源对象到一个新对象
# 注:该API支持的最大文件大小是5GB
# 可通过copy_conditions参数设置copy条件
# 经测试copy复制28M的文件需要663ms; 1.8G的压缩包需要53s
copy_result = client.copy_object("myfolder1", "12333.docx",
                                 CopySource(bucket_name, "12.docx")
                                 )

# 8.删除单个object
client.remove_object(bucket_name, "12.docx")

# 9.删除多个object
client.remove_objects(bucket_name, [DeleteObject("12.docx"),
                                    DeleteObject("123.docx"),
                                    DeleteObject("124.docx")])

5.Presigned-API

from datetime import timedelta
from minio import Minio

client = Minio(endpoint="192.168.86.128:9000",
               access_key="minioadmin",
               secret_key="minioadmin",
               secure=False
               )

bucket_name = "myfolder"
# 1.判断Bucket是否存在
if not client.bucket_exists(bucket_name):
    client.make_bucket(bucket_name, )

print(client.fput_object(bucket_name, 'asdasd/12.docx', './12.docx'))

# 2.生成一个用于HTTP GET操作的签名 URL(不管文件存不存在,都会生成URL)
# 预先获得的对象名称的获取对象URL,将在2天后过期
url = client.presigned_get_object(bucket_name, 'test.txt', expires=timedelta(days=2))
print(url)

# 3.生成一个用于HTTP PUT操作的签名 URL(不管文件存不存在,都会生成URL)
# # 预先获得的对象名称的获取对象URL,将在2天后过期
url = client.presigned_put_object(bucket_name, 'test.txt', expires=timedelta(days=2))
print(url)

四、其他配置

1.将某个Bucket所有文件开放访问

  • 如果是private,那么需要使用 预签名URL才可以进行访问
    在这里插入图片描述

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-27 00:06:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-27 00:06:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-27 00:06:02       82 阅读
  4. Python语言-面向对象

    2024-04-27 00:06:02       91 阅读

热门阅读

  1. MySQL查出时间比实际晚8小时的解决方案

    2024-04-27 00:06:02       25 阅读
  2. Android ViewModel使用模板

    2024-04-27 00:06:02       35 阅读
  3. 【小浩算法cpp题解】合并两个有序链表(21)

    2024-04-27 00:06:02       34 阅读
  4. nvm 错误

    2024-04-27 00:06:02       29 阅读
  5. 展开说说:Android动画使用

    2024-04-27 00:06:02       26 阅读
  6. 什么是裸金属服务器?

    2024-04-27 00:06:02       35 阅读
  7. 原型模式(上机考试抽题)

    2024-04-27 00:06:02       31 阅读
  8. 01_numpy

    2024-04-27 00:06:02       36 阅读
  9. 使用 LLaMA Factory 微调 Llama-3 中文对话模型

    2024-04-27 00:06:02       34 阅读
  10. class092 贪心经典题目专题4【左程云算法】

    2024-04-27 00:06:02       36 阅读
  11. Oracle基础1

    2024-04-27 00:06:02       26 阅读
  12. tcp通信协议

    2024-04-27 00:06:02       28 阅读
  13. 日志处理初探-日志存储

    2024-04-27 00:06:02       28 阅读
  14. 【SAP ME 12】SAP NWDS(eclipse)下载、安装,配置

    2024-04-27 00:06:02       22 阅读
  15. SQL查询一页数据过多太慢

    2024-04-27 00:06:02       37 阅读