导读:本站备份篇推着大家把restic、rclone指向"对象存储",但一直没解决一个问题:对象存储去哪弄——云厂商的要花钱、有出口流量费,B2免费额度又随时可能调整。其实S3兼容的对象存储可以自己造:MinIO一个单二进制,小鸡上五分钟起一个,S3全套API、桶策略、网页控制台一应俱全。这篇讲透:MinIO适合存什么不适合存什么、单机部署的完整姿势、mc客户端的日常操作、给备份篇的restic/rclone当后端、配合Nginx反代上HTTPS、以及最关键的——自建对象存储的可用性边界在哪。读完这篇,你的备份异地副本可以落在自己的另一台小鸡上,一分钱外部依赖都没有。
一、先摆正预期:MinIO是什么,不是什么
MinIO是S3协议的超轻量实现:一个Go写的单二进制,启动即提供完整的S3 API——桶管理、对象读写、版本控制、生命周期规则、presigned URL全支持,官方客户端mc加上各语言的SDK生态直接复用。但个人玩家要先想清楚它的定位边界:它适合做"另一台机器上的结构化存储",当备份后端、当自托管应用的附件存储(比如给Nextcloud、Immich当S3后端)、当内网团队的文件交换层;它不适合替代"真公有云"——单盘单机的MinIO没有数据冗余(分布式模式才有多副本,个人玩家一般不搞),机器挂了数据就挂了。所以正确的心智模型是:MinIO不是让备份更安全,是让备份多一个"自主可控的异地副本"——它符合备份篇3-2-1原则里"另一份介质"的定义,前提是它跑在和主数据不同的机器上。想明白这一点,再往下动手。
二、单机部署:二进制还是Docker,这次二进制更香
Gitea篇讲过"专机专用选二进制、混部选Docker",MinIO稍有不同:它的二进制实在太轻,两种都顺手。二进制装法:
wget https://dl.min.io/server/minio/release/linux-amd64/minio chmod +x minio && mv minio /usr/local/bin/ useradd -r minio-user -s /sbin/nologin mkdir -p /data/minio && chown minio-user /data/minio
systemd单元(systemd篇的注册流程):
[Unit] Description=MinIO After=network.target [Service] User=minio-user Environment="MINIO_ROOT_USER=admin" Environment="MINIO_ROOT_PASSWORD=YourStrongPass" ExecStart=/usr/local/bin/minio server /data/minio --console-address ":9001" LimitNOFILE=65536 [Install] WantedBy=multi-user.target
systemctl enable --now minio跑起来。三个要点:MINIO_ROOT_USER/PASSWORD是控制台和API的总账号,密码必须强(S3 API暴露在公网就是给全世界爆破练习,SSH篇讲过的密钥强度原则同样适用);9000端口是S3 API,9001是网页控制台,两个都要管;数据目录/data/minio属主给专用用户,别用root跑服务——这条是所有自托管服务的通则。Docker党对应改写进Compose即可,镜像minio/minio,卷挂/data,环境变量同名。
三、mc客户端:S3世界的瑞士军刀
MinIO的日常操作用mc(MinIO Client)最顺手,它比s3cmd、aws cli都简洁。装好后第一步配置别名:
mc alias set myminio https://s3.example.com admin YourStrongPass
之后所有操作都拿别名开头。建桶和基本读写:
mc mb myminio/yvps-backup mc cp /backup/db_2026-09-01.sql.gz myminio/yvps-backup/db/ mc ls myminio/yvps-backup/db/ mc rm myminio/yvps-backup/db/db_2026-08-01.sql.gz
mc的杀手锏是mirror——目录级同步,rsync的S3版:
mc mirror /backup myminio/yvps-backup --overwrite
配合cron每日推送(cron篇的口诀),一个"本地备份上云"的流水线两行就通。还有mc diff对比差异、mc watch监听变化、mc du算容量,每个都是备份和清理场景的趁手工具。凭良心说,mc一个工具就值得单独写一篇,这里给的是最小可用集。
四、给restic和rclone当后端:备份篇的伏笔在此兑现
备份篇讲restic时后端写的是s3:remote:,那个remote如今可以指向自己的MinIO。rclone config里新增S3兼容后端,provider选MinIO,endpoint填s3.example.com,access key用MinIO建的子账号(别用root,后面第六节讲为什么),密钥对填好,restic和rclone的用法和云厂商S3完全一致——协议兼容的意义就在这:你写好的备份脚本一行都不用改,换个endpoint就从"付钱给云厂商"变成"用自己的小鸡"。备份篇那条流水线:
30 3 * * * restic backup /backup --repo s3:https://s3.example.com/yvps-backup
注意这里和原文的差别:自建后端必须显式写https://endpoint,restic才知道去哪验证。备份三副本的位置从此变成:机器本地一份、同机restic快照一份、MinIO那台小鸡一份——如果你还有云厂商的存储,再叠一层就是四副本,3-2-1原则超额完成。但要清醒:MinIO那台小鸡本身也在你的管理半径内,它和主服务器同厂商同机房的话,"异地"的成色要打折扣,最好选不同厂商的机器跑MinIO。
五、桶策略与生命周期:让备份自己过期
MinIO支持完整的IAM策略,最实用的操作是给备份建一个"只能读写指定桶"的子账号:控制台Identity里建用户backup-bot,附加策略限定arn:aws:s3:::yvps-backup/*的读写。这样备份脚本泄露的只是"能碰一个桶"的钥匙,不是整个存储的root。生命周期规则(Lifecycle)也配上:桶管理里设置规则,对象7天后自动过期删除——备份篇讲的"find -mtime +7 -delete"那套本地清理逻辑,直接下沉到存储层,写进去就再也不用管。版本控制(Versioning)开不开看场景:误删保护需求高就开,桶内会保留对象的历史版本,配合生命周期"非当前版本30天过期",防误删和防膨胀两全。这些配置都是一次性的,配完之后备份系统进入全自动状态——这正是备份篇说的"配好一次,往后只追加"的理想形态。
六、反代与HTTPS:S3 API的公网体面
生产环境别裸奔9000端口,套Nginx反代(反代篇+HTTPS篇的全套技能第三次复用):
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 $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_request_buffering off;
}
}
两个MinIO专属细节:client_max_body_size直接设0(不限),大对象分块上传multipart的体积不是普通Web请求能比的;proxy_request_buffering off让反代流式转发大文件,不在本地落盘缓存——不关的话传几个G的对象时Nginx自己先吃满磁盘,日志治理篇的磁盘告警当场触发。9001控制台端口要么不上公网(SSH隧道访问,SSH篇的端口转发技能),要么同样套反代加一层访问控制。开完HTTPS记得mc alias的endpoint从http换https,S3签名是带host校验的,换域名等于换后端,密钥不用换。
七、监控与体检:别让备份后端悄悄死掉
备份系统最阴险的故障模式是"静默失效":MinIO挂了两周,你以为备份一直在跑,其实cron天天报错没人看。三道防线:第一道,哪吒探针(监控篇)盯MinIO进程和9000端口存活,进程死了即时告警;第二道,mc admin info myminio放进cron每天跑一次,输出重定向到日志,journalctl一查便知(cron篇的排障姿势);第三道最狠也最有效——备份篇讲的恢复演练定期来一次,从MinIO真的拉一个快照恢复一遍,这条通过,整条链路从脚本到网络到存储端到端都是好的。三道防线分别覆盖"进程在不在""服务应不应""数据全不全",层层递进,缺一不可。
八、进阶玩法:从单机到分布式的心动与冷静
MinIO的分布式模式(多机多盘纠删码)确实诱人——四台小鸡组一个集群,任挂两台数据不丢。但个人玩家要冷静算账:四台机器的钱够买云厂商对象存储好几年,运维复杂度更是指数级上升(时钟同步、网络抖动、版本升级的滚动重启,随便一样都够折腾一晚)。个人规模的甜点位就是单机MinIO:把它当"另一台机器上的S3"用,可靠性靠"多副本放在不同地方"解决而不是"单点内部冗余"解决——两台小鸡各跑一个MinIO,restic同时推两个后端(或用mc mirror做桶间同步),比一个分布式集群便宜、简单、可理解。等哪天规模真到了需要纠删码的程度,那时候的你也早已不缺运维四台机器的能力了。
结语
MinIO补上了本站备份体系最后一块拼图:异地副本从此可以完全自主——restic/rclone的技能是现成的,S3协议是通用的,跑MinIO的小鸡是自己的,三者一拼,整条灾备链路没有一个环节需要看别人脸色。周末一小时就能搭完:部署、反代、建桶、配子账号、改备份脚本的endpoint,下个凌晨三点,第一份落进自己对象存储的加密快照就会准时出现。那一刻你会真切感到:所谓数据主权,就是备份目的地那一行URL里,写的全是你自己的域名。


