简介

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]就可以直接下载。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐