Memos Worker 是一个功能强大、性能卓越的无服务器笔记和知识库应用。它完全构建在 Cloudflare 的生态系统之上(Workers, Pages, D1, R2, KV),为你提供一个可以永久拥有、近乎零成本的私有化笔记解决方案。
- ✍️ Markdown 全功能支持: 支持实时预览、分栏编辑,并能从富文本智能粘贴为 Markdown。
- 🎛️ 灵活视图与工作流: 支持笔记的归档、收藏与置顶。提供宽屏、瀑布流、日期分组等多种视图模式。
- 📚 强大组织能力: 自动标签、全文搜索、时间线、日历和活动热力图。
- 🗂️ 文件与附件: 支持拖拽或粘贴上传图片(可存至 R2 或 Imgur)及各类文件附件。
- 🔗 公开分享: 可以为笔记中的任意 Memos 或文件生成唯一的公开访问链接,并支持设置过期时间。
- 🤖 Telegram 集成: 通过 Telegram Bot 随时随地记录文本、图片、视频和文件。
- 🎨 高度可定制: 支持浅色/深色主题、自定义主色调、背景图片、玻璃模糊效果,以及对布局和功能可见性的精细调整。
- 📃 知识库 (Docs): 独立的树状文档中心,适合构建结构化的知识体系。
- 🚀 极致性能与低成本: 基于 Cloudflare 全球网络,响应迅速,在免费套餐额度内几乎零成本运行。
你有两种方式来创建你自己的代码仓库,请根据你的需求选择其一。
- 优点: 你的仓库会与我们的原始仓库保持关联。当项目有新功能或修复时,你可以轻松地从 GitHub 同步这些更新。
- 缺点: 你的代码仓库是公开的。(由于关键信息通过环境变量配置,唯一暴露的是cloudflare的数据库、KV、R2的id,但通常也不会有什么事)
- 操作: 点击本页面右上角的 "Fork" 按钮。
- 优点: 你可以创建一个全新的、独立的、并且私有的代码仓库。
- 缺点: 你的仓库将与原始项目完全独立,无法自动或轻松地获取未来的更新。你需要手动通过 Git 命令来同步,过程较为复杂。
- 操作: 点击本页面右上角的 "Use this template" -> "Create a new repository"。
你需要在 Cloudflare Dashboard 中手动创建好项目所需的 D1 数据库、R2 存储桶和 KV 命名空间。
| 资源类型 | 推荐名称 | 绑定变量名 |
|---|---|---|
| D1 数据库 | notes-db |
DB |
| KV 命名空间 | notes-kv |
NOTES_KV |
| R2 存储桶 | notes-r2-bucket |
NOTES_R2_BUCKET |
-
创建 D1 数据库 (
notes-db):- 进入 Workers & Pages -> D1 -> Create database。
- 重要: 创建后,进入数据库控制台,将项目目录下的
schema.sql文件内容完整复制进去并执行。 - 重要: 记下database_id和database_name,写入
wrangler.toml文件的[[d1_databases]]部分。
-
创建 KV 命名空间 (
notes-kv):- 进入 Workers & Pages -> KV -> Create a namespace。
- 重要: 记下
id。将其填入wrangler.toml文件的[[kv_namespaces]]部分。
-
创建 R2 存储桶 (
notes-r2-bucket):- 进入 R2 -> Create bucket。
- 重要: 记下
bucket_name。将其填入wrangler.toml文件的[[r2_buckets]]部分。
- 进入 Cloudflare Dashboard -> Workers & Pages -> Create application -> 选择Workers -> 连接刚才创建的Git库。
- 选择你 Fork 的仓库,然后直接点击 Save and Deploy。
部署完成后,进入你创建的 Worker 项目进行配置。
-
进入项目 -> Settings,进入 Environment Variables,添加以下变量:
Variable Name Description USERNAME你的登录用户名 PASSWORD你的登录密码 TELEGRAM_BOT_TOKEN(可选) Telegram 机器人的 Token TELEGRAM_WEBHOOK_SECRET(可选) 一个随机长字符串用于 Webhook 验证 AUTHORIZED_TELEGRAM_IDS(可选) 授权使用机器人的 Telegram 用户 ID -
重新部署,让所有配置生效。
如果你配置了 Telegram 相关的变量,你需要一次性地激活 Webhook。
- 获取你的应用 URL (例如
https://your-project.pages.dev)。 - 在你的浏览器地址栏中,构造如下的 Webhook 激活链接:
https://api.telegram.org/bot<TELEGRAM_BOT_TOKEN>/setWebhook?url=https://your-project.pages.dev/api/telegram_webhook/<TELEGRAM_WEBHOOK_SECRET>&secret_token=<TELEGRAM_WEBHOOK_SECRET> - 替换链接中的
<TELEGRAM_BOT_TOKEN>和<TELEGRAM_WEBHOOK_SECRET>为你自己的真实密钥值。 - 按下回车。如果你看到
{"ok":true,"result":true,"description":"Webhook was set"}的返回信息,即代表设置成功!你现在可以给你的机器人发送消息了。
此外还可以直接使用wrangler,通过命令行部署(我使用的版本是^4.33.0)
- 克隆仓库到本地,把KV D1 R2的配置填入到wrangler.toml里面
- 执行
npx wrangler deploy
- 预览原始文件内容: 在主界面或公开分享页面,你可以右键点击任何基于文本的附件(如
.txt,.md,.json,.js),在新标签页中直接打开并预览其原始内容。 - 理解 'Telegram Proxy' 的作用: 这个在设置面板中的选项,用于控制如何处理从 Telegram 发送的视频和文件。
- 代理开启: 节省 R2 存储空间。你的应用会创建一个指向 Telegram 文件的“代理”链接。风险: 如果原始文件从 Telegram 被删除,你的链接将会失效。
- 代理关闭: 使用 R2 存储。你的应用会从 Telegram 下载文件并重新上传到你自己的 R2 桶中,以确保你拥有一个永久的副本。
- 理解 (Keep Time) 的作用: 在编辑笔记时,你会看到一个 "Keep Time" 的复选框。
- 勾选 (默认): 保存编辑后,笔记的原始时间戳将被保留,它不会跑到时间线的顶端。
- 不勾选: 保存后,笔记的时间戳会更新为当前时间,使其成为最新的笔记。
初始化本地数据库:
npx wrangler d1 execute YOUR_D1_NAME --local --file=./src/schema.sql启动开发服务器:
npx wrangler dev此模式将你的本地开发服务器连接到你在 Cloudflare 上创建的真实资源。
- 配置
wrangler.toml: 确保你在 Cloudflare Dashboard 中创建的资源 ID 已经填入此文件。# wrangler.toml [[d1_databases]] binding = "DB" database_name = "notes-db" database_id = "YOUR_D1_DATABASE_ID" # 替换 [[kv_namespaces]] binding = "NOTES_KV" id = "YOUR_KV_NAMESPACE_ID" # 替换 [[r2_buckets]] binding = "NOTES_R2_BUCKET" bucket_name = "notes-r2-bucket"
- 创建
.dev.vars文件: 在项目根目录创建此文件,用于存放你的本地密钥。# .dev.vars (此文件会被 Git 忽略) USERNAME="dev_user" PASSWORD="dev_password"
- 启动连接到云端的开发服务器:
npx wrangler dev --remote



