一、MinIO基本知识

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 Minioclient = 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 osfrom minio import Minio, S3Error
from minio.commonconfig import CopySource
from minio.deleteobjects import DeleteObjectclient = 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 Minioclient = 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.mzph.cn/web/1262.shtml

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

相关文章

C++修炼之路之多态--多态的条件与例外,重载+重写+重定义

目录 前言 一:构成多态的条件及一些特殊情况(前提是构成父子类) 1.多态是在不同的继承关系的类对象,去调用同一函数,产生了不同的结果 2.两个条件 3.三同的两个例外 1.协变---返回值类型可以不同,但必…

c++ qt6.5 打包sqlite组件无法使用,尽然 也需要dll支持!这和开发php 有什么区别!

运行 程序会默认使用当前所在文件夹中的 dll 文件,若文件不存在,会使用系统环境变量路径中的文件;又或者是需要在程序源代码中明确指定使用的 dll 的路径。由于我安装 Qt 时将相关 dll 文件路径都添加到了系统环境变量中,所以即使…

【R语言】混合图:小提琴图+箱线图

{ggstatsplot} 是 {ggplot2} 包的扩展,用于创建图形,其中包含信息丰富的绘图本身中包含的统计测试的详细信息。在典型的探索性数据分析工作流程中,数据可视化和统计建模是两个不同的阶段:可视化通知建模,而建模又可以建…

MapReduce工作流程(Hadoop3.x)

MapReduce 是一种用于并行处理大规模数据集的——编程模型和处理框架。它通常用于分布式计算环境中,如Apache Hadoop。 工作流程 1. 切分阶段(Splitting): 数据集被分成多个数据块,每个数据块的大小通常在64MB到12…

kaggle 泰坦尼克使用xgboost 得分0.73684

流程 导入所要使用的包引入kaggle的数据集csv文件查看数据集有无空值填充这些空值提取特征分离训练集和测试集调用模型 导入需要的包 import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sns import warnings warnings.filterwarni…

zabbix自定义监控、自动发现和注册以及代理设置

前言 监控项的定制和新设备的注册往往需要大量手动操作,这会导致维护成本的增加和监控效率的降低。本文将介绍如何利用 Zabbix 的自定义功能,实现监控项的动态发布和新设备的自动注册以及代理设置、从而简化运维工作并实现更高效的监控管理。 Zabbix 监…

【大模型开源篇1】彦宏您怎么看LLaMA3的开源

Meta LLaMA是Meta公司开源的大模型,作为大模型开源界得鼻祖, 刚刚发布LLaMA3。从ChatGPT 拉开了大模型竞赛的序幕,Meta 选择了开源,至此大模型也开始百花齐放的时期,但是开源模型一直无法超过必源模型,如今…

EA包图上嵌套的包位置不对

Extreme 2024-4-11 11:36 我从工具栏把一个包拖在另一个包里面,可是项目树上两个包的位置并列,拖了几次结果都一样。我的目的是做一个多层级的包图,是不是(EA)不能在图上做? UMLChina潘加宇 确实是这样&a…

Python可视化数据分析-饼状图

一、前言 饼状图(Pie Chart)是一种常用的数据可视化图表,用于展示数据中各部分的占比关系。Python 中有多种库可以用于绘制饼状图,比较常用的包括 matplotlib、pyecharts和 plotly 等。 二、使用 matplotlib 绘制饼状图 import…

必应bing搜索国内广告投放开户价格?

搜索引擎广告作为精准引流的重要手段之一,受到了众多企业的青睐,其中微软旗下的必应搜索(Bing),以其独特的市场定位和用户群体,成为了不可忽视的广告投放平台。对于想要在中国市场利用必应搜索进行广告投放…

局域网无法连接怎么办?

局域网连接是我们日常生活和工作中常用的方式之一,但有时我们可能会遇到局域网无法连接的问题。这给我们的工作和生活带来了很大的困扰。本文将介绍局域网无法连接的常见原因,并推荐一款名为【天联】的组网产品,它能够解决不同地区间的局域网…

Google Earth Engine 洪水制图 - 使用 Sentinel-1 SAR GRD

Sentinel-1 提供从具有双极化功能的 C 波段合成孔径雷达 (SAR) 设备获得的信息。该数据包括地面范围检测 (GRD) 场景,这些场景已通过 Sentinel-1 工具箱进行处理,以创建经过校准和正射校正的产品。该集合每天都会更新,新获得的资产会在可用后两天内添加。 该集合包含所有 G…

Delphi Firemonkey使用TVertScrollbox自定义列表数据

界面布局设置如下 创建一个过程添加新项目 procedure TForm1.AddItem(name: string; age: Integer); varlayout: TLayout; begin// 设置姓名标签的文本Label3.Text : name;// 设置年龄标签的文本Label4.Text : IntToStr(age);// 克隆 Layout1,并将克隆得到的对象赋值…

FastJson2中FastJsonHttpMessageConverter找不到类问题

问题描述 如果你最近也在升级FastJson到FastJson2版本,而跟我一样也遇到了FastJsonHttpMessageConverter找不到类问题以及FastJsonConfig找不到问题,那么恭喜你,看完本文,安装完fastjson2、fastjson2-extension、fastjson2-exte…

STM32H743驱动SD卡(1)

本文内容参考: STM32——SDIO的学习(驱动SD卡)(理论篇)-CSDN博客 STM32个人笔记-SDIO接口-CSDN博客 STM32-(40):SD卡与SDIO-CSDN博客 【STM32】使用SDIO进行SD卡读写(一)-初步认…

使用python-can和cantools实现arxml报文解析、发送和接收的完整指南

文章目录 背景一、硬件支持二、环境准备1、python解释器安装2、python库安装 三、 收发案例四、 方法拓展1、canoe硬件调用2、回调函数介绍 结论 背景 在汽车行业中,CAN (Controller Area Network) 总线是用于车辆内部通信的关键技术。arxml文件是一种用于描述CAN消…

【数据结构】算法效率揭秘:时间与空间复杂度的较量

前言 在计算机科学中,时间复杂度和空间复杂度是衡量算法性能的两个重要指标。它们分别表示算法在执行过程中所需的时间和空间资源。了解这两个概念有助于我们评估和比较不同算法的优劣,从而选择更合适的算法解决问题~ 欢迎关注个人主页:逸狼 …

.github/workflows Actions为项目构建增加手动CI 构建按钮

在Github CI项目的时候, 一般是有push的时候才触发CI构建任务, 今天介绍一种通过 on workflow_dispatch 来增加手动CI构建按钮的方法。 CI构建任务代码示例 .github/workflows/ci.yml name: CIon:push:branches: [develop]pull_request:branches: [dev…

社区论坛小圈子小程序源码系统:自定义小程序管理社区圈子软件圈子系统系统开发-做社区圈子丨圈子论坛社区交友系统开源版小程序源码丨

简述 移动互联网的快速发展,微信小程序作为一种新型的应用形态,已经深入到人们的生活中。特别是对于社区论坛类应用,小程序版本可以更好地满足用户快速、便捷获取信息的需求。下面给大家分享一款社区论坛小圈子小程序源码系统。 在这个信息…

linux中如何挂载yum云仓库进行软件的安装

1.首先在根目录下建立文件,用来挂载镜像文件 [rootclient ~]# mkdir /rhel9 2.挂载镜像文件: [rootclient ~]# mount /dev/cdrom /rhel9 3.切换到 /etc/yum.repos.d 下的目录并查看 ,创建 rhel9.repo文件,并编辑云仓库域名&am…