Nodes / MDX交互 · 公式 · 可视化

从源码到边缘:基于 GitHub 与 Cloudflare Workers 的全自动持续交付

摒弃沉重的动态服务器与数据库,解析 Maplen 的静态技术路线选型、Git 源码资产沉淀,以及基于 Cloudflare Workers 静态资产网络的全自动持续交付流水线

专栏 · Maplen

在搭建一个个人网站时,很多作者都会陷入一种常见的「运维内耗」:

租一台云服务器,装上 Linux、Nginx、MySQL 和 PHP,部署一套 WordPress 或自建后端;接着每隔几个月就要应付一次数据库升级、修复未知的安全补丁、配置即将过期的 SSL 证书;甚至当有一篇文章偶然迎来较大访问量时,服务器的内存和 CPU 还会直接报警宕机。

在搭建 Maplen 之初,我就明确了一个原则:我希望把所有精力倾注在思考、写作与工程验证本身,而不是把时间浪费在服务器运维上。

一个真正具备生命力的数字花园,应当能够承受得起时间的洗刷——即使十年、二十年过去,内容依然完整无损,不需要维护任何复杂的后台服务,依然能以最快速度呈现在读者眼前。

这篇手记阐述 Maplen 的技术路线选型逻辑,以及我是如何通过 GitHub 源码沉淀 与 Cloudflare Workers 静态资产网络持续交付(CD),实现这套零运维、全自动流水线的。


一、技术路线选型:为什么选择「纯静态优先 + Cloudflare Workers」

在架构设计中,每一个技术决策都是对现实约束的权衡。Maplen 的技术路线遵循三个核心判断:

1. 为什么坚决拒绝动态后端与数据库?

  • 零安全维护负担:没有数据库,就意味着从根本上杜绝了 SQL 注入攻击;没有动态后端守护进程,就不存在进程崩溃、内存泄漏或端口暴露的风险;
  • 内容资产的永久存活性:保存在数据库二进制表里的文章极其脆弱;而用 Markdown (.md) 与 MDX (.mdx) 编写的纯文本,在任何操作系统、任何编辑器下都能随时阅读,天生具备抵抗技术周期更迭的能力;
  • 确定性的极致速度:动态页面每一次访问都需要耗费 CPU 进行模板拼装和数据库查表;而纯静态页面在被请求的瞬间,文件就已经完整生成并常驻于内存缓存,响应时间只取决于物理网络时延。

2. 为什么选择 Astro 作为静态基座?

在现有的静态生成器中,许多现代前端框架(如 Next.js、Nuxt)倾向于将整站渲染为一个庞大的单页应用(SPA),即使是一篇纯文本随笔,首屏也需要加载数百 KB 的 JavaScript 运行时进行全量水合。

Astro 的「默认零 JS(Zero-JS by Default)」理念与 Maplen 的「纸墨质感」不谋而合:

  • 渲染出的所有常规文章均为 100% 纯净语义的 HTML 与 CSS;
  • 只有当文章需要呈现诸如阻尼振子模拟、微处理器状态机或函数图表时,才通过 client:visible 按需激活微小的 React 孤岛(Islands),兼得极致的文字阅读体验与富交互表现力。

3. 为什么选择 Cloudflare Workers 静态资产托管(Workers Static Assets)?

传统的静态托管(如自购 VPS 挂载 Nginx)依然摆脱不了单点机房的地理限制,国内访问快的节点国外慢,反之亦然,且带宽成本昂贵。

而 Cloudflare 推出的 Workers 静态资产模式(Workers Static Assets) 代表了现代无服务器边缘架构的最新演进:

  • 静态请求完全免费且不限流量:静态页面与资源直接由 Cloudflare 全球 300 多个城市的 Anycast 边缘网络无损吐出,没有任何流量账单焦虑;
  • 原生边缘运行时集成:通过 wrangler.jsonc 声明,既享有纯静态秒开的确定性,又在底层预留了未来按需接入边缘轻量计算(如边缘鉴权或动态重定向)的延展空间;
  • 开箱即用的高阶网络特性:全自动配置 HTTP/3、最新 TLS 证书与自动路径斜杠规整,省去所有反向代理的繁琐调优。

二、使用 GitHub 保存:把 Git 作为唯一的真实数据源

在 Maplen 的架构中,没有独立的后台管理系统(CMS)。Git 版本控制系统,就是整座站点唯一的真实数据源(Single Source of Truth)。

1. 写作即编码,思想即提交

  • 无论是随笔(Notes)、纪事(Narrative),还是硬核的工程手记(Nodes),每一篇文章都与网站的主题样式、排版插件受同一套 Git 仓库统一管理;
  • 每一次观点的推敲、段落的重构、甚至是一处错别字的勘误,都会生成一次清晰的 git commit;
  • 借助 Git 的历史日志与 Diff 比对,我可以精确追溯任何一个概念在数月或数年间的认识演进轨迹。

2. 本地验证与远程同步

日常写作与调试的流程极其自然:

# 1. 本地启动实时热重载开发服务
npm run dev

# 2. 随时运行静态编译与编码健康检查
npm run build:pages

# 3. 确认无误后,提交并推送到 GitHub 远程仓库
git add .
git commit -m "feat: 发布全新的持续交付工程手记"
git push origin main

代码推送到 GitHub 远程仓库后,GitHub 不仅充当了高可靠的云端异地灾备节点,更重要的是,它将作为自动化流水线的起点,触发后续的整个部署流程。


三、持续交付到 Cloudflare Workers:从代码推送至边缘上线

当本地执行完 git push origin main 之后,剩下的所有事情全部由机器自动化完成。

架构图
正在绘制图表…
图 1:从本地 Git 提交、GitHub 远程托管到 Cloudflare Workers 边缘网络的全自动持续交付(CD)流水线。

整个持续交付流水线主要由以下环节紧密咬合:

1. Workers Builds 自动化监听

Cloudflare Workers Builds 深度集成到项目 GitHub 仓库。只要 main 生产分支接收到新的 Push 提交,Cloudflare 会立刻捕获 Webhook 通知,在云端拉起一个独立的沙箱构建容器。

2. 构建与部署命令配置

在 Cloudflare Workers 控制台中,构建流程配置极其清爽:

  • 构建命令(Build command):npm run build:pages(负责文本编码健康校验与 Astro 全量静态编译);
  • 部署命令(Deploy command):npx wrangler deploy(将生成的静态产物一键推向 Workers Assets 边缘网络);
  • 环境变量:指定现代运行时环境,例如 NODE_VERSION = 22 与主站域名 PUBLIC_SITE_URL = https://maplen.top。

3. 构建侦听过滤与构建缓存优化

为了不浪费云端构建配额,并提升部署速度,流水线加入了针对性的调优:

  • 路径侦听过滤(Build Watch Paths):将触发范围限定在代码与文章核心目录,自动排除 README.md 与内部设计文档的变更。纯文档修改不会触发徒劳的线上部署;
  • 构建缓存(Build Cache):开启云端构建缓存后,Cloudflare 会在多轮构建之间持久化复用包管理器与编译中间缓存,将后续的构建耗时压缩至极短。

4. 自定义域名接入与全自动证书

产物发布后:

  • 在 Worker 的 Custom Domains 中绑定独立域名 maplen.top;
  • Cloudflare 全球 DNS 会自动接管流量路由,现代 TLS 证书的申请、续期完全自动化;
  • 全球各地的读者发起访问时,流量均被最近的边缘数据中心承接,在数毫秒内完成响应。

四、极简架构带来的从容

回顾整套工程实现:

  • 没有常驻的 Linux 虚拟主机与后台进程;
  • 没有需要备份和维护的脆弱数据库;
  • 没有需要每季度手动续期的 SSL 证书;
  • 没有复杂的第三方发布平台或 CMS 依赖。

从在键盘上敲下 Markdown 文字,到通过 Git 提交,再到 Cloudflare Workers 将其推向全球边缘,整个流程如行云流水般自然。

这种高度自洽且克制的工程设计,让技术彻底回归为创作的坚实后盾——无论何时打开电脑,我只需专注于文字与代码本身,而世界彼端的读者,则能在毫秒之间,翻开这页安静的纸墨。