跳到主要内容

「cfmemos」—— 一个跑在 Cloudflare 上的自托管笔记

阅读需 2 分钟

开源地址:https://github.com/Brandon-LIs/cfmemos 在线体验:https://memos.oopss.top

为什么做这个

Memos 是我非常喜欢的一款自托管笔记工具——轻量、Markdown 原生、数据完全自持。于是我想:能不能用 Cloudflare 全家桶(Workers + D1 + KV + Assets) 把它 1:1 复刻一遍,让整个服务挂在 Cloudflare 的免费额度上,连服务器都不用买?

结果就是 cfmemos

它长什么样

  • 设计上直接移植了 Memos 官方前端的 OKLCH 设计令牌(暖白/石墨深色、可读性蓝主色、系统字体),左侧是固定的图标导航栏,中间是时间线,风格和 Memos 几乎一致。
  • 支持浅色/深色主题一键切换。

功能一览

  • 用户系统:注册 / 登录 / 退出,登录状态用 30 天 HttpOnly Cookie 保存;第一个注册的用户自动成为管理员
  • 说说(Memo):发布、编辑、删除、置顶;支持完整 Markdown(标题、加粗、列表、任务清单、代码块、引用、图片、链接、#标签)。
  • 可见性:发布时可选 公开 / 私密。公开的进入「广场」供所有人(包括未登录访客)浏览;私密的只有自己和 API 能看。
  • 唯一永久链接 + 评论:每条说说都有独立链接 https://memos.oopss.top/m/<id>,点进去可以看到详情和评论区,发布者和其他登录用户都可以评论。
  • 图片上传:复用 Brandon 的图床 admin.oopss.top/upload(无需登录,任意字段名),说说里的图片自动走 jsdelivr 镜像并带兜底。
  • 头像上传昵称修改生成 Memos 兼容的 API Key
  • API 文档页:内置在 /api-docs 专用 URL,接口表格 + 输出示例齐全。

技术栈(全部免费额度)

组件用途
Cloudflare Workers后端路由 + 静态资源托管
Cloudflare D1(SQLite)用户、说说、标签、评论数据
Cloudflare KV登录会话
Cloudflare Assets前端 SPA(原生 HTML/CSS/JS,零构建)
@cloudflare Pages/Workers部署(wrangler deploy

与 Memos 的 API 兼容

除了自带的前端,我还实现了 Memos v1 兼容的 REST API/api/v1):instance/profileauth/mesigninusersmemoscomments 等,返回结构与官方一致。这意味着官方 Memos 客户端/文档站可以直接对接这个实例。

部署

git clone https://github.com/Brandon-LIs/cfmemos.git && cd cfmemos
wrangler login
wrangler d1 create memos-cf-db # 把 database_id 填进 wrangler.toml
wrangler kv namespace create SESSIONS # 把 id 填进 wrangler.toml
npm run db:migrate # 应用 D1 迁移
wrangler deploy # 一键上线

第一个注册的账号就是管理员。

测试

内置了离线后端测试(模拟 D1 + KV,不需要真实账号):

node test/backend.test.mjs # 目前 41 个用例全绿

为什么用 Cloudflare 而不是 VPS

  • 零成本:全部跑在免费额度上。
  • 免运维:没有服务器要升级、打补丁。
  • 全球加速:Cloudflare 边缘节点就近响应。
  • 数据可控:D1 是标准的 SQLite 语义,随时可以导出。

如果你也喜欢"小而美"的笔记工具,欢迎去 GitHub 看看、点个 Star、提 Issue,或者直接 fork 一份自定义成你自己的版本。