Minio

一、基本介绍

Minio 是一个高性能的分布式对象存储服务,它与Amazon S3 API兼容,因此可以轻松地集成到现有的应用程序中。Minio 可用于存储大量非结构化数据,如图片、视频、日志文件、备份和容器/虚拟机镜像等。以下是关于Minio的一些关键点:

  1. 兼容性:Minio 完全兼容S3云存储服务API,因此任何支持S3的应用程序都可以无缝地使用Minio。

  2. 简单性:Minio 提供了简单的REST API来访问和操作存储桶和对象。

  3. 可扩展性:Minio 可以水平扩展,支持多个节点,适合大规模部署。

  4. 高可用性:Minio 支持数据复制和故障转移,确保数据的持久性和可用性。

  5. 安全性:Minio 提供了多种安全特性,包括TLS/SSL加密传输、访问策略和身份认证。

  6. 多租户:Minio 支持多租户架构,允许多个用户或组织在同一个物理基础设施上独立操作。

  7. 分布式架构:Minio 可以运行在x86、ARM或Power架构上,支持在多种环境中部署,包括本地数据中心、云环境或边缘计算。

  8. 社区和企业版:Minio 有社区版和企业版,社区版是免费的,而企业版提供了额外的功能和支持。

  9. 客户端库:Minio 客户端SDK可用于多种编程语言,包括Go、Java、Python、C#、JavaScript等。

  10. 监控和日志:Minio 提供了监控和日志功能,帮助用户跟踪存储使用情况和操作历史。

Minio 是构建现代云原生应用的理想选择,特别是在需要处理大规模数据存储和需要与S3兼容的API的场景中。如果你需要更多关于Minio的具体信息或帮助,可以访问Minio的官方网站或GitHub页面。

二、win系统安装与配置服务

1.下载服务器与客户端

服务器(minio.exe)下载地址minio.exe
客户端(mc.exe)下载地址mc.exe

2.安装

在minio.exe所在目录下进入cmd,输入:

minio.exe server D:\ 希望启动minio服务目录的路径

按下Ctrl+鼠标左键点击http://127.0.0.1:9000进入浏览器页面并使用 root 凭据登录。您可以使用浏览器创建存储桶、上传对象和浏览 MinIO 服务器的内容,默认密码如下

   RootUser: minioadmin
   RootPass: minioadmin

输入登录即可,登录页面如下

3.创建桶与上传文件

"桶"(Bucket)是一个基本概念,用于逻辑上组织和存储对象。以下是桶的一些主要用途和特性:

  1. 存储容器:桶是对象存储的基本容器,你可以将文件(在对象存储中称为对象)上传到桶中。

  2. 命名空间:每个桶都有一个唯一的名称,这个名称在Minio服务器中是唯一的,用于区分不同的存储空间。

  3. 资源配额:桶可以设置存储配额,限制可以存储在桶中的数据量。

  4. 访问控制:桶可以设置访问策略,定义谁可以访问桶中的数据以及可以执行哪些操作(例如读取、写入、删除)。

  5. 数据组织:对象可以根据命名规则或通过添加前缀来在桶内进行逻辑组织。

  6. 生命周期管理:桶可以配置生命周期策略,自动执行如过期删除、归档旧数据等操作。

  7. 多租户隔离:在多租户环境中,桶可以作为隔离不同用户或组织数据的界限。

  8. 数据共享:桶可以设置为公开读或私有,允许用户共享存储在桶中的数据。

  9. 版本控制:一些对象存储服务允许在桶级别启用版本控制,以保留和恢复对象的历史版本。

  10. 跨区域复制:支持跨区域复制的存储服务可以在不同地理位置的桶之间复制数据,以提高数据的可用性和耐久性。

  11. 监控和日志:桶可以配置监控和访问日志,记录所有对桶中对象的访问和操作。

  12. 事件通知:桶可以配置事件通知,当桶中的对象发生变化时,可以触发特定的操作或发送通知。

桶是Minio中管理和访问数据的基础,提供了灵活的存储解决方案以满足不同的业务需求

创建bucket。点击Buckets—>Create Bucket

输入想要命名的桶名称,点击Create Bucket即可

对应的文件下也会多一个文件夹

点开浏览可以上传文件

可以看到文件夹中的文件不是PDF格式,具有加密性

三、使用Python交互实现文件上传并获取可分享链接

1.新建一个虚拟环境,并安装minio(可能需要魔法)
conda create -n Minio python=3.10 
pip install minio
2.运行代码
import minio
import os
 
#客户机信息
client = minio.Minio(
    endpoint='127.0.0.1:9000',
    access_key='minioadmin',
    secret_key='minioadmin',
    secure=False
)

 #上传文件
if client.bucket_exists("pdf"): #检查名为"pdf"的存储桶(Bucket)是否存在。如果存在,代码将继续执行;如果不存在,bucket_exists方法将返回False
    with open("D:/minio/操作系统.pdf", "rb") as file_data: #以二进制读取模式打开本地文件
        bytes_length = os.path.getsize("操作系统.pdf")#获取文件的大小
        client.put_object("pdf", "操作系统.pdf", file_data, bytes_length)#上传
        url = client.presigned_get_object("pdf", "操作系统.pdf")#生成一个预先签名的URL
        print(url)

运行完可以得到文件的一个链接

打开运行好的链接,下载文件成功

刷新桶会看见上传的文件

四、linux服务器安装与配置

功能:实现给一个文件路径,上传文件路径中的文件到服务器的桶中

1.在服务器上安装
mkdir minio
cd minio

 wget下载安装包

wget https://dl.minio.io/server/minio/release/linux-amd64/minio

将下载的二进制文件移动到 /usr/local/bin 目录并赋予可执行权限:

sudo mv minio /usr/local/bin 
sudo chmod +x /usr/local/bin/minio 
2.创建数据目录

为 MinIO 创建一个数据目录,例如:

sudo mkdir -p ./data
3.启动minio
minio server ./data

出现报错 

modeltest02@ubun:~/minio$ minio server ./data
FATAL Unable to start the server: Specified port is already in use
      > Please ensure no other program uses the same address/port

出现端口占用

使用以下命令查找占用端口的进程:

sudo lsof -i :9000

这将显示使用端口 9000 的进程。输出类似于:

COMMAND       PID USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
docker-pr 1578858 root    4u  IPv4 35816989      0t0  TCP *:9000 (LISTEN)
docker-pr 1578884 root    4u  IPv6 36361662      0t0  TCP *:9000 (LISTEN)

然后使用 kill 命令终止该进程:请谨慎操作

sudo kill 1578858 

如果该进程属于一个重要的服务,终止它可能会造成系统问题,因此请谨慎操作。

我使用的是更改 MinIO 的端口

如果你不想终止占用端口的进程,可以将 MinIO 服务器配置为使用不同的端口。例如,将端口从 9000 改为 9002:

MINIO_ROOT_USER=minioadmin MINIO_ROOT_PASSWORD=minioadmin minio server --address :9002 ./data

启动服务成功 

某些 IP 地址不一定可用,多试几个,我试了上面和你服务器地址一样的是可以的,如果不行试试关闭防火墙或者让防火墙允许特定端口

sudo ufw disable       #关闭防火墙
sudo ufw allow 9002    #允许特定端口
sudo ufw allow 44207

   RootUser: minioadmin 
   RootPass: minioadmin 

使用上面的账号登录

import minio
import os

def upload_files_to_minio(bucket_name, folder_path, minio_client):
    # 检查存储桶是否存在
    if not minio_client.bucket_exists(bucket_name):
        print(f"Bucket '{bucket_name}' does not exist.")
        return
    
    # 遍历文件夹内的所有文件
    for root, _, files in os.walk(folder_path):
        for file in files:
            file_path = os.path.join(root, file)
            file_name = os.path.relpath(file_path, folder_path)  # 相对路径作为对象名称
            
            with open(file_path, "rb") as file_data:
                file_size = os.path.getsize(file_path)
                minio_client.put_object(bucket_name, file_name, file_data, file_size)
                url = minio_client.presigned_get_object(bucket_name, file_name)
                print(f"Uploaded: {file_name} | URL: {url}")

# 客户机信息
client = minio.Minio(
    endpoint='客户机地址',
    access_key='minioadmin',
    secret_key='minioadmin',
    secure=False
)


# 调用函数
upload_files_to_minio('file', 'C:/Users/1/Desktop/识别算法', client)  #file是桶名称,第二是本地地址,传这个地址下的文件到file桶内

五、后台挂起minio

要让 MinIO 服务器在关闭终端会话(例如 Xshell)后仍然保持运行,这里介绍两种常见的方法:使用 nohupsystemd

1.使用 nohup 启动 MinIO 服务器
nohup minio server --address :9002 ./data > minio.log 2>&1 &
  • nohup: 忽略挂起信号,保持进程在退出终端后继续运行。
  • minio server --address :9002 /mnt/data: 你的 MinIO 启动命令。
  • > minio.log 2>&1: 将标准输出和标准错误输出重定向到 minio.log 文件。
  • &: 在后台运行该命令

可以使用以下命令查看日志:

tail -f minio.log
2.使用 systemd(推荐)

1.创建一个新的 minio.service 文件

sudo nano /etc/systemd/system/minio.service

2.在文件中添加以下内容:

[Unit]
Description=MinIO
Documentation=https://docs.min.io
Wants=network-online.target
After=network-online.target

[Service]
Environment="MINIO_ROOT_USER=minioadmin"
Environment="MINIO_ROOT_PASSWORD=minioadmin"
ExecStart=/usr/local/bin/minio server --address :9002 ./data
Restart=always
RestartSec=10s
User=modeltest02
Group=modeltest02
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target
  • User=modeltest02Group=modeltest02: 运行 MinIO 的用户和组。
  • ExecStart: MinIO 的启动命令。
  • Restart=always: 确保 MinIO 在崩溃时自动重启。

3.重新加载 systemd 配置并启动 MinIO 服务:

sudo systemctl daemon-reload
sudo systemctl enable minio
sudo systemctl start minio

4.检查 MinIO 服务状态:

sudo systemctl status minio

使用 systemd 方法管理 MinIO 服务器,可以确保它在系统启动时自动运行,并在任何情况下都保持运行,无需担心关闭终端会话的问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值