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)
官方资源
- GitHub: https://github.com/minio/minio
- 官网: https://min.io
- 文档: https://docs.min.io
- Docker 镜像:
quay.io/minio/minio - MinIO Client (mc): https://github.com/minio/mc
总结
| 场景 | 推荐方式 |
|---|---|
| 本地开发/测试 | docker run 单机模式 |
| 小型私有云 | 单机 + 持久化卷(-v /data:/data) |
| 企业生产环境 | 分布式集群(4+ 节点) |
| 替代 AWS S3 | 完全兼容,无缝迁移 |
MinIO 的核心优势是:简单、快、标准(S3 兼容)。无论是搭建 AI 数据湖、备份存储,还是作为应用附件服务,都是极佳选择。