[开源] Monolith — 一套跑在 Cloudflare 免费套餐上的高质感博客系统

纯 Cloudflare 全家桶(Workers + Pages + D1 + R2),零服务器成本运行一个带后台管理的完整博客,全球 CDN 加速,延迟 < 50ms。

在线预览https://monolith-client.pages.dev
GitHub 仓库https://github.com/one-ea/Monolith
协议:MIT


🤔 为什么又造了一个博客?

市面上的博客方案要么需要 VPS(Typecho、WordPress),要么只能生成静态页(Hexo、Hugo)没有后台管理,要么太重了(Notion API + Next.js)。

我就想要一个:

  • 不需要服务器 — 不想维护 VPS
  • 有完整后台 — 在线写文章、传图片、管评论
  • 跑在免费套餐上 — Cloudflare 的免费额度完全够个人博客
  • 好看 — 不是那种一眼就能看出是模板站的东西

所以就有了 Monolith。


✨ 有什么?

前台

  • 💎 深色主题 + 玻璃拟态,不是随便套了个 CSS 框架的感觉
  • 📝 Markdown 渲染(代码高亮 + 一键复制 + 目录 TOC + 阅读进度条)
  • 🔍 全站搜索(Ctrl+K / ⌘K 弹窗式搜索)
  • 📊 14 天访问趋势折线图(纯 SVG,零依赖)
  • 💬 评论系统(Honeypot 反垃圾 + 人工审核)
  • 📰 RSS 2.0 订阅 + sitemap.xml + robots.txt
  • 📱 完全响应式,手机端体验也不错

后台

  • 📊 仪表盘(文章统计 / 浏览量 / 热门排行)
  • ✏️ Markdown 编辑器 + 实时预览
  • 🖼️ 媒体库(图片上传到 R2,一键复制链接)
  • ⚙️ 站点设置(名称 / 描述 / 社交链接)
  • 💾 数据备份(JSON 导出 / R2 云端备份 / WebDAV 同步 / 备份恢复)
  • 📄 独立页管理(关于页、自定义页面等)
  • 💬 评论管理(审核 / 删除)

技术向

  • 前端:Vite + React 19 + TypeScript(SPA,构建产物 ~187KB gzip)
  • 后端:Hono + Cloudflare Workers(边缘计算,无冷启动)
  • 数据库:默认 Cloudflare D1(还支持 Turso / PostgreSQL,环境变量一切)
  • 存储:默认 Cloudflare R2(还支持 AWS S3 / B2 / 阿里 OSS / 腾讯 COS)
  • 代理:前端内置 Pages Functions 反向代理,零跨域问题

💰 成本?

资源 免费额度 个人博客实际用量
Workers 请求 10 万次/天 远远用不完
D1 数据库 5GB 存储 + 500 万行读/天 几百篇文章才几 MB
R2 存储 10GB + 100 万 Class B 操作/月 存图片绰绰有余
Pages 500 次构建/月 + 无限带宽 完全够

结论:个人使用 100% 免费。


🚀 部署有多快?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 1. 克隆
git clone https://github.com/one-ea/Monolith.git && cd Monolith

# 2. 装依赖
cd client && npm install && cd ../server && npm install

# 3. 创建 D1 数据库 + R2 Bucket
npx wrangler d1 create monolith-db
npx wrangler r2 bucket create monolith-assets

# 4. 设密钥(交互式输入)
cd server
npx wrangler secret put ADMIN_PASSWORD
npx wrangler secret put JWT_SECRET

# 5. 部署后端
npx wrangler d1 migrations apply monolith-db --remote
npx wrangler deploy

# 6. 部署前端
cd ../client && npm run build
npx wrangler pages deploy dist --project-name monolith-client --branch=master

# 完成!打开 https://monolith-client.pages.dev

从 clone 到上线,大概 5 分钟


🔌 可扩展性

不想用 Cloudflare? 存储层是适配器模式,环境变量切一下就行:

1
2
3
4
# wrangler.toml
[vars]
DB_PROVIDER = "turso" # 或 "postgres"
STORAGE_PROVIDER = "s3" # 或 保持 "r2"
数据库 对象存储
Cloudflare D1(默认) Cloudflare R2(默认)
Turso(LibSQL) AWS S3
PostgreSQL Backblaze B2
阿里云 OSS
腾讯云 COS

📚 文档

Wiki 写得比较详细:https://github.com/one-ea/Monolith/wiki