先说结论:MinIO 是一个兼容 S3 API 的对象存储,适合放图片、视频、备份、日志和 AI 数据集。单机 Docker 就能跑,但单盘没有冗余;要可靠至少做多盘纠删码或集群,并且一定要把备份放到另一台机器或另一个云。
它适合这些场景:
- 网站/App 的图片、附件、视频存储
- 数据库备份、服务器快照的落地存储
- AI 训练数据、模型文件、数据集版本管理
- 替代云对象存储,控制成本和数据位置
部署方式怎么选
| 方式 | 适合 | 注意 |
|---|---|---|
| 单机二进制 | 测试、轻量使用 | 手动管理进程和升级 |
| Docker 单机 | 小团队、单盘 | 数据卷要挂到宿主机 |
| 多盘纠删码 | 生产、需要冗余 | 至少 4 块盘,容量规划复杂 |
| 分布式集群 | 大规模、多节点 | 网络、时钟、运维要求高 |
大多数小团队从 Docker 单机开始,数据盘挂宿主机,定期备份;数据量上来再考虑多盘或集群。
Docker 部署
docker run -d --name minio \
-p 9000:9000 -p 9001:9001 \
-v /data/minio:/data \
-e MINIO_ROOT_USER=admin \
-e MINIO_ROOT_PASSWORD=换成长密码 \
minio/minio server /data --console-address ":9001"
9000 是 S3 API,9001 是控制台。生产建议用 compose 管理,数据目录挂独立磁盘,别放系统盘。
services:
minio:
image: minio/minio
command: server /data --console-address ":9001"
ports:
- "127.0.0.1:9000:9000"
- "127.0.0.1:9001:9001"
environment:
MINIO_ROOT_USER: admin
MINIO_ROOT_PASSWORD: ${MINIO_ROOT_PASSWORD}
volumes:
- /data/minio:/data
restart: unless-stopped

域名和 HTTPS
控制台和 API 都不要直接暴露公网。用 Nginx/Caddy 反代,配 HTTPS,限制来源 IP;API 给应用访问,控制台只给管理员。S3 的签名对 Host 和路径敏感,反代要保留原始 Host 和路径,别改写。
server {
listen 443 ssl;
server_name s3.example.com;
client_max_body_size 0;
location / {
proxy_pass http://127.0.0.1:9000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
创建桶和权限
mc alias set local http://127.0.0.1:9000 admin 密码
mc mb local/media
mc anonymous set none local/media
mc cp ./logo.png local/media/logo.png
默认不要开匿名读写。应用用独立的 Access Key,按桶授权;泄露时只换这一组,不影响管理员。需要公开图片时,用 CDN 或预签名 URL,不要直接把桶设成 public。
纠删码和集群
MinIO 的多盘模式用纠删码,把对象切成数据块和校验块,坏几块盘还能恢复。至少 4 块盘起步,盘越多冗余能力越强;但可用容量不是简单相加,要按纠删码比例算。
集群模式要求节点时间同步、网络稳定、盘位一致;扩容和维护比单机复杂。没有运维经验,先用单机 + 备份,别一上来搭集群。

磁盘和容量规划
- 数据盘独立,别和系统盘、数据库共用
- 容量按“当前数据 × 2 + 30% 余量”估,留出备份和临时文件
- 小文件多时看 inode 和 IOPS,不要只看 TB
- 磁盘满会导致写入失败,设 80% 告警
备份怎么做
对象存储不是备份,删了就是删了。至少做两层:
- 开启桶版本控制,防误删和覆盖
- 用
mc mirror同步到另一台机器或另一个云 - 重要数据再做离线/冷备
mc mirror --overwrite local/media backup/media
mc version enable local/media

监控
看容量、对象数、请求错误率、磁盘健康、节点在线状态。MinIO 暴露 Prometheus 指标,可以接 Grafana;至少配一个磁盘和容量告警。
常见坑
- 单盘单机当生产,盘坏数据全没
- 桶设成 public,被扫到后被人当图床
- 控制台暴露公网,弱密码被撞
- 反代改写 Host/Path,S3 签名失败
- 磁盘满了才发现没告警
- 只做镜像,不防误删
另外,定期检查磁盘健康、容量曲线和备份恢复,别等盘坏了才想起没做冗余。
对象存储的可靠性靠冗余和备份,不靠单块磁盘。
上线前把权限、备份、告警三件事做完,再放业务数据进去,好。
常见问题 FAQ
Q1:MinIO 能替代云对象存储吗?
能,S3 API 兼容,应用改 endpoint 和密钥即可。但要自己负责磁盘、备份、带宽和可用性。
Q2:单机 MinIO 可靠吗?
单盘没有冗余,盘坏就丢。至少做多盘纠删码,或单机 + 异地备份;关键业务用集群或云对象存储。
Q3:需要多大磁盘?
按当前数据量 × 2 加 30% 余量,再考虑备份副本。小文件多时还要看 IOPS 和 inode。
Q4:怎么防止误删?
开版本控制,限制删除权限,定期镜像到另一处;删除操作要审批,别给应用 root 密钥。
Q5:能跑在 2 核 4G 上吗?
能跑轻量使用,但磁盘和带宽才是瓶颈。并发高、文件大时,加内存和独立磁盘更明显。
总结
MinIO 部署不难,难的是可靠:独立数据盘、纠删码或备份、最小权限、HTTPS、容量告警。先单机跑通,再按数据量升级,别把单盘当生产。
需要一台独立存储或备份机器,可以按小时开一台萤光云香港 CN2 VPS,挂独立数据盘先跑一轮。







