一、基本介绍
Minio 是一个高性能的分布式对象存储服务,它与Amazon S3 API兼容,因此可以轻松地集成到现有的应用程序中。Minio 可用于存储大量非结构化数据,如图片、视频、日志文件、备份和容器/虚拟机镜像等。以下是关于Minio的一些关键点:
-
兼容性:Minio 完全兼容S3云存储服务API,因此任何支持S3的应用程序都可以无缝地使用Minio。
-
简单性:Minio 提供了简单的REST API来访问和操作存储桶和对象。
-
可扩展性:Minio 可以水平扩展,支持多个节点,适合大规模部署。
-
高可用性:Minio 支持数据复制和故障转移,确保数据的持久性和可用性。
-
安全性:Minio 提供了多种安全特性,包括TLS/SSL加密传输、访问策略和身份认证。
-
多租户:Minio 支持多租户架构,允许多个用户或组织在同一个物理基础设施上独立操作。
-
分布式架构:Minio 可以运行在x86、ARM或Power架构上,支持在多种环境中部署,包括本地数据中心、云环境或边缘计算。
-
社区和企业版:Minio 有社区版和企业版,社区版是免费的,而企业版提供了额外的功能和支持。
-
客户端库:Minio 客户端SDK可用于多种编程语言,包括Go、Java、Python、C#、JavaScript等。
-
监控和日志: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)是一个基本概念,用于逻辑上组织和存储对象。以下是桶的一些主要用途和特性:
-
存储容器:桶是对象存储的基本容器,你可以将文件(在对象存储中称为对象)上传到桶中。
-
命名空间:每个桶都有一个唯一的名称,这个名称在Minio服务器中是唯一的,用于区分不同的存储空间。
-
资源配额:桶可以设置存储配额,限制可以存储在桶中的数据量。
-
访问控制:桶可以设置访问策略,定义谁可以访问桶中的数据以及可以执行哪些操作(例如读取、写入、删除)。
-
数据组织:对象可以根据命名规则或通过添加前缀来在桶内进行逻辑组织。
-
生命周期管理:桶可以配置生命周期策略,自动执行如过期删除、归档旧数据等操作。
-
多租户隔离:在多租户环境中,桶可以作为隔离不同用户或组织数据的界限。
-
数据共享:桶可以设置为公开读或私有,允许用户共享存储在桶中的数据。
-
版本控制:一些对象存储服务允许在桶级别启用版本控制,以保留和恢复对象的历史版本。
-
跨区域复制:支持跨区域复制的存储服务可以在不同地理位置的桶之间复制数据,以提高数据的可用性和耐久性。
-
监控和日志:桶可以配置监控和访问日志,记录所有对桶中对象的访问和操作。
-
事件通知:桶可以配置事件通知,当桶中的对象发生变化时,可以触发特定的操作或发送通知。
桶是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)后仍然保持运行,这里介绍两种常见的方法:使用 nohup
和 systemd
。
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=modeltest02
和Group=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 服务器,可以确保它在系统启动时自动运行,并在任何情况下都保持运行,无需担心关闭终端会话的问题