从零搭建这个个人博客:GitHub、Cloudflare Pages 与 R2 的实践记录

记录这个个人博客从能跑起来到适合长期写作的过程,也整理一下 GitHub、Cloudflare Pages、R2、Astro 和后台编辑体验之间的取舍。

这几天把个人博客从“能跑起来”慢慢整理到“真正能长期使用”的状态,过程中也重新想了一遍:个人博客到底需要什么。

我现在的答案比较简单:稳定、便宜、好写、好维护。

为什么选这套方案

这个博客现在主要由几部分组成:

  • Astro 负责生成静态页面
  • GitHub 保存文章和代码
  • Cloudflare Pages 负责部署
  • Cloudflare R2 存放图片
  • Pagefind 提供站内全文搜索
  • Leaflet 展示文章里的地理位置

这套组合最大的好处是足够轻。文章本质上还是 Markdown 文件,代码和内容都在 GitHub 里,哪怕以后换平台,也不会被某个后台系统锁死。

写博客体验比技术更重要

一开始我更关注部署、存储、自动化这些技术细节。但真正开始写文章之后,会发现后台编辑体验才是影响频率的关键。

如果每次写文章都要想 frontmatter 怎么填、图片怎么传、标签怎么写、发布日期会不会报错,那写作本身就被打断了。所以后台现在做了几件事:

  • 标题、正文、摘要、标签、封面都可以直接填写
  • 正文使用纯 Markdown 编辑,减少移动端切换和预览问题
  • 上传图片后直接放到 R2,并插入 Markdown 图片链接
  • 发布时间默认使用当前时间
  • 地理位置自动读取,不需要手动填写
  • 没写摘要时自动取正文第一段
  • 没写封面时自动取正文第一张图片

这些优化看起来都很小,但它们会让写作流程更接近“打开页面就写”。

免费套餐够不够用

对个人博客来说,目前这套免费额度已经足够。静态站点本身访问成本很低,图片放在 R2,搜索索引在构建时生成,不需要维护数据库,也不需要长期运行服务器。

真正需要注意的是部署链路不要重复触发。GitHub Action 和 Cloudflare Pages 如果都在每次提交后构建,就容易排队,也会增加排查成本。个人博客一天不会发布很多篇文章,部署逻辑越简单越好。

后面还想继续优化什么

接下来我更想把注意力放在阅读体验上,而不是继续堆功能。

比如:

  • 首页文章列表更清晰
  • 标签页更像真正的归档入口
  • 手机端写文章不要拥挤
  • 图片加载速度更稳定
  • 地图展示只在需要时加载

个人博客不需要像复杂 CMS 一样什么都有。它更像一个长期使用的工作台:打开要快,写作要顺,发布要稳,内容要能沉淀下来。

这次搭建过程也提醒我,技术方案只是底座,真正决定一个博客能不能坚持下去的,是写作体验。