banner
约 2,100 字
7 分钟

基于Cloudflare R2搭建免费云盘,支持带密码分享、查看下载量、管理用户等功能

摘要

EdgeStash 是一个完全构建在 Cloudflare 之上的私有云盘,利用 Workers、R2 存储与 KV,提供带密码分享、在线预览 docx/pdf、后台管理授权用户、查看文件浏览/下载量等功能。本文介绍创建 KV 与 R2、部署 Worker 并绑定变量、设置管理员密码的完整步骤,并提示 R2 免费额度 10G 且需绑卡,仅推荐个人或团队内部使用。

前言

想搭一个自己的私有云盘,很多人第一反应是买 NAS、租服务器。但其实如果你已经有 Cloudflare 账号,完全可以零服务器成本搭一个够用的云盘——靠的就是 Cloudflare 那一套免费基础设施。

EdgeStash 就是这样一个项目:功能强大、部署简单的私有云盘方案,完全构建在 Cloudflare 的全球网络之上。它用 Cloudflare Workers(运行)+ R2(文件存储)+ KV(元数据 / 配置存储),给你提供一个安全、快速、低成本的个人或团队文件存储与分享平台。

EdgeStash 云盘界面

它支持带密码分享文件、在线预览 docx / pdf 文档、后台管理授权用户、查看分享文件的浏览 / 下载量,功能相当全。项目地址:https://github.com/hhy-2021/EdgeStash

⚠️ 先说个前提,别等部署完才发现:R2 的免费额度只有 10G,而且需要绑定信用卡才能开通 R2。所以这个云盘我只推荐个人或团队内部使用,不适合当对外的大容量公共网盘。

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 命名空间(用来存云盘的配置、分享信息等轻量数据),名字随意。

创建 KV 命名空间

第 2 步:创建 R2 存储桶

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

创建 R2 存储桶

第 3 步:创建 Workers 应用程序

进入 Workers & Pages,创建一个 Workers 应用程序。

创建 Workers 应用程序

第 4 步:从 Hello World 开始

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

从 Hello World 模板创建 Worker

第 5 步:复制项目代码

EdgeStash 的核心逻辑在项目仓库的 worker.js 里。打开下面地址,复制里面的完整代码:

https://github.com/hhy-2021/EdgeStash/blob/main/worker.js

复制 EdgeStash 的 worker.js 代码

第 6 步:粘贴代码并部署

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

编辑 Worker 代码并部署

第 7 步:配置 KV / R2 绑定与环境变量

返回 Worker 的概览页面,点 设置 → 变量和机密,进入配置页。

进入 Worker 设置 → 变量和机密

在这里配置下面三样东西:

配置 KV 绑定:

  • 变量名称:KV_STORE

  • KV 命名空间:选择第 1 步创建的那个

配置 KV_STORE 绑定

配置 R2 绑定:

  • 变量名称:R2_BUCKET

  • R2 存储桶:选择第 2 步创建的那个

配置 R2_BUCKET 绑定

配置环境变量:

  • ADMIN_PASSWORD:设置你的管理员登录密码

配置 ADMIN_PASSWORD 环境变量

配置完后,记得重新部署让绑定和变量生效。

为什么要"重新部署"才算数? 因为绑定(binding)不是配置文件里的静态设置,而是在 Worker 启动时注入到运行环境里的。Worker 实例已经在跑了,你不重启它,它手里的环境变量还是老的那份。所以"改完就重新部署"这一步不是仪式,而是必需的。如果你遇到"配置明明填了却报未定义"的情况,第一件事就是重新部署。

关于 ADMIN_PASSWORD 的一个提醒:它是放在环境变量里的。在 Cloudflare 控制台里,环境变量有两种——普通变量(明文可回看)和 Secret(机密,写入后不可再读取)。管理员密码建议用 Secret 类型,避免它被以明文展示在配置页面上。这类小细节,恰恰是自建服务最容易疏忽的地方。

访问

1. 直接访问

配置好之后,用 Worker 默认的地址就能直接访问云盘了。

直接访问 EdgeStash 云盘

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 值得一试,按上面的步骤半小时内就能搭好。

END