基于Cloudflare R2搭建免费云盘,支持带密码分享、查看下载量、管理用户等功能
摘要
EdgeStash 是一个完全构建在 Cloudflare 之上的私有云盘,利用 Workers、R2 存储与 KV,提供带密码分享、在线预览 docx/pdf、后台管理授权用户、查看文件浏览/下载量等功能。本文介绍创建 KV 与 R2、部署 Worker 并绑定变量、设置管理员密码的完整步骤,并提示 R2 免费额度 10G 且需绑卡,仅推荐个人或团队内部使用。
前言
想搭一个自己的私有云盘,很多人第一反应是买 NAS、租服务器。但其实如果你已经有 Cloudflare 账号,完全可以零服务器成本搭一个够用的云盘——靠的就是 Cloudflare 那一套免费基础设施。
EdgeStash 就是这样一个项目:功能强大、部署简单的私有云盘方案,完全构建在 Cloudflare 的全球网络之上。它用 Cloudflare Workers(运行)+ R2(文件存储)+ KV(元数据 / 配置存储),给你提供一个安全、快速、低成本的个人或团队文件存储与分享平台。

它支持带密码分享文件、在线预览 docx / pdf 文档、后台管理授权用户、查看分享文件的浏览 / 下载量,功能相当全。项目地址:https://github.com/hhy-2021/EdgeStash
⚠️ 先说个前提,别等部署完才发现:R2 的免费额度只有 10G,而且需要绑定信用卡才能开通 R2。所以这个云盘我只推荐个人或团队内部使用,不适合当对外的大容量公共网盘。

先把成本边界算清楚:R2 真正的卖点是"出站免费"
原文只说了"10G 免费",但这个额度里最值钱的部分没点出来。把 R2 的免费额度完整看一下:
项目 | 免费额度 | 说明 |
|---|---|---|
存储量 | 10 GB / 月 | 超出部分按量计费,很便宜 |
Class A 操作(写:上传、列举、修改) | 100 万次 / 月 | 日常个人用远远用不完 |
Class B 操作(读:下载、查看) | 1000 万次 / 月 | 同上 |
出站流量(下行) | 免费、无限 | ← 这才是重点 |
看最后一行。几乎所有主流对象存储都要为"下载流量"付钱(AWS S3 的出站费用是出了名的贵),而 Cloudflare R2 的商业模式就是把出站流量免掉。
这对"个人云盘"场景意味着什么?意味着:
分享文件给别人下载,不产生流量费。你发一个链接给十个朋友,他们下载了 10 GB,账单是 0;
不用担心"被刷"。这是自建网盘最容易被忽略的风险——如果按流量计费,一个链接被恶意转发导致的大流量可能直接变成一笔账单。R2 在这件事上先天免疫。
所以 R2 的定位很清晰:它不便宜在"存",便宜在"取"。10 GB 存储够放文档和小型素材,而"取"的免费让分享这件事没有心理负担。
为什么必须绑卡?会不会莫名扣费?
这是最多人担心的问题,值得说明白:
绑卡是开通 R2 的门槛,主要目的是防滥用(防止有人开一堆匿名账号白嫖)。它并不是"准备开始收费"的信号;
在不超免费额度的前提下,不会产生任何费用——按量计费的起点是"超出免费额度之后";
但一定要主动设防。建议在 Cloudflare 后台的 Billing → 用量告警 / 预算通知里设一个提醒(比如"预计费用超过 1 美元就发邮件")。这样即使某天用量异常,你也是先收到通知,而不是先看到账单。
换个角度想:这套方案真正的"成本"其实不是钱,而是"你愿意把文件放在别人家的服务器上"。 虽然 Cloudflare 不会去翻你的文件,但数据主权确实不在你手里——所以它适合放"丢了不致命、但希望随时能取"的东西,而不是唯一的备份副本。
顺便说清 Workers 和 KV 的边界
因为这套方案是三件套拼起来的,顺手把另外两块的能力边界也交代一下,免得你踩到隐性限制:
Workers(运行层) —— 免费额度是每天 10 万次请求。对个人云盘来说绰绰有余(一天 10 万次访问是什么概念?大概是你一个人疯狂点击)。它负责的是"接收请求 → 判断权限 → 从 R2 取文件 → 返回"这一整条逻辑。
KV(配置 / 元数据层) —— 这里有一个必须知道的特性:KV 是"最终一致(eventual consistency)"的。
什么意思?KV 为了做到全球边缘极速读取,采用的是"写入后异步复制到各节点"的策略。所以在某个节点刚写入一条数据后,别的节点可能要等几十秒才看得到。
这对 EdgeStash 的实践影响是:
存"分享链接的元信息""管理员配置"这类读多写少的数据,完全没问题;
但不要指望它做"强一致"的计数。比如"下载量 +1"这种高频写入、要求立刻准确的场景,在 KV 上可能出现短暂的数字不准或计数丢失(边缘节点各自写、后写覆盖)。这是架构特性,不是 bug,知道就好。
部署教程
整体流程:建 KV → 建 R2 → 建 Worker → 贴代码 → 绑 KV / R2 → 配管理员密码。
第 1 步:创建 KV 命名空间
进入 Cloudflare 控制台,创建一个 KV 命名空间(用来存云盘的配置、分享信息等轻量数据),名字随意。

第 2 步:创建 R2 存储桶
再创建一个 R2 存储桶(R2 是 Cloudflare 的对象存储,用来实际存你的文件),名字随意。

第 3 步:创建 Workers 应用程序
进入 Workers & Pages,创建一个 Workers 应用程序。

第 4 步:从 Hello World 开始
创建 Worker 时,选择从 Hello World 模板开始,先建一个空的 Worker 项目(后面要替换它的代码)。

第 5 步:复制项目代码
EdgeStash 的核心逻辑在项目仓库的 worker.js 里。打开下面地址,复制里面的完整代码:
https://github.com/hhy-2021/EdgeStash/blob/main/worker.js

第 6 步:粘贴代码并部署
回到刚建的 Worker,点 编辑代码,把默认的 Hello World 代码全部替换成刚复制的 worker.js 内容,然后点 部署。

第 7 步:配置 KV / R2 绑定与环境变量
返回 Worker 的概览页面,点 设置 → 变量和机密,进入配置页。

在这里配置下面三样东西:
配置 KV 绑定:
变量名称:
KV_STOREKV 命名空间:选择第 1 步创建的那个

配置 R2 绑定:
变量名称:
R2_BUCKETR2 存储桶:选择第 2 步创建的那个

配置环境变量:
ADMIN_PASSWORD:设置你的管理员登录密码

配置完后,记得重新部署让绑定和变量生效。
为什么要"重新部署"才算数? 因为绑定(binding)不是配置文件里的静态设置,而是在 Worker 启动时注入到运行环境里的。Worker 实例已经在跑了,你不重启它,它手里的环境变量还是老的那份。所以"改完就重新部署"这一步不是仪式,而是必需的。如果你遇到"配置明明填了却报未定义"的情况,第一件事就是重新部署。
关于
ADMIN_PASSWORD的一个提醒:它是放在环境变量里的。在 Cloudflare 控制台里,环境变量有两种——普通变量(明文可回看)和 Secret(机密,写入后不可再读取)。管理员密码建议用 Secret 类型,避免它被以明文展示在配置页面上。这类小细节,恰恰是自建服务最容易疏忽的地方。
访问
1. 直接访问
配置好之后,用 Worker 默认的地址就能直接访问云盘了。

2. 绑定自定义域名(推荐)
默认的 workers.dev 地址不方便记忆和分享,建议绑定自定义域名,用起来更顺手。

已知小 bug 与排错
管理员登录点"登录"没反应
这是个已知小 bug。解决办法:切换到用户登录标签,把用户登录里的"邮箱"输入框内容清空,然后重新进行管理员登录即可。
访问报错 / 文件上传失败
确认
KV_STORE、R2_BUCKET绑定名和值都对(和代码里一致),并已重新部署。确认 R2 已绑定信用卡、额度充足(免费 10G)。
它和你已有的"免费存储"怎么分工
Cloudflare 这套免费资源很丰富,容易搞混"该用哪个"。简单对一下:
本篇的 R2 + Workers —— 适合"私有文件库":需要权限控制、带密码分享、在线预览文档。本质是"你能管住谁能访问"。
EdgeOne Pages 这类静态托管 —— 适合"公开的图片 / 静态资源":比如搭一个支持外链的相册,图片挂上去就是公开可访问的 URL。本质是"谁都能看"。
判断标准很简单:这份文件需不需要"只有指定的人能拿到"? 需要 → 用本篇的 R2 云盘;不需要(就想当个图床)→ 用静态托管那套更省事。后者我写过专门一篇搭建教程,感兴趣可以对照看看 用 EdgeOne Pages 搭建支持外链的免费相册。
如果你的 Cloudflare 账号刚注册,或者还不清楚"到底有哪些免费服务可以白嫖",建议先看一遍总体盘点:Cloudflare 免费服务终极白嫖指南,里面把这些资源的关系和额度限制列全了,看完再决定先搭哪个,心里会更有数。
我的结论
EdgeStash 这套方案,用 Cloudflare 的 Workers + R2 + KV 拼出了一个功能完整的私有云盘——带密码分享、文档在线预览、后台用户管理、下载量统计,该有的都有,而且不用自己买服务器,对个人或小团队内部用来说非常合适。
它最需要你提前想清楚的就是那个前提:R2 只有 10G 免费额度、且要绑卡。但补上另一半事实之后,这个方案其实比"10G"听起来更划算——出站流量免费,意味着分享不花一分钱。所以它的定位是"内部工具",不是"对外大容量公共网盘"。如果你只是需要给团队、给朋友分享一些文档,或者做自己的私密文件库,10G 完全够用,性价比很高。
如果你想要一个属于自己的云盘、又不想为它单独租服务器,EdgeStash 值得一试,按上面的步骤半小时内就能搭好。