为什么这个网站存在?
学习任何新技术时一个长期存在的问题是:你在互联网上或从 AI 那里拿到的大多数文档和示例都过于琐碎,以至于你根本无法判断这项技术(或你对它的实现)是否能承受真实而复杂的工作负载。一个例子就是大量的待办清单(to-do list)示例。
我计划做一个基于若干技术假设的 SASS 项目;在尝试构建真正的项目之前,这些假设都需要先验证。而像这样的个人资料站点,由完整的 CMS 后端驱动,复杂度刚好足够,值得进行一次正式的生产级搭建,同时又足够简单,不会花太久时间拼起来;另外还有个好处:如果一切顺利,我会得到一个性能良好的资料站点,并且它会成为后续更多技术实验的良好试验场。
Cloudflare 作为部署目标
Cloudflare Workers https://workers.cloudflare.com/ 乍一看似乎是一种极其便宜的方式,用来部署复杂应用。后端开发看起来简单且稳健,而 OpenNext https://opennext.js.org/ 包也似乎提供了一种高效方式:用 Next.js https://nextjs.org/ 开发你的前端,并部署到 Cloudflare。
我怀疑这个网站不会吸引多少人类访问;不过,我会尽可能把更多的网页搜索与 AI 爬虫流量引到这里。这样,我应该就能算清在 Cloudflare 平台上运行一个繁忙网站的真实成本。
把这个网站做得比它应该的更复杂
内容管理后端(CMS)
说实话,以目前这个站点的状态,用一个编码代理在几小时内就能拼出来;但一个严肃的系统不应该为了修改基础内容就必须部署一次。因此,这个站点使用了一个完整的 CMS:基于 Payload CMS(https://payloadcms.com/),作为一个独立的 Cloudflare Worker 部署。
Payload 本身使用一个 SQL 数据库,而这个数据库又需要部署为 CloudFlare D1 SQLite 数据库实例 https://developers.cloudflare.com/d1/,并通过数据库迁移进行妥善管理,以支撑开发生命周期。
自动化翻译
本网站支持 20 种语言。鉴于网站本身只是 CMS 内容的一个简单脚手架,i18n 部分在开发期间由编码代理(Co-pilot 和 Claude Opus 4.5)来处理。
这就使得所有当前与未来的 CMS 内容,都需要在任何英文内容发生变更时自动进行翻译。
基于队列与 Cron 的 Worker
翻译需求需要一个相对复杂的流程,该流程:
- 将由 Cron 定时器触发。
- 识别任何需要新翻译的内容。
- 可靠地执行翻译。
- 可靠地从失败中恢复。
因此,会使用另一个 CloudFlare D1 实例来跟踪翻译工作,并使用 Cloudflare queues(https://developers.cloudflare.com/queues/),通过基于 cron 的生产者-消费者模式来管理与扩展任务。调用 OpenAI 的 gpt-5.2 API 来完成翻译,并由 AI.SDK https://ai-sdk.dev/ 将它们串联起来。
对这个网站来说,这有些大材小用;但任何生产系统(无论规模多大)都需要一种健壮的模式来编排后台处理。
这个网站的先前版本
我已经做过两次这个网站,把它当作学习新技术的工具:
2013 - 学习 Ruby 和 AWS
- Ruby on Rails v4.0.0。
- Bootstrap 样式 v3。
- 使用 CoffeeScript 构建 UI。
- Backbone Marionette VMC 前端模式。
- 部署在 AWS 主机上。
2017 - 学习 React
- 用于 UI 的 React v16.0.0。
- 用 Redux 和 Thunk 处理异步操作。
- 用于样式的 Semantic UI。
接下来是什么
网站已正确接入 SEO,需要以规律的节奏发布新内容来驱动爬虫流量。 我会发布更详细的文章,介绍所使用的各种技术与解决方案。
