MinIO部署与初步使用
文章目录
简介
MinIO 是一个开源的、高性能的对象存储系统,与 Amazon S3 API 完全兼容。它可以部署在你自己的服务器上,作为 AWS S3 的私有化替代方案。
核心优势
| 特性 | 说明 |
|---|---|
| 高性能 | Go 语言编写,32节点集群读写速度可达 325 GiB/s |
| S3 兼容 | 100% 兼容 AWS S3 API,可直接使用 S3 工具和 SDK |
| 云原生 | 为 Kubernetes 优化,提供官方 Operator 和 Helm Chart |
| 数据保护 | 使用纠删码技术,高效可靠 |
| 轻量级 | 单个约 100MB 的二进制文件即可运行 |
与传统存储的对比
| 特性 | 对象存储 (MinIO/S3) | 传统文件存储 (NFS/SMB) |
|---|---|---|
| 数据组织 | 扁平结构 + 桶 | 层级目录树 |
| 元数据 | 丰富的自定义元数据 | 有限的系统元数据 |
| 扩展性 | 水平扩展,可达 PB 级 | 垂直扩展受限 |
| 访问方式 | RESTful API (HTTP) | 文件系统协议 |
适用场景
| 场景 | 核心价值 | 关键优势 |
|---|---|---|
| AI/数据湖仓 | 加速AI训练与数据分析 | 计算存储分离、高性能 |
| 备份/归档 | 替换磁带和公有云归档 | 成本低、纠删码高效 |
| Web/移动应用 | 存储静态资源与用户内容 | 高并发、S3 API 标准 |
| 边缘/物联网 | 就地处理数据,节省带宽 | 轻量、可部署边缘 |
| 云原生 | 作为镜像、日志后端 | K8s 集成、S3 兼容 |
部署MinIO
在 Windows 上使用二进制文件部署 MinIO
第一步:载 MinIO 二进制文件
可以在官网下载MinIO二进制文件。不过由于官方下载服务器在国外,从国内访问受跨境网络限制,导致速度极慢。使用中国镜像下载地址。也可以下载指定版本的历史归档文件。找到目标版本(命名格式为 minio.RELEASE.yyyy-mm-ddThh-mm-ssZ),点击下载无后缀的二进制文件,并重命名为 minio.exe(便于使用)
第二步:创建目录结构
在想要安装 MinIO 的位置(建议非系统盘),创建以下目录结构:
D:\demo\minio\
├── bin\ # 存放 minio.exe 可执行文件
├── data\ # 存放实际存储的数据
└── logs\ # 存放运行日志(可选,便于排查问题)
将下载的 minio.exe 文件放入 bin 目录。
第三步:设置管理员账号和密码
打开 PowerShell(建议以管理员身份运行),进入 bin 目录:
cd D:\demo\minio\bin
然后设置环境变量(用户名和密码可自行修改):
setx MINIO_ROOT_USER minio
setx MINIO_ROOT_PASSWORD minio123
注意:执行 setx 命令后,需要关闭当前 PowerShell 窗口并重新打开,环境变量才会生效。
第四步:启动 MinIO 服务
在 minio.exe 文件所在目录下,打开终端执行以下命令:
.\minio.exe server D:\demo\minio\data --console-address ":9001" --address ":9000"
参数说明:
| 参数 | 作用 | 说明 |
|---|---|---|
| server | 启动服务器模式 | 必须参数 |
| D:\demo\minio\data | 数据存储目录 | 替换为创建的 data 目录路径,可以指定多个路径(用空格分隔)以启用纠删码(分布式模式),这里只指定了一个目录,所以是单机单磁盘模式 |
| –console-address “:9001” | Web 控制台端口 | 浏览器访问管理界面使用 |
| –address “:9000” | API 服务端口 | 应用程序调用 S3 API 时使用 |
启动成功后,会看到类似下面的输出:
API: http://127.0.0.1:9000
WebUI: http://127.0.0.1:9001
第五步:访问 Web 控制台
打开浏览器,访问:
http://127.0.0.1:9001
http://<Windows服务器IP>:9001
例如:http://127.0.0.1:9001
- 用户名:刚设置的 MINIO_ROOT_USER(如 admin)
- 密码:刚设置的 MINIO_ROOT_PASSWORD( 如 minio123)
登录成功后,你就可以在界面上创建存储桶(Bucket)、上传下载文件了。
web界面左侧仅显示 “Create Bucket”“Filter Buckets” 和桶列表,无其他管理选项。如果需要其它管理选项可以部署RELEASE.2025-04-22T22-12-26Z版本,该版本为具有 Web 管理页面的最后版本,点击下载无后缀的二进制文件,并重命名为 minio.exe(便于使用)。
Python 操作 MinIO 示例
第一步:安装 MinIO Python SDK
pip install minio
第二步:使用示例
创建脚本文件minio_demo.py与测试上传下载文件demo.txt。minio_demo.py中编写代码如下:
import io
from datetime import timedelta
from minio import Minio
from minio.error import S3Error
def main():
# 1. 创建客户端(连接到你部署的 MinIO)
client = Minio(
"127.0.0.1:9000", # MinIO 服务地址(你的 Windows 服务器 IP)
access_key="minio", # 你的 AccessKey(用户名)
secret_key="minio123", # 你的 SecretKey(密码)
secure=False # 使用 HTTP 设为 False,HTTPS 设为 True
)
bucket_name = "python-demo-bucket"
try:
# 2. 创建桶
if not client.bucket_exists(bucket_name): # 1. 检查桶是否存在
client.make_bucket(bucket_name) # 2. 创建新桶(如果不存在)
print(f"✅ 已创建桶: {bucket_name}")
# 3. 上传文件
# 方式一:上传本地文件(推荐)
source_file = "D:/demo/minio/demo.txt" # 本地文件路径
object_name = "uploaded-test.txt" # 在 MinIO 中存储的文件名
client.fput_object(bucket_name, object_name, source_file)
print("✅ 文件上传成功")
# 方式二:上传内存中的数据(如 bytes)
data = b"Hello, MinIO!"
client.put_object( bucket_name, "hello.txt", io.BytesIO(data), len(data))
print("内存数据已上传")
# 4. 列出文件
objects = client.list_objects(bucket_name, recursive=True)
for obj in objects:
print(f" 📄 {obj.object_name} ({obj.size} bytes)")
download_path = "D:/demo/minio/downloaded-test.txt"
client.fget_object( bucket_name,"uploaded-test.txt",download_path)
print(f"文件已下载到: {download_path}")
# 5. 生成分享链接
url = client.presigned_get_object(bucket_name, "hello.txt", expires=timedelta(hours=1))
print(f"🔗 分享链接(1小时有效):\n{url}")
except S3Error as err:
print(f"❌ 错误: {err}")
if __name__ == "__main__":
main()
第三步:运行查看结果
在minio_demo.py文件的目录下启动终端,执行命令:
python minio_demo.py
看到下图表示执行成功:
刷新浏览器可以看到新的桶python-demo-bucket已被创建。不过直接通过浏览器访问文件http://127.0.0.1:9000/python-demo-bucket/hello.txt会报错,这是因为默认创建的桶权限为 PRIVATE,这就需要修改桶的访问权限。
第四步:修改桶权限
MinIO Python SDK 本身没有 make_bucket 时直接设置权限的参数,但可以在创建桶后调用 set_bucket_policy 来实现:
import json
from minio import Minio
def create_public_bucket(client, bucket_name):
"""创建公开只读的桶"""
# 创建桶
if not client.bucket_exists(bucket_name):
client.make_bucket(bucket_name)
# 设置公开策略
policy = {
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Principal": {"AWS": ["*"]},
"Action": ["s3:GetObject"],
"Resource": [f"arn:aws:s3:::{bucket_name}/*"]
}]
}
client.set_bucket_policy(bucket_name, json.dumps(policy))
print(f"✅ 公开桶 '{bucket_name}' 创建成功")
return bucket_name
# 使用示例
client = Minio("127.0.0.1:9000", access_key="minio", secret_key="minio123", secure=False)
create_public_bucket(client, "python-demo-bucket")
设置完成后,这样外界就可以访问上传的文件了。再次通过浏览器查看桶的权限已经变为CUSTOM,并且通过文件url[http://127.0.0.1:9000/python-demo-bucket/hello.txt]就可以直接下载。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)