基于 Memos 的 Cloudflare 部署方案,使用 Cloudflare Workers + D1 + R2 技术栈。
本项目基于 Allhuo/memos-cloudflare 的版本进行开发,其又是基于 vividmuse/memos-cloudflare 的早期版本进行开发。
原项目经测试,存在大量bug和功能缺失,在cursor帮助下,修复了已发现的bug,修补了官方memos提供的一些功能,尽量和memos原有功能对齐。
本人不懂编程,在使用本程序过程中发现的问题请自行解决。
原作者 Allhuo 和 @vividmuse ,一并致谢。
- 🚀 无服务器架构: Cloudflare Workers 全球边缘部署
- 🗄️ D1 数据库: 基于 SQLite 的分布式数据库
- 📁 R2 存储: 文件上传和存储支持
- 🔐 安全认证: JWT 身份验证系统
- 🌍 CORS 支持: 灵活的跨域配置
- 🎯 API 兼容: 与原版 Memos v0.24.x 兼容
git clone https://github.com/haitai/memos-cloudflare.git
cd memos-cloudflarecd backend
# 安装依赖
npm install
# 创建 D1 数据库
npx wrangler d1 create memos
# 创建 R2 存储桶
npx wrangler r2 bucket create memos-resources
# 复制配置文件并更新数据库 ID
cp wrangler.toml.example wrangler.toml
# 编辑 wrangler.toml,替换 YOUR_D1_DATABASE_ID 为实际的数据库 ID
# 初始化数据库
npx wrangler d1 execute memos --remote --file schema.sql
# 设置环境变量
npx wrangler secret put JWT_SECRET
# 输入: 随机生成的 JWT 密钥
npx wrangler secret put ALLOWED_ORIGINS
# 输入: https://your-frontend-domain.pages.dev,https://your-custom-domain.com
# 部署 Worker
npx wrangler deploy-
连接 GitHub 到 Cloudflare Pages
- 在 Cloudflare Dashboard 中创建 Pages 项目
- 连接你的 GitHub 仓库
-
配置构建设置
Framework preset: Vite Root directory: frontend Build command: pnpm install && pnpm build Build output directory: dist Node.js version: 18 -
设置环境变量
VITE_API_BASE_URL=https://your-worker-name.your-subdomain.workers.dev
- 用户名:
admin - 密码:
123456
| 变量 | 位置 | 说明 |
|---|---|---|
JWT_SECRET |
Worker Secrets | JWT 签名密钥,必须设置 |
ALLOWED_ORIGINS |
Worker Secrets | 允许的前端域名,逗号分隔 |
VITE_API_BASE_URL |
Pages Environment | 前端 API 地址 |
- 修改默认管理员密码
- 设置强 JWT_SECRET
- 配置正确的 ALLOWED_ORIGINS
- 将
wrangler.toml添加到.gitignore(如果包含敏感信息)
原因: CORS 配置问题
解决方案:
- 检查
ALLOWED_ORIGINS是否包含前端域名 - 确保域名格式正确(不包含末尾斜杠)
- 重新部署 Worker
# 重新设置 ALLOWED_ORIGINS
npx wrangler secret put ALLOWED_ORIGINS
# 输入正确的域名列表
# 重新部署
npx wrangler deploy解决方案:
# 检查数据库列表
npx wrangler d1 list
# 重新执行数据库迁移
npx wrangler d1 execute memos --remote --file schema.sql解决方案:
# 重新设置 JWT 密钥
npx wrangler secret put JWT_SECRET
# 使用 SHA-256 格式的密码哈希
npx wrangler d1 execute memos --remote --command "UPDATE user SET password = '8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92' WHERE username = 'admin'"memos-cloudflare/
├── backend/ # Cloudflare Worker 后端
│ ├── src/ # 源代码
│ ├── schema.sql # 数据库结构
│ ├── wrangler.toml # Worker 配置
│ └── wrangler.toml.example # 配置模板
├── frontend/ # React 前端
│ ├── src/ # 源代码
│ └── dist/ # 构建输出
└── .gitignore # Git 忽略规则
cd backend
npm install
npm run devcd frontend
pnpm install
pnpm devPOST /api/auth/signin- 用户登录POST /api/auth/signup- 用户注册(仅 HOST)
GET /api/memo- 获取笔记列表POST /api/memo- 创建笔记PATCH /api/memo/:id- 更新笔记DELETE /api/memo/:id- 删除笔记
GET /api/user/me- 获取当前用户PATCH /api/user/:id- 更新用户
GET /api/workspace/profile- 获取工作区配置GET /api/workspace/setting- 获取设置
基于原 Memos 项目,遵循 MIT 许可证。