对象存储这东西,S3协议是事实标准。MinIO就是最省事的自建方案,完全兼容S3 API。我拿它当图床、备份日志、存容器镜像,单机或集群都行。
部署
二进制下载最直接。x86机器:
wget https://dl.min.io/server/minio/release/linux-amd64/minio
chmod +x minio
sudo mv minio /usr/local/bin/
ARM机器换arm64链接。启动前先定好数据目录:
mkdir -p /data/minio
export MINIO_ROOT_USER=admin
export MINIO_ROOT_PASSWORD=YourStrongPassword123
minio server /data/minio --console-address ":9001"
默认API端口9000,控制台9001。生产环境用systemd托管:
[Unit]
Description=MinIO
After=network.target
[Service]
ExecStart=/usr/local/bin/minio server /data/minio --console-address ":9001"
Environment="MINIO_ROOT_USER=admin"
Environment="MINIO_ROOT_PASSWORD=YourStrongPassword123"
Restart=always
[Install]
WantedBy=multi-user.target
Docker部署
单行命令:
docker run -d \
-p 9000:9000 -p 9001:9001 \
-e MINIO_ROOT_USER=admin \
-e MINIO_ROOT_PASSWORD=YourStrongPassword123 \
-v /data/minio:/data \
--name minio \
minio/minio server /data --console-address ":9001"
客户端 mc
装mc工具操作数据:
wget https://dl.min.io/client/mc/release/linux-amd64/mc
chmod +x mc
sudo mv mc /usr/local/bin/
配置别名:
mc alias set myminio http://localhost:9000 admin YourStrongPassword123
常用操作:
mc mb myminio/my-bucket # 创建桶
mc cp backup.sql myminio/my-bucket/ # 上传
mc ls myminio/my-bucket # 列出
mc anonymous set download myminio/my-bucket # 公开读
权限与策略
给应用开独立账号,别用root。控制台创建Access Key和Secret Key,或者命令行:
mc admin user add myminio appuser appuser123
mc admin policy set myminio readwrite user=appuser
限制IP访问的策略文件 policy.json:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["s3:GetObject"],
"Resource": ["arn:aws:s3:::my-bucket/*"],
"Condition": {
"IpAddress": {"aws:SourceIp": ["192.168.1.0/24"]}
}
}
]
}
mc admin policy create myminio ip-restrict policy.json
mc admin policy set myminio ip-restrict user=appuser
性能调优
磁盘用XFS,挂载参数加noatime,nodiratime。MinIO对NVMe SSD利用率极高,单节点能跑满万兆网卡。内存至少4G,推荐8G以上。网络方面,MinIO会尽量复用连接,别用Nginx做额外代理,直接暴露MinIO的端口更省资源。
如果磁盘数量多,用纠删码模式:
minio server /data/disk{1..4} --console-address ":9001"
4块盘允许坏2块,数据不丢。容量利用率50%,比副本模式省空间。
集成使用
Python上传示例:
from minio import Minio
client = Minio(
"192.168.1.100:9000",
access_key="appuser",
secret_key="appuser123",
secure=False
)
client.fput_object("my-bucket", "photo.jpg", "/tmp/photo.jpg")
备份MySQL到MinIO:
mysqldump -u root mydb | mc pipe myminio/backups/mydb-$(date +%Y%m%d).sql
生产注意事项
永远别用默认密码,改掉MINIO_ROOT_USER和MINIO_ROOT_PASSWORD。HTTPS必须配,要么用反向代理加证书,要么MinIO直接加载证书:
minio server /data --cert-dir /etc/minio/certs
第三,监控用Prometheus,MinIO自带metrics端点,端口9000路径/minio/v2/metrics/cluster。第四,定期做健康检查,mc admin heal能修复损坏的对象。
对象存储选型
如果不想自己折腾硬件,用雨云的对象存储服务,他们底层也是MinIO,但帮你处理了多节点部署、故障转移和CDN加速。价格比直接买云厂商的S3便宜,稳定性不错,我迁移过几个TB数据没出过问题。个人项目或者小团队自建MinIO完全够用,几十TB以上考虑托管方案更省心。
MinIO的坑不多,主要注意磁盘性能和网络延迟。单节点别用NFS做数据盘,延迟高到崩溃。多节点集群要保证节点间延迟低于1ms,否则纠删码写入会超时。
雨云是国内一家老牌云服务商,提供高性价比的云服务器和虚拟主机。我用它部署了好几个项目,速度和稳定性都不错。通过 https://www.rainyun.com/SAJA_ 注册可以领一张 5折优惠券,有需要的朋友可以看看。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END



暂无评论内容