Monolith 是一套运行在 Cloudflare 全球边缘网络上的现代化博客系统,前后端通过适配器模式解耦,零运维即可获得全球 < 50ms 的访问延迟。
设计哲学:内容优先 · 边缘原生 · 沉浸式阅读 · 一切皆可控制台配置。
- 沉浸式编辑器 — Markdown + 实时预览,KaTeX 数学公式,代码高亮一键复制
- 多平台导入 — 一键迁移 WordPress / Ghost / Hexo / Hugo / Jekyll / Halo
- 内容编排 — 草稿、定时发布、置顶、系列合集、独立页动态导航
- 日/夜双主题 — 亮暗两套完整 token 对齐 GitHub "浅色/深色 - 默认"(
@primer/primitives),蓝色链接与 focus ring、官方语法高亮配色、六色 GitHub 风格标签 - 站点级主题管控 — 明暗模式 × 视觉风格(简洁 / 液态玻璃)由控制台统一设置,支持跟随系统,首屏 cookie 防闪烁
- 文章导航 — 自动 TOC、阅读进度条、IntersectionObserver 章节追踪
- ⌘K 全站搜索 — 防抖检索、键盘导航、关键词高亮
- Reaction 表情 — 文末轻互动,无需登录即可表态
行为配置全部进 D1 设置键值,控制台改完即生效(最长 15 秒),不再依赖重部署:
| 配置面 | 能力 |
|---|---|
| 安全防护 | 登录页 Cloudflare Turnstile 人机验证、JWT 会话时长(1/7/30 天)、登录/友链/留言速率限制 |
| 通知与集成 | Webhook 目标(多地址 + 一键测试)、Resend 邮件收发件人 |
| 主题外观 | 明暗模式、视觉风格,即时预览 |
| 发现与注入 | 片段化代码注入:位置/作用域/同意策略独立控制,常用统计服务预设模板,旧数据一键迁移 |
| 搜索优化 | robots.txt 追加规则(白名单校验)、sitemap 归档开关与额外 URL(自动去重)、站点域名 |
| AE 采集 | 访客统计开关、站点白名单(主域自动匹配子域) |
- 边缘原生 — Hono + Cloudflare Workers,无冷启动,全球 < 50ms
- 存储适配 — 数据库 D1 / Turso / PostgreSQL,对象存储 R2 / S3 兼容
- 轻量交付 — Pages 上传 2.2MB / 97 个文件(旧格式字体经
.assetsignore裁剪),PWA 离线可用 - 访客分析 — 内置 D1 轻量统计;Cloudflare 部署额外解锁 Analytics Engine 增强仪表板(UV/停留时长/浏览器/系统/分辨率/语言)
- 认证与防护 — JWT + Turnstile 人机验证 + 可调限流,CSP/HSTS 全套头,SSRF 拦截
- 平台安全线 — GitHub secret scanning + push protection、CodeQL extended 查询集、CI Gitleaks 全历史扫描(含 AI 密钥等非提供商模式自定义规则)
- 隐私优先 — Cookie 同意横幅,第三方脚本按片段门控,GDPR 数据导出
- 多端备份 — JSON / R2-S3 / WebDAV 自由切换
- SEO 友好 — sitemap、RSS 2.0、JSON-LD、OG/Twitter Card
- 数据洞察 — 浏览量、14 日趋势、热门 Top 10
┌──────────────────────────────────────────┐
│ Cloudflare Edge │
│ (200+ PoPs · global anycast) │
└──────────────────────────────────────────┘
│
┌─────────────────────────────────┼──────────────────┐
▼ ▼ ▼
┌──────────────────┐ ┌──────────────────┐ ┌──────────────┐
│ Cloudflare │ /api/* │ Cloudflare │ │ Cloudflare │
│ Pages │ ─────────▶ │ Workers │ │ R2 / S3 │
│ React 19 SPA │ 反向代理 │ Hono Router │ │ 媒体 / 备份 │
│ + PWA │ │ Auth · Admin │ └──────────────┘
│ Pages Functions │ │ Storage Factory │
└──────────────────┘ │ D1/Turso/PG │
│ R2/S3 │
└──────────────────┘
分层职责
| 层级 | 模块 | 关键路径 |
|---|---|---|
| 边缘网络 | Cloudflare 全球 anycast | 200+ PoPs · 自动 TLS · DDoS 防护 |
| 前端 | React SPA + Pages Functions | client/src · client/functions |
| 后端 | Hono Workers + Storage Factory | server/src/index.ts · server/src/storage |
| 持久层 | D1 / Turso / PostgreSQL · R2 / S3 | server/src/storage/db · server/src/storage/object |
关键设计决策
- 适配器模式 —
IDatabase/IObjectStorage统一接口,切换后端零侵入 - 配置分层 — 行为配置进 D1 settings(控制台管理);Workers secret 只放凭据与基础设施拓扑
- Pages Functions 反向代理 — 前端域名直连
/api/*,规避 CORS 复杂度 - Drizzle ORM — 所有 SQL 参数化,Schema 一处定义、三端同步
- Monorepo 单脚本部署 —
npm run deploy:cloudflare串起迁移 → Workers → Pages 全链路
详细架构与设计决策参阅 Wiki · 架构概览。
git clone https://github.com/one-ea/Monolith.git && cd Monolith
source "$HOME/.nvm/nvm.sh" # bash/zsh 按需加载 nvm
nvm install && nvm use
npm ci
npm run doctor:local
npm run dev完整环境准备、密钥配置与本地数据库初始化参阅 Wiki · 快速开始。
npx wrangler login # 首次部署一次即可
npm run deploy:cloudflare # 远程迁移 → Workers → API_BASE 注入 → Pages生产 secret 已存在而本地无明文时,请改走不覆盖 secret 的分步部署链路,业务密钥全程不被触碰。
| 方案 | 状态 | 适用场景 |
|---|---|---|
本机 CLI npm run deploy:cloudflare |
✅ 生产验证 | 首次部署推荐 |
| 不覆盖 secret 分步链路 | ✅ 生产验证 | 已上线站点日常更新 |
GitHub Actions Cloudflare Deploy |
✅ 生产验证(含部署后自动健康检查) | 手动触发的一键 CI 部署 |
| 入口 | 内容 |
|---|---|
| Wiki · 部署指南 | 部署完整指南(速通 + 密钥清单 + 分步链路 + 排错) |
| Wiki · 控制台配置 | 控制台可配置项与 secret 边界总览 |
| Wiki | 架构、API、二次开发 |
| SECURITY.md | 安全策略与漏洞披露 |
| PRIVACY.md | 隐私政策 |
| LICENSE | MIT 开源协议 |
欢迎通过 Issue 反馈问题,或通过 Pull Request 贡献代码。提交前请阅读 Wiki · 贡献指南。
基于 MIT License 开源发布。
Crafted with ♡ on the edge.