用 VPS 自建对象存储 MinIO:替代云存储省下每月流量费

在大硬盘 VPS 上部署 MinIO 兼容 S3 的对象存储,替代昂贵云 OSS,适合备份/图床/私有网盘场景省钱。

延伸阅读

更多相关攻略推荐:高级玩家玩出花:如何在 VPS 上广播自己的 IP 地址?BYOIP【虚拟化技术 01】一台物理机怎么变出几十台 VPS?KVM、容器、【双11黑五 02】2026 黑五 VPS 前瞻总攻略:五大厂商规律【促销2026 08】BuyVM 2026 黑五前瞻:不打折靠补货,BuyVM 块存储(Block Storage Slabs)完全指南

为什么要在 VPS 上自建对象存储

很多站长第一次被云存储账单吓到,都是在流量跑起来之后。云厂商的对象存储(比如 AWS S3、阿里云 OSS、腾讯云 COS)大多按「存储量 + 出网流量 + API 请求数」三重计费。你存了 5TB 文件,每月光存储费就一百多块人民币,再加上用户下载产生的出网流量,月底账单轻松飙到几百甚至上千。对小站长、个人备份、私有图床这类场景来说,这笔钱花得很冤。

对象存储和「在服务器上建个文件夹」不是一回事。它是一种用 HTTP 接口读写文件的存储方式:你把一个文件 PUT 进某个桶(bucket)的一个键(key)下,之后用 GET 取回来。它没有部分写入、没有改名这回事,要么整个对象写成功,要么没写进去。备份工具最喜欢这种模型,因为可靠性好判断。自建的核心思路就是:在自己买的 VPS 硬盘上跑一套兼容 S3 接口的软件,把云厂商那套按量计费换成「一次性买硬盘、之后随便用」。

MinIO 到底是什么

MinIO 是一个用 Go 语言写的开源对象存储服务,2014 年发布,GitHub 上差不多有 5 万颗星。它最值钱的地方在于:完整实现了 Amazon S3 的 API。也就是说,你原来给 AWS S3 写的应用、用的 SDK、配的备份工具(restic、rclone 等),只要把接入地址从亚马逊的域名改成一个你自己的 VPS 地址,代码一行都不用改就能连上 MinIO。它就是一个「你自己拥有的 S3」。

MinIO 以单个二进制文件运行,部署极简;也能用分布式模式跨多台机器做纠删码(erasure coding)来保护数据。它支持静态加密、桶版本控制、生命周期策略和事件通知,还有官方的 Kubernetes Operator。许可证方面,2021 年起社区版改用 AGPLv3(之前是 Apache 2.0),对个人自用和内部基础设施基本没有负担,只有把它打包进你要卖给别人的产品时才需要商业授权。

自建和买云存储,到底能省多少

我们用 2026 年还能查到的公开价目来算一笔账。AWS S3 标准档在美国东部区域大约是 0.023 美元/GB/月(前 50TB),折合每 TB 约 23.55 美元;出网流量前 10TB 是 0.09 美元/GB;PUT 类请求每千次 0.005 美元,GET 类请求每千次 0.0004 美元。假如你存 5TB、每月出网 1TB,账单大约 208 美元/月;存 10TB、出网 5TB,账单大约 685 美元/月,这还没算 CloudFront、归档层那些复杂项。

MinIO 软件本身免费,你只承担 VPS 的硬盘和流量成本。下面这张表把三家的核心差异摆出来:

对比项AWS S3 标准档Backblaze B2自建 MinIO(VPS)
软件费用免费(AGPLv3)
存储成本约 0.023 美元/GB/月约 0.006 美元/GB/月仅 VPS 硬盘成本
出网流量费约 0.09 美元/GB合作方免费,否则计费含在 VPS 套餐内
API 兼容性S3 原生S3 兼容完整 S3 API
数据位置亚马逊机房Backblaze 机房你的 VPS/机房
运维投入需自己维护服务器

结论很直接:当你的数据量超过几个 TB、或者出网流量很大时,自建的「固定成本」模型往往比云的「用多少付多少」更划算。但代价是你得自己管磁盘、打补丁、做冗余——这是下面要反复提醒的trade-off。

选一台大硬盘 VPS(这步最影响省钱)

自建对象存储,硬盘大小和流量是命门。你不需要多强的 CPU,但需要便宜的大容量存储和不限流量。这里强烈推荐看看 BuyVM 的块存储方案:它家基础 VPS 很小(比如 1 核 1GB 内存、10GB 本地 SSD 的 Slice 月付约 3.5 美元),但可以在同机房挂载「块存储 Slab」,价格是每 256GB 只要 1.25 美元/月。挂 4 块就是 1TB,加上基础 VPS 总共约 8.5 美元/月,还附带 1Gbps 不限流量。单台 VPS 最多可挂 16 块,做到 4TB。

BuyVM 在拉斯维加斯、纽约、迈阿密、卢森堡/瑞士都有机房,全系 KVM 虚拟化、AMD Ryzen 处理器、NVMe 加 RAID10,默认不限制流量,支持支付宝付款,对新手很友好。唯一要注意的是它家常缺货,看到有库存建议先小额下单测试。选机房时,如果主要给国内用户做图床,可以挑物理距离最近的拉斯维加斯;如果是隐私敏感用途,卢森堡/瑞士机房的管辖权更友好。

方式一:用 Docker 一键部署

如果你服务器上已经装了 Docker,这是最省事的办法。先建好数据目录并设置权限,再写一份 docker-compose 配置:

sudo mkdir -p /mnt/minio-data

sudo chown 1000:1000 /mnt/minio-data

sudo chmod 750 /mnt/minio-data

docker-compose 里关键的环境变量是 MINIO_ROOT_USER 和 MINIO_ROOT_PASSWORD,这就是你以后登录的管理员账号密码,务必设强一点。启动命令是 server /data --console-address 9001,其中 9000 是 S3 API 端口、9001 是网页控制台端口。建议只在 127.0.0.1 上监听,再用 Nginx 反代出去,别直接把端口暴露在公网。

跑起来后执行 docker compose up -d,再用 docker compose logs 看日志确认没有报错。浏览器暂时打不开公网控制台没关系,下一步用命令行工具 mc 就能管理。

方式二:直接装二进制(不想碰 Docker)

不想装 Docker 的话,MinIO 就是一个二进制文件,下载下来就能跑。不过有个 2026 年必须知道的变化:MinIO 社区版从 2025 年起停止发布预编译二进制,官方 README 目前只提供源码。老的下载地址还能用,截至 2026 年中提供的最新社区版服务器构建是 RELEASE.2025-09-07T16-13-09Z,客户端是 RELEASE.2025-08-13T08-35-41Z,之后没有更新的社区构建。换句话说,这个二进制是真的、能跑,但相当于「冻结版」,2025 年 9 月之后的安全补丁不在里面。这反而是我们把它只监听在 127.0.0.1、通过你可控的反代暴露的原因之一。

下载时记得校验哈希,别把 404 错误页当成程序装上去。下载完用 sha256sum 比对官方公布的 checksum,一致再 chmod +x 放到 /usr/local/bin/minio。如果你想要最新安全补丁,可以从源码编译:go install github.com/minio/minio@latest,需要一台装好 Go 工具链的机器,生成的二进制同样放到 /usr/local/bin/minio 即可,后面步骤完全一样。

用 Nginx 反代加 SSL 把服务暴露出去

MinIO 有两个端点:S3 API(9000)和网页控制台(9001)。生产环境别直接裸奔在公网,用 Nginx 做反代并配 Certbot 的免费证书。两个关键点:第一,上传大文件时要把 client_max_body_size 设为 0(不限制),否则默认 1MB 上限会让你传大文件直接 413 报错;第二,要关掉 proxy_buffering 和 chunked_transfer_encoding,MinIO 的分片上传依赖这些设置。控制台端口建议加 Basic Auth 或者只放行你自己的 IP,避免被陌生人扫到。

用 mc 命令行管桶和密钥

2025 年之后,MinIO 社区版的网页控制台去掉了管理功能,只剩对象浏览器,所以建桶、管密钥都要用命令行客户端 mc。先下载 mc 并加到 PATH,然后设别名:

mc alias set myminio https://storage.你的域名.com minioadmin 你的密码

建桶用 mc mb myminio/backups;给某个桶设公开只读用 mc anonymous set download myminio/图床桶;给应用单独建一个非管理员账号和密钥用 mc admin user add myminio 应用账号 应用密码。记住一条铁律:应用代码里永远用「专用子账号密钥」,不要用管理员 root 密钥,万一代码泄露损失可控。

三个实用场景:备份盘、图床、私有网盘

第一,当备份盘。restic、rclone 都原生支持 S3 协议,把 endpoint 指到你的 MinIO,备份脚本一行不改。数据库每日 dump、网站文件打包往里扔,比省钱的云存储还便宜。

第二,当图床。WordPress、Typecho 这类博客可以把媒体库接到 MinIO,插件通常只要填 endpoint、bucket、access key 即可。自己买的硬盘不限流量,访客看图不再担心出网费。

第三,当私有网盘。配合 Nextcloud 之类的程序,把 MinIO 设成外部存储后端,你就拥有了一个数据完全自己掌控的「私有百度网盘」,容量随你挂的块存储走。

老司机才知道的几个坑

坑一:单节点只有一份数据。一台 VPS 跑 MinIO,默认就是单副本,硬盘坏了数据就没了。重要数据要么用分布式多节点加纠删码,要么定期把桶同步到另一台机器或冷存储。云厂商吹的「11 个 9 durability」是人家帮你做了跨机房冗余,你自建可没有。

坑二:社区版控制台被砍。如前所述,网页里不能直接建桶和密钥了,习惯用鼠标点的同学要学一下 mc 命令,其实也就那几条。

坑三:安全更新冻结。用 2025 年的冻结版二进制,务必靠反代、防火墙、强密码把暴露面缩到最小。要么就花时间从源码编译最新版。

坑四:别忘了备份 MinIO 本身。对象存进去了不代表安全,定期 mc mirror 或 rclone sync 把桶拷到异地,才是真的稳妥。