MinIO 是一个 高性能、兼容 Amazon S3 API 的开源对象存储系统,使用 Go 语言开发,适用于私有云、边缘计算、AI/ML 数据湖等场景。它可单机部署(开发测试)或分布式集群部署(生产环境),支持数据加密、版本控制、生命周期管理、桶复制等企业级功能。


 一、快速启动(单机模式,适合开发/测试)

 方式 1:Docker(推荐)

# 拉取并运行 MinIO(数据保存在容器内,重启会丢失)
docker run -p 9000:9000 -p 9001:9001 \
  -e "MINIO_ROOT_USER=minioadmin" \
  -e "MINIO_ROOT_PASSWORD=minioadmin" \
  quay.io/minio/minio server /data --console-address ":9001"
  • 9000:S3 API 端口
  • 9001:Web 控制台端口
  • 默认账号密码:minioadmin / minioadmin

 方式 2:二进制直接运行(Linux/macOS/Windows)

# 下载(以 Linux 为例)
wget https://dl.min.io/server/minio/release/linux-amd64/minio
chmod +x minio

# 启动(指定数据目录)
./minio server ~/minio-data --console-address ":9001"

首次启动会打印默认凭据(也可通过环境变量设置):

export MINIO_ROOT_USER=myuser
export MINIO_ROOT_PASSWORD=mypass123!
./minio server ~/minio-data

 二、访问 Web 控制台

打开浏览器访问:

http://localhost:9001
  • 登录后可:
    • 创建 Bucket(存储桶)
    • 上传/下载/删除文件
    • 设置访问策略(public/private)
    • 查看监控指标(CPU、网络、请求量)

💡 控制台是 嵌入式 React 应用,无需额外部署。


 三、使用命令行工具 mc(MinIO Client)

mc 是 MinIO 官方 CLI 工具,功能类似 awscli,但更简洁。

1. 安装 mc

# Linux/macOS
wget https://dl.min.io/client/mc/release/linux-amd64/mc
chmod +x mc
sudo mv mc /usr/local/bin/

# Windows:下载 https://dl.min.io/client/mc/release/windows-amd64/mc.exe

2. 添加 MinIO 服务(别名)

mc alias set myminio http://localhost:9000 minioadmin minioadmin

3. 常用命令

# 列出所有 bucket
mc ls myminio

# 创建 bucket
mc mb myminio/myphotos

# 上传文件
mc cp photo.jpg myminio/myphotos/

# 下载文件
mc cp myminio/myphotos/photo.jpg ./

# 同步本地目录到 bucket
mc mirror ~/Pictures myminio/myphotos

# 设置 bucket 为公开读
mc anonymous set public myminio/myphotos

📌 公开后可通过 URL 直接访问:
http://localhost:9000/myphotos/photo.jpg


 四、生产部署建议(分布式模式)

单机模式 不支持 版本控制、对象锁定、跨区域复制等高级功能。生产环境应使用 分布式 MinIO(Erasure Coding)

要求:

  • 至少 4 个节点(或 4 块磁盘)
  • 所有节点时间同步(NTP)
  • 网络互通

启动示例(4 节点):

# 在每个节点上执行(假设 IP 为 192.168.1.{1,2,3,4})
minio server http://192.168.1.{1...4}/data

MinIO 会自动组成集群,数据分片+纠删码存储,容忍最多 2 个节点故障。


 五、集成到应用程序(SDK 示例)

MinIO 兼容 S3 API,几乎所有 S3 SDK 都可直接使用。

Python 示例(使用 boto3

from minio import Minio

client = Minio(
    "localhost:9000",
    access_key="minioadmin",
    secret_key="minioadmin",
    secure=False  # 关闭 HTTPS(开发环境)
)

# 上传文件
client.fput_object("myphotos", "photo.jpg", "local_photo.jpg")

Go 示例

import "github.com/minio/minio-go/v7"

s3Client, err := minio.New("localhost:9000", &minio.Options{
    Creds:  credentials.NewStaticV4("minioadmin", "minioadmin", ""),
    Secure: false,
})
s3Client.FPutObject(context.Background(), "myphotos", "photo.jpg", "local.jpg", minio.PutObjectOptions{})

完整 SDK 列表:https://docs.min.io/community/minio-object-store/developers/minio-drivers.html


 六、关键配置(环境变量)

变量 说明
MINIO_ROOT_USER 管理员用户名
MINIO_ROOT_PASSWORD 管理员密码(至少 8 位)
MINIO_SERVER_URL 外部访问地址(用于 Console 重定向)
MINIO_BROWSER_REDIRECT_URL Web 控制台跳转地址(反向代理时必需)
MINIO_KMS_SECRET_KEY 启用服务端加密(SSE-S3)

 七、安全与运维

  • 防火墙:开放 9000(API)和 9001(Console)
  • HTTPS:生产环境务必启用 TLS(可用 Let's Encrypt)
  • 备份:MinIO 本身是存储系统,不替代备份!建议定期快照底层磁盘
  • 监控:集成 Prometheus(/minio/v2/metrics/cluster

 官方资源


 总结

场景 推荐方式
本地开发/测试 docker run 单机模式
小型私有云 单机 + 持久化卷(-v /data:/data
企业生产环境 分布式集群(4+ 节点)
替代 AWS S3 完全兼容,无缝迁移

MinIO 的核心优势是:简单、快、标准(S3 兼容)。无论是搭建 AI 数据湖、备份存储,还是作为应用附件服务,都是极佳选择。

© 本文著作权归作者所有。转载请联系授权,禁止商用。