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

前言

每天写的笔记都放在哪里?Notion 太慢?Obsidian 要配置?有道云笔记收费?

今天推荐一个完全免费、零运行成本、真正的端到端加密私人笔记应用——Edge Notes

它部署在 Cloudflare 的全球边缘网络上,数据存于 Cloudflare D1 数据库,图片存于 R2 对象存储——所有组件都是 Cloudflare 免费额度内,完全没有额外费用。更重要的是,笔记在浏览器本地加密后上传,服务端只存储密文,连云平台本身都无法读取你的内容


功能一览

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 的一键部署按钮:

Deploy to Cloudflare

点击按钮后:

  1. 授权 Cloudflare 访问你的 GitHub
  2. 选择你的 Cloudflare 账号
  3. Cloudflare 会自动创建 D1 数据库并部署 Worker

⚠️ 部署后必须配置 R2 Bucket

一键部署后,还需要在 Workers 设置中手动添加 R2 Bucket 绑定:

  1. 进入 Cloudflare Dashboard → Workers & Pages
  2. 选择刚部署的 cf-notes Worker
  3. 进入 设置变量
  4. 添加 R2 Bucket 绑定
    • 绑定名称IMAGES
    • Bucket:选择一个已创建的 R2 Bucket(如果没有,先在 R2 创建一个)

⚠️ 必须设置安全密钥

进入 变量Secrets添加

Secret 名称 说明
APP_PASSWORD 你的密码 默认 vault 密码,生产环境务必修改
COOKIE_SECRET 32位以上随机字符串 会话签名密钥,不要泄露

可以通过 openssl rand -base64 32 生成随机密钥。


部署方式二:手动部署(完整控制)

如果你需要更多控制权,或者想让部署流程完全透明,手动部署是更好的选择。

前提条件

  • 已安装 Node.js (≥18)
  • 已安装 Wrangler CLInpm install -g wrangler
  • 已登录 Cloudflare:npx wrangler login

第 1 步:Fork 项目并安装依赖

1
2
3
4
5
6
# 先 Fork 到 GitHub,然后克隆到本地
git clone https://github.com/love-ztm/cf-edge-notes.git
cd cf-edge-notes

# 安装依赖
npm install

第 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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
{
"name": "cf-notes",
"main": "src/index.ts",
"compatibility_date": "2026-04-14",
"d1_databases": [
{
"binding": "DB",
"database_name": "private-notes-db",
"database_id": "你上面创建的 database_id"
}
],
"r2_buckets": [
{
"binding": "IMAGES",
"bucket_name": "cf-notes-images"
}
],
"triggers": {
"crons": ["0 3 * * *"]
}
}

第 5 步:执行数据库迁移

1
npx wrangler d1 migrations apply DB --remote

这会在 D1 中创建所有必要的表结构(notes、note_shares、tags、trash 等 10 个迁移文件)。

第 6 步:设置环境变量(Secrets)

1
2
3
4
5
6
7
8
9
# 默认 vault 密码
npx wrangler secret put APP_PASSWORD

# 会话签名密钥(建议 32 字符以上随机字符串)
npx wrangler secret put COOKIE_SECRET

# 可选:多数据仓库密码
# 格式:vault_id=password,guest=another-password
npx wrangler secret put APP_PASSWORDS
变量 说明 是否必须
APP_PASSWORD 默认 vault 密码 ✅ 必须
COOKIE_SECRET 会话签名密钥 ✅ 必须
APP_PASSWORDS 额外隔离 vault 密码,格式 id=password,id2=password2 可选

第 7 步:部署

1
npm run deploy

这会自动执行数据库迁移并部署 Worker。部署成功后,你会得到一个 *.workers.dev 地址,直接访问即可。


部署方式三:GitHub 自动部署

如果你想让代码更新自动触发部署,可以配置 GitHub 自动部署:

  1. 进入 Cloudflare DashboardWorkers & Pages
  2. 点击 连接到 Git
  3. 授权 Cloudflare 访问你的 GitHub
  4. 选择 Fork 的 cf-edge-notes 仓库
  5. 配置构建信息:
    • 框架预设:None
    • 构建命令npm run deploy
    • 构建输出目录dist
  6. 点击 保存并部署

以后每次 git push 到 main 分支,Cloudflare 会自动重新部署。


本地开发

如果需要本地调试,可以这样配置:

1
2
# 复制开发配置模板
cp .dev.vars.example .dev.vars

编辑 .dev.vars,设置本地密码:

1
2
APP_PASSWORD=facker668
COOKIE_SECRET=change-this-to-a-long-random-string

然后启动本地开发服务器:

1
npx wrangler dev

项目结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
cf-edge-notes/
├── src/
│ ├── index.ts # Worker 入口 / API 路由 / 分享页面
│ ├── homeHtml.ts # 前端单页应用(HTML + CSS + JS)
│ └── auth.ts # 认证与会话管理
├── migrations/
│ ├── 0001_init.sql # notes 表初始化
│ ├── 0002_notes_fts.sql # 全文搜索索引
│ ├── 0003_app_meta.sql # 应用元数据表
│ ├── 0004_auth_rate_limits.sql # 登录频率限制
│ ├── 0005_note_vaults.sql # 多 vault 支持
│ ├── 0006_add_is_pinned.sql # 笔记置顶
│ ├── 0007_add_tags.sql # 标签系统
│ ├── 0008_add_trash.sql # 回收站
│ ├── 0009_add_images.sql # 图片上传
│ └── 0010_add_sharing.sql # 笔记分享
├── wrangler.jsonc # Cloudflare Workers 配置
├── .dev.vars.example # 本地开发环境变量模板
└── package.json

可以看到,整个项目极其精简——核心代码只有 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)

  1. 用 Safari 打开你的 Edge Notes 站点并登录
  2. 点击底部的分享按钮添加到主屏幕
  3. 点击添加,即可在桌面上找到 Edge Notes

Android (Chrome)

  1. 用 Chrome 打开站点并登录
  2. 点击右上角菜单(三个点)
  3. 选择添加到主屏幕 / 安装应用
  4. 确认安装,即可在桌面使用

添加到主屏幕后,Edge Notes 会以全屏 PWA 应用的形式运行,体验与原生应用无异。


使用技巧

多 Vault 的玩法

Edge Notes 的多密码多 vault 隔离是一个非常有意思的功能:

  • 工作密码 → 工作笔记(代码片段、技术文档)
  • 生活密码 → 个人笔记(日记、想法、购物清单)
  • 密码本 → 可以专门存密码(但建议用 Bitwarden,更安全)

每个 vault 之间的数据完全隔离,即使你忘了某个工作密码,也不影响生活笔记的使用。

笔记分享的正确姿势

当需要和朋友分享一段笔记时:

  1. 打开笔记 → 点击分享按钮
  2. 系统会生成一个公开链接(格式:https://你的域名/share/xxx
  3. 可以设置过期时间(1天、1周、1个月等)
  4. 分享后随时可以撤销——撤销后链接立即失效

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 的免费基础设施,搭建了一个功能丰富、安全性极高的私人笔记应用。

它的核心价值在于

  1. 真正的端到端加密——不是”数据安全”的承诺,而是代码层面的保证
  2. 零成本运行——Cloudflare 免费额度对个人使用绰绰有余
  3. 数据完全私有——不依赖任何第三方服务
  4. 功能远超预期——标签、分享、备份、PWA,该有的都有

如果你需要一个安全、免费、可控的私人笔记应用,Edge Notes 值得尝试。

👉 立即访问 GitHub 项目


参考资料

推荐链接