Edge Notes 部署教程:免费搭建端到端加密私人笔记,Cloudflare Workers + D1 + R2 一键部署

Edge Notes 部署教程:免费搭建端到端加密私人笔记,Cloudflare Workers + D1 + R2 一键部署
luoli前言
每天写的笔记都放在哪里?Notion 太慢?Obsidian 要配置?有道云笔记收费?
今天推荐一个完全免费、零运行成本、真正的端到端加密私人笔记应用——Edge Notes。
它部署在 Cloudflare 的全球边缘网络上,数据存于 Cloudflare D1 数据库,图片存于 R2 对象存储——所有组件都是 Cloudflare 免费额度内,完全没有额外费用。更重要的是,笔记在浏览器本地加密后上传,服务端只存储密文,连云平台本身都无法读取你的内容。
- 项目地址:https://github.com/love-ztm/cf-edge-notes
- 开源协议:MIT
功能一览
Edge Notes 的功能之丰富,远超一个”简单笔记”的范畴:
核心功能
| 功能 | 说明 |
|---|---|
| 🔒 端到端加密 | 浏览器本地 AES-GCM + PBKDF2 加密,服务端只存密文 |
| 🗂️ 多密码多 vault 隔离 | 不同密码登录,进入独立数据仓库,彼此完全隔离 |
| 🔍 全文搜索 | 支持标题和正文关键词实时搜索 |
| 📌 笔记置顶 | 重要笔记一键置顶,始终显示在最前 |
| 🏷️ 标签管理 | 创建自定义标签并设置颜色,侧边栏按标签筛选 |
| 🖼️ 图片上传 | 编辑器内粘贴、拖拽上传图片,加密存储到 R2 |
| 🔗 笔记分享 | 生成公开分享链接,支持设置过期时间,随时撤销 |
| 📤 导出 | 单条导出 Markdown,全部导出 JSON 或 Markdown |
WebDAV 备份与恢复
| 功能 | 说明 |
|---|---|
| ☁️ WebDAV 备份 | 一键备份到 WebDAV 服务器 |
| 🔄 定时自动备份 | 可设置 1h / 6h / 12h / 24h 备份间隔 |
| 📂 备份文件管理 | 按日期命名,支持保留份数设置 |
| ⬇️ 从备份恢复 | 浏览并选择历史备份进行恢复 |
| 📥 本地导入 | 支持从本地文件导入备份 |
其他功能
- 🗑️ 回收站 — 删除笔记进入回收站,可恢复,支持永久删除和定时清理
- 🌙 深色/浅色主题 — 一键切换,自动跟随系统偏好
- 📱 PWA 支持 — 手机可添加到主屏幕,像原生应用一样使用
- ⚡ 全球边缘加速 — 基于 Cloudflare Workers,全球节点就近响应
技术架构
Edge Notes 的技术栈非常现代和轻量:
| 层级 | 技术 | 说明 |
|---|---|---|
| 运行时 | Cloudflare Workers (V8 Isolates) | 全球 300+ 节点边缘执行 |
| 数据库 | Cloudflare D1 (SQLite) | 免费 5GB 存储空间 |
| 对象存储 | Cloudflare R2 | 免费 10GB 图片存储,无出口流量费 |
| 加密 | Web Crypto API (AES-GCM + PBKDF2) | 浏览器端原生加密 |
| 前端 | 原生 HTML/CSS/JS | 无框架依赖,极小体积 |
| 定时任务 | Cloudflare Cron Triggers | 每日凌晨定时清理 |
整个项目由 TypeScript 编写,采用纯前端 + 无框架的开发方式——Worker 直接返回 HTML 单页应用,没有 SSR,没有构建步骤,部署就是代码本身。
部署方式一:一键部署(推荐)
最简单的方式是通过 Cloudflare 的一键部署按钮:
点击按钮后:
- 授权 Cloudflare 访问你的 GitHub
- 选择你的 Cloudflare 账号
- Cloudflare 会自动创建 D1 数据库并部署 Worker
⚠️ 部署后必须配置 R2 Bucket
一键部署后,还需要在 Workers 设置中手动添加 R2 Bucket 绑定:
- 进入 Cloudflare Dashboard → Workers & Pages
- 选择刚部署的
cf-notesWorker - 进入 设置 → 变量
- 添加 R2 Bucket 绑定:
- 绑定名称:
IMAGES - Bucket:选择一个已创建的 R2 Bucket(如果没有,先在 R2 创建一个)
- 绑定名称:
⚠️ 必须设置安全密钥
进入 变量 → Secrets → 添加:
| Secret 名称 | 值 | 说明 |
|---|---|---|
APP_PASSWORD |
你的密码 | 默认 vault 密码,生产环境务必修改 |
COOKIE_SECRET |
32位以上随机字符串 | 会话签名密钥,不要泄露 |
可以通过 openssl rand -base64 32 生成随机密钥。
部署方式二:手动部署(完整控制)
如果你需要更多控制权,或者想让部署流程完全透明,手动部署是更好的选择。
前提条件
- 已安装 Node.js (≥18)
- 已安装 Wrangler CLI:
npm install -g wrangler - 已登录 Cloudflare:
npx wrangler login
第 1 步:Fork 项目并安装依赖
1 | # 先 Fork 到 GitHub,然后克隆到本地 |
第 2 步:创建 D1 数据库
1 | npx wrangler d1 create private-notes-db |
执行后会返回一个 database_id(UUID 格式),记住它,下一步需要用到。
第 3 步:创建 R2 Bucket
1 | npx wrangler r2 bucket create cf-notes-images |
第 4 步:配置 wrangler.jsonc
打开 wrangler.jsonc,修改以下字段:
1 | { |
第 5 步:执行数据库迁移
1 | npx wrangler d1 migrations apply DB --remote |
这会在 D1 中创建所有必要的表结构(notes、note_shares、tags、trash 等 10 个迁移文件)。
第 6 步:设置环境变量(Secrets)
1 | # 默认 vault 密码 |
| 变量 | 说明 | 是否必须 |
|---|---|---|
APP_PASSWORD |
默认 vault 密码 | ✅ 必须 |
COOKIE_SECRET |
会话签名密钥 | ✅ 必须 |
APP_PASSWORDS |
额外隔离 vault 密码,格式 id=password,id2=password2 |
可选 |
第 7 步:部署
1 | npm run deploy |
这会自动执行数据库迁移并部署 Worker。部署成功后,你会得到一个 *.workers.dev 地址,直接访问即可。
部署方式三:GitHub 自动部署
如果你想让代码更新自动触发部署,可以配置 GitHub 自动部署:
- 进入 Cloudflare Dashboard → Workers & Pages
- 点击 连接到 Git
- 授权 Cloudflare 访问你的 GitHub
- 选择 Fork 的
cf-edge-notes仓库 - 配置构建信息:
- 框架预设:None
- 构建命令:
npm run deploy - 构建输出目录:
dist
- 点击 保存并部署
以后每次 git push 到 main 分支,Cloudflare 会自动重新部署。
本地开发
如果需要本地调试,可以这样配置:
1 | # 复制开发配置模板 |
编辑 .dev.vars,设置本地密码:
1 | APP_PASSWORD=facker668 |
然后启动本地开发服务器:
1 | npx wrangler dev |
项目结构
1 | cf-edge-notes/ |
可以看到,整个项目极其精简——核心代码只有 3 个 TypeScript 文件,前端是纯 HTML/CSS/JS,没有任何前端框架依赖。
安全机制详解
Edge Notes 的安全性是其最大的亮点,它采用了三层防护:
1. 浏览器端加密(第一层)
笔记在浏览器本地使用 AES-GCM + PBKDF2 加密后,才通过 HTTPS 上传到服务器。服务端只存储密文,无法读取任何内容。即使 Cloudflare 的运维人员也无法查看你的笔记内容。
2. 认证与会话管理(第二层)
- Session Cookie 使用 HttpOnly + Secure + SameSite=Strict,防止 XSS 窃取
- 登录频率限制:5 次失败登录尝试后锁定 15 分钟
- HMAC 签名:会话使用 HMAC-SHA256 签名,防止篡改
- 会话有效期:30 天,超时自动过期
3. 多 Vault 隔离(第三层)
不同密码登录,进入完全不同的数据仓库——数据在数据库层面也是物理隔离的(vault_id 字段),不同 vault 之间的数据互不可见。
为什么安全?
- 密码不离开浏览器,云端只知道密码的 PBKDF2 哈希
- 笔记内容在浏览器端用 AES-GCM 加密,使用密码派生的密钥
- 即使数据库被泄露,攻击者拿到的也只是无法解密的密文
- 服务端没有能力解密任何内容——设计上就不可能
手机端使用
iPhone (Safari)
- 用 Safari 打开你的 Edge Notes 站点并登录
- 点击底部的分享按钮 → 添加到主屏幕
- 点击添加,即可在桌面上找到 Edge Notes
Android (Chrome)
- 用 Chrome 打开站点并登录
- 点击右上角菜单(三个点)
- 选择添加到主屏幕 / 安装应用
- 确认安装,即可在桌面使用
添加到主屏幕后,Edge Notes 会以全屏 PWA 应用的形式运行,体验与原生应用无异。
使用技巧
多 Vault 的玩法
Edge Notes 的多密码多 vault 隔离是一个非常有意思的功能:
- 工作密码 → 工作笔记(代码片段、技术文档)
- 生活密码 → 个人笔记(日记、想法、购物清单)
- 密码本 → 可以专门存密码(但建议用 Bitwarden,更安全)
每个 vault 之间的数据完全隔离,即使你忘了某个工作密码,也不影响生活笔记的使用。
笔记分享的正确姿势
当需要和朋友分享一段笔记时:
- 打开笔记 → 点击分享按钮
- 系统会生成一个公开链接(格式:
https://你的域名/share/xxx) - 可以设置过期时间(1天、1周、1个月等)
- 分享后随时可以撤销——撤销后链接立即失效
WebDAV 备份推荐配置
建议使用 Nextcloud 或 Seafile 的 WebDAV 服务作为备份目标:
- 备份间隔:24h(日常足够)
- 保留份数:7 份(一周历史)
- 配合 Cloudflare Cron Triggers(每日凌晨 3 点自动执行清理任务)
标签系统的用法
标签系统非常适合做知识分类:
#代码片段— 存放代码片段#读书笔记— 读书笔记和摘抄#灵感— 灵感和想法#待办— 待办事项
在侧边栏按标签筛选,可以快速定位到特定类别的笔记。
免费额度说明
Cloudflare Workers 免费额度:
| 资源 | 免费额度 | Edge Notes 消耗 |
|---|---|---|
| Workers 请求 | 10 万次/天 | 笔记操作极少,绰绰有余 |
| D1 数据库 | 5GB | 纯文本笔记,存几万字也才几 KB |
| R2 存储 | 10GB | 图片附件,够存几千张 |
| R2 出口流量 | 10GB/月 | 图片读取,个人使用完全足够 |
对于个人笔记用户来说,Cloudflare 的免费额度几乎不会用完。即使你每天写 10 条笔记、上传 20 张图片,一年的总消耗也远低于免费额度。
与竞品对比
| 功能 | Edge Notes | 有道云笔记 | Notion | Obsidian |
|---|---|---|---|---|
| 免费使用 | ✅ | ⚠️ 容量限制 | ✅ 个人免费 | ✅ |
| 端到端加密 | ✅ | ❌ | ❌ | ✅ |
| 零成本运行 | ✅ | ❌ | ❌ | ❌ |
| 数据私有 | ✅ 自有 | ❌ 第三方 | ❌ 第三方 | ✅ 本地 |
| 图片上传 | ✅ | ✅ | ✅ | ✅ |
| PWA 支持 | ✅ | ❌ | ❌ | ❌ |
| 笔记分享 | ✅ | ❌ | ❌ | ❌ |
| WebDAV 备份 | ✅ | ❌ | ❌ | ❌ |
| 全文搜索 | ✅ | ✅ | ✅ | ✅ |
| 标签系统 | ✅ | ✅ | ✅ | ✅ |
小结
Edge Notes 是一个被严重低估的项目——它用 Cloudflare 的免费基础设施,搭建了一个功能丰富、安全性极高的私人笔记应用。
它的核心价值在于:
- 真正的端到端加密——不是”数据安全”的承诺,而是代码层面的保证
- 零成本运行——Cloudflare 免费额度对个人使用绰绰有余
- 数据完全私有——不依赖任何第三方服务
- 功能远超预期——标签、分享、备份、PWA,该有的都有
如果你需要一个安全、免费、可控的私人笔记应用,Edge Notes 值得尝试。












