
下午想从网盘把一份十几 GB 的资料拉回本地进度条慢悠悠地爬客户端弹出提示开通会员享受极速下载。这一幕几乎人人都遇到过。文件是自己的带宽是自己的想全速拿回来却要先交一笔订阅费。上传时也是同样的剧本几十 GB 的照片库备份到一半速度掉得让人怀疑人生第二天接着传。限速是网盘行业最成熟的商业模式也是最让用户难受的一个设计。对开发者来说这件事其实存在另一种解法把存储搬到自己的机器上让限速从根上消失。RustFS 是一个用 Rust 编写的开源分布式对象存储采用 Apache 2.0 许可证发布兼容 S3 API可以跑在 Linux、Windows、macOS、FreeBSD 和容器里x86、ARM、RISC-V 架构都在支持之列。它没有会员体系自然也没有限速机制。速度的天花板落在你家的宽带和你机器上的磁盘这两样物理条件上。会员买到的是速度而速度本不该被圈起来所谓不限速指的是对象存储的世界里根本不存在非会员限速这个机制。没有那个开关自然不会被按下。它不是承诺一个具体的 MB/s 数字而是把限速的权力从服务方手里拿走。公有网盘的成本模型决定了它必须给免费用户限速才能把付费转化做出来。这无可厚非但对用户而言代价是自己文件的读写权被打了个折扣。自建方案把这笔账反过来算硬件和带宽由你出服务也由你跑读写的速度上限就是物理条件本身没有中间商在中间设卡。当然家庭宽带的上行带宽通常远低于下行。如果你主要在局域网内用影响不大如果想在外面访问家里的存储得先把外网访问的问题解决掉这个后面会展开。这套方案最适合的人群也很清楚手边有闲置的台式机、NAS 或者一台小主机愿意花一个晚上折腾命令行并且受够了每个月为下载速度付费的人。它不追求取代所有人的网盘而是把选择权还给会自己动手的人。三条命令把它跑在自己的机器上Docker 是最省事的路径。前提是机器上装有 Docker Engine版本不低于 20.10并且 9000 和 9001 两个端口空闲前者跑 S3 API后者跑控制台。第一步拉镜像docker pull rustfs/rustfs:latest第二步建一个命名卷这样以后替换容器时对象数据仍然可用docker volume create rustfs-data第三步启动容器运行前把凭证占位符换成你自己的值docker run -d \ --name rustfs \ --restart unless-stopped \ -p 127.0.0.1:9000:9000 \ -p 127.0.0.1:9001:9001 \ -v rustfs-data:/data \ -e RUSTFS_ACCESS_KEYyour-access-key \ -e RUSTFS_SECRET_KEYyour-secret-key \ -e RUSTFS_ADDRESS:9000 \ -e RUSTFS_CONSOLE_ADDRESS:9001 \ -e RUSTFS_CONSOLE_ENABLEtrue \ -e RUSTFS_OBS_LOGGER_LEVELerror \ -e RUSTFS_OBS_LOG_DIRECTORY/var/log/rustfs/ \ rustfs/rustfs:latest \ /data这里把两个端口都绑在127.0.0.1上容器只接受本机访问。想在别的设备上访问属于外网访问的范畴留到后面外网那一节再说。凭证这一步别偷懒。官方文档明确要求在把 RustFS 接入网络前设置唯一的RUSTFS_ACCESS_KEY和RUSTFS_SECRET_KEY任何一个都不要沿用rustfsadmin这个公开默认值。需要强随机密钥的话openssl rand -base64 24就能生成一个。万一容器启动时忘了设置停掉容器、带上两个-e选项重新创建即可rustfs-data卷里的数据会保持不变。启动完验证一下docker ps --filter namerustfs curl --fail http://localhost:9000/health健康检查通过S3 API 就在http://localhost:9000上待命。部署方式不止 Docker 一种Docker 之外官方安装文档按场景给了完整的路线图本地试用可以走一键安装脚本或容器单服务器生产环境对应 SNSD单磁盘或 SNMD多磁盘的 Linux 安装多服务器生产集群在完成生产检查清单后用 MNMDKubernetes 场景有云原生部署方案Windows 和 macOS 主机也有原生安装CPU 架构覆盖 x86、ARM 和 RISC-V。Docker Compose 同样在官方支持之列。官方仓库里的docker-compose.yml除了 rustfs 本体还带上了grafana、prometheus、otel-collector和jaeger这组主要用于可观测性的服务想全都要就docker compose --profile observability up -d只想要存储本身docker compose -f docker-compose.yml up -d rustfs就只会启动 rustfs 容器。compose 文件里有个细节做得体贴一个rustfs_perms初始化容器会在 rustfs 启动前把挂载卷的所有权改成 10001替你处理掉了前面提到的权限问题。二进制和 systemd 的安装方式则把这两个凭证变量放在/etc/default/rustfs里设置重启rustfs服务生效。浏览器打开 9001建桶传文件都在网页里日常管理不需要敲命令。RustFS 自带 Web 控制台默认启用并监听 9001 端口与 S3 API 的 9000 相互独立。本地部署直接访问http://localhost:9001用启动时配置的那对访问密钥和秘密密钥登录也就是控制台里的 Key Login 方式。登录之后创建和管理存储桶、上传和下载对象、管理访问密钥这些日常操作都能在界面里完成身份与访问管理IAM的配置也有现成的入口。登录方式不止一种本地管理员标准方式是 Key Login也就是部署时配置的那对密钥如果身份工作流签发过会话令牌可以用 STS Login 走临时凭证配置了 OIDC 提供商之后登录页还会出现对应的 OIDC 登录入口。假如登录页连不上后端服务可以在页面上选择 Server Configuration 或直接访问/config填入可从外部访问的服务地址健康检查通过后保存即可。有一处权限细节提前知道会省不少排查时间容器以非 root 用户rustfsID 为 10001运行如果你不用命名卷而是绑定挂载主机目录目录所有者必须与容器用户匹配否则会遇到权限拒绝错误需要先执行chown -R 10001:10001 /path/to/host_directory官方文档还有一条提醒未配置自定义凭证时RustFS 会回退到rustfsadmin/rustfsadmin这组默认值仅适合一次性本地测试。把控制台开放到可信网络之外之前先配置唯一的访问密钥和高强度秘密密钥并启用 TLS。电脑里的文件让 rclone 直接同步和挂载存储跑起来之后日常文件怎么进出它答案可以是 rclone。RustFS 官方就提供了 rclone 集成指南把存储桶配成一个 S3 remote同步和挂载都顺手provider 选项里明确列有Other即任意其他 S3 兼容服务商。也就是说任何暴露 S3 API 的端点它都能接RustFS 正好在列。这里能看出 S3 兼容的真正价值S3 是对象存储的事实标准客户端生态是现成的。数据存进一个 S3 兼容的服务意味着客户端选择权始终在你手里今天用 rclone明天换别的工具数据不用搬家客户端也不用重学。配置时需要填的核心项就四个provider 选Other然后是access_key_id、secret_access_key以及 RustFS 的endpoint本地部署就是http://localhost:9000。region 填us-east-1即可——RustFS 本身会忽略这个值但 S3 签名流程需要它留空反而可能报签名错误。四个字段填完rclone 就认识你的私人存储了。配置好之后浏览、建桶、同步都是现成的命令rclone lsd remote: rclone mkdir remote:bucket rclone ls remote:bucket rclone sync --interactive /home/local/directory remote:bucketsync配上--interactive会先展示将要做的变更再执行第一次跑大目录时心里更有底。除此之外rclone copy负责单纯复制rclone check可以对本地和远端做校验比对更进阶的玩法是rclone mount把存储桶直接挂载成本地磁盘文件管理器里拖拽即用。不过挂载这条路在 Windows 上要先装 WinFsp 驱动才能用而且不少应用得开着--vfs-cache-mode才能正常读写挂载盘里的文件真要把它当工作盘先读一遍 rclone 的 mount 文档。照片库备份、代码归档、虚拟机镜像都可以交给它做定时同步。官方文档的后续步骤里也提供了 S3 客户端的配置指引客户端这一层始终有得选。到这里一条完整的路径就通了Docker 起服务浏览器管桶rclone 同步文件。整个过程没有出现过会员两个字。自建的账单备份、穿透、坏盘都得自己扛诚实地说自建不是零成本只是成本换了个形态。第一笔是可靠性。前文的单容器部署属于 SNSD 模式单节点单磁盘官方文档对它的容错描述很直白无需依赖备份定位是开发、测试和低密度非关键业务。数据安全完全取决于你的磁盘和你的备份习惯。想往上走一档可以选 SNMD单节点多磁盘节点内最多容忍 M 块校验盘故障再往上是 MNMD多节点多磁盘至少 4 个节点靠跨服务器的纠删码实现磁盘级和节点级容错那是生产工作负载的配置。另外要记得磁盘冗余不等于备份真正重要的数据仍然需要一份独立的异地副本。第二笔是外网访问。家庭宽带大多没有公网 IP出门在外想访问家里的存储得自己搭穿透或中转这部分的复杂度官方文档不会替你消化属于自建绕不开的一课。有一点要划重点别图省事在路由器上把 9000 和 9001 直接端口映射到公网S3 API 和控制台都不该这么裸露。官方文档明确提示在可信网络之外开放控制台前要使用 TLS证书也得自己准备和挂载真要对外提供服务把凭证、TLS、访问范围都配齐再开。第三笔是运维本身。容器要盯着重启策略日志要翻磁盘满了要扩。这些事网盘厂商一直在替你做代价就是你交的会员费。自建把这笔钱换成了你的时间和注意力换得值不值取决于你的数据有多重要、你有多享受这种掌控感。最后一点看法网盘卖的是省心自建买回的是控制权。对一个愿意折腾命令行的人来说一台闲置的机器加三条 Docker 命令就能换来一个没有限速开关、没有订阅到期、文件永远在自己手里的存储服务。它不会承诺你一个具体的速度数字因为那个数字只由你家的宽带和磁盘决定。限速的开关不复存在文件的归属清清楚楚这份取决于自己恰恰是自建的全部意义。