一、MinIO基本知识

news2024/12/23 13:11:19

MinIO基本知识

  • 一、简介
    • 1.许可
  • 二、部署
    • 1.Docker部署
      • 1.1 部署容器
    • 1.2 MinIO页面访问
    • 1.3 创建Bucket![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/6c8aa92975f146b691f1f36ce1033e7c.png)
  • 三、Python-API
    • 1.安装包
    • 2.Bucket、Object概念
    • 3.Bucket-API
    • 4.MinIOClient-API
    • 5.Presigned-API
  • 四、其他配置
    • 1.将某个Bucket所有文件开放访问

一、简介

  • 英文官网: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才可以进行访问
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1614456.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Yolov系列】Yolov5学习(一)补充1.2:自适应锚框计算详解+代码注释

一、自适应锚框计算详解 自适应锚框计算的具体过程: ①获取数据集中所有目标的宽和高。 ②将每张图片中按照等比例缩放的方式到 resize 指定大小,这里保证宽高中的最大值符合指定大小。 ③将 bboxes 从相对坐标改成绝对坐标,这里…

余氯控制器的功能优势简介

余氯控制器是一款智能化的水质监测设备,它采用高精度AD转换和单片机微处理技术,能够完成余氯值的高精度测量。这款控制器具备时间显示、数据存储等基本功能。 高智能化设计:余氯控制器采用了高精度AD转换和单片机微处理技术,确保…

VisualGLM-6B的部署步骤

对于如下命令,你将完全删除环境和环境中的所有软件包 conda remove -n env_name --all 一、VisualGLM-6B环境安装 1、硬件配置 操作系统:Ubuntu_64(ubuntu22.04.3) GPU:4050 显存:16G 2、配置环境 建…

防水型RTU IP68防水遥测终端机

在工业物联网的领域中,防水型RTU(Remote Terminal Unit)具有不可或缺的重要性。作为工业设备的守护神,它在实现数据采集和传输、远程控制和预警告警的同时,还能保障设备免受水分侵害,确保系统稳定安全的运行。    计讯物联防水…

JDK 11下载、安装、配置

下载 到Oracle管网下载JDK 11,下载前需要登录,否则直接点下载会出现502 bad gateway。 下载页面链接 https://www.oracle.com/hk/java/technologies/downloads/#java11-windows 登录 有些人可能没有Oracle账号,注册也比较慢,有需…

2024_GAMES101作业环境配置Mac(intel)_VSCode_Clion

目录 VSCodeClionCMakeList.txt VSCode brew install cmake 更换下载源为阿里云下载 opencv,不然会很慢 cd "$(brew --repo)" git remote -v cd "$(brew --repo)" git remote set-url origin https://mirrors.aliyun.com/homebrew/brew.git…

Python --- 基于Iris flower数据集的kNN分类实战

基于Iris flower数据集的kNN分类实战 Iris data set(鸢尾花数据集简介) 鸢尾花数据集共包含三种鸢尾花:Iris setosa, Iris virginica and Iris versicolor。 Iris setosa(山鸢尾) Iris virginica(维吉尼亚鸢尾 ) Iris …

本地环境测试

1. 在 Anaconda Navigator 中,打开 Jupyter Notebook ,在网页中,点击进入本地环境搭建中创 建的工作目录,点击右上角的 New- 》 Folder ,将新出现的 Untitled Folder 选中,并使用左上角 的 Rename 按钮重…

C++ //练习 12.30 定义你自己版本的TextQuery和QueryResult类,并执行12.3.1节(第431页)中的runQueries函数。

C Primer(第5版) 练习 12.30 练习 12.30 定义你自己版本的TextQuery和QueryResult类,并执行12.3.1节(第431页)中的runQueries函数。 环境:Linux Ubuntu(云服务器) 工具&#xff1…

{“errMsg“:“insertXWebCamera:fail appid privacy api banned“}

问题描述:微信小程序,在体验版本测试时,调用摄像头OK,没有任何问题,部署发布版本后,日志报错内容:{"errMsg":"insertXWebCamera:fail appid privacy api banned"}&#xff…

opencv人脸打马赛克

import cv2def FaceFind(imgPath: str) -> list:image cv2.imread(imgPath)gray cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)face_cascade cv2.CascadeClassifier(haarcascade_frontalface_default.xml)# 返回人脸坐标列表faces face_cascade.detectMultiScale(gray, scal…

MultiCD工具:创建一个多引导Linux USB驱动器

众所周知,拥有一个可安装多个可用操作系统的 CD 或 USB 驱动器在各种情况下都非常有用。无论是为了快速测试或调试某些内容,还是只是重新安装笔记本电脑或 PC 的操作系统,这都可以为你节省大量时间。 在本文中,将介绍如何使用名为…

高度自定义工业自动化配置:钡铼IOy系列模块广泛应用各行业案例

钡铼IOy系列模块是当今工业自动化领域中备受瞩目的一种设备,其高度自定义的特性使其在各行各业都得到了广泛的应用。无论是在制造业、能源领域还是物流行业,钡铼IOy系列模块都发挥着重要的作用,为企业提高生产效率、降低成本、提升产品质量等…

每日更新的Socks5代理服务推荐

大家好!我是一名对于IP代理知识非常熟悉的作者,今天我要为大家介绍的是每日更新的Socks5代理服务推荐。作为一个资深的网络爱好者,我深知在网络世界中保护个人隐私和确保数据安全的重要性。而Socks5代理服务则是一种既能够隐藏我们真实IP地址…

如何获取llama2模型

如何从huggingface快速下载llama2模型_llama2下载-CSDN博客文章浏览阅读1.6k次。【代码】如何从huggingface快速下载模型。_llama2下载https://blog.csdn.net/zh515858237/article/details/131248643?ops_request_misc&request_id&biz_id102&utm_termLlama%202%E6…

代码随想录算法训练营day34

题目:860.柠檬水找零、406.根据身高重建队列、452. 用最少数量的箭引爆气球 参考链接:代码随想录 860.柠檬水找零 思路:本题思路比较容易想,主要对于5,10,20三种情况分别讨论,维护三个变量分别记录目前手中三种钞票…

P450焕新而来,室内外两用+路径规划+YOLO点击跟踪,算力高达100TOPS

Prometheus 450(简称P450)是一款室内室外两用的中型轴距(410mm)无人机,基于F450基础飞行平台,搭载感知传感器二维平面激光雷达,双目深度相机等,配合软件Prometheus自主无人机系统和S…

GitOps 和 DevOps 有什么区别?

GitLab 是一个全球知名的一体化 DevOps 平台,很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab :https://gitlab.cn/install?channelcontent&utm_sourcecsdn 是 GitLab 在中国的发行版,专门为中国程序员服务。可以一键式部署…

OpenStack 入门体验

目录 一、云计算概述 1.1、什么是云计算 1.2、云计算的服务模型 1)IaaS 2)PaaS 3)SaaS 1.3、OpenStack 概述 1)OpenStack 起源 2)什么是 OpenStack 3)OpenStack 优势 二、OpenStack 一…

【1569】jsp学生学籍管理系统Myeclipse开发sqlserver数据库web结构jsp编程计算机网页项目

一、源码特点 jsp 学生学籍管理系统是一套完善的java web信息管理系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发,数据库为sqlserver2…