从 0 到 1:我如何用 Astro + Cloudflare Pages 搭建个人博客


背景

我想搭一个长期可维护、成本低、发布简单的个人博客。目标很明确:

  • 纯静态
  • 免费优先
  • 能快速发布 Markdown 文章
  • 后续可扩展

最终我选择了 Astro + Cloudflare Pages

技术选型

为什么是 Astro

  • 内容驱动站点体验好,写作场景友好
  • 生成静态站点快,默认性能表现不错
  • 后续可以很自然扩展为作品集或文档站

为什么是 Cloudflare Pages

  • 直接连 GitHub,push 后自动部署
  • 免费额度对个人博客足够
  • 默认提供 *.pages.dev,不买域名也能用

实施过程

1. 本地初始化

我先创建 Astro 博客模板,然后安装依赖并启动本地预览。

npm install
npm run dev

在本地确认页面可访问后,再修改站点信息和文章内容。

2. 内容结构整理

我将文章放在 src/content/blog/,每篇文章用 Markdown,frontmatter 保留这几个字段:

  • title
  • description
  • pubDate
  • heroImage

这样在列表页和 SEO 上都更清晰。

3. 构建验证

发布前我会先执行一次:

npm run build

只要构建成功,说明静态产物可生成,线上失败概率会低很多。

4. GitHub + Cloudflare 自动部署

代码推送到 GitHub 后,Cloudflare Pages 自动拉取并构建发布。
发布链路很短:写文章 -> commit -> push -> 自动上线

踩坑记录

我遇到的关键问题是 Node 版本不匹配

  • 构建环境 Node 版本较低
  • Astro 版本要求更高
  • 导致构建阶段直接失败

解决思路:

  1. 看清构建日志里的 Node 版本和报错行
  2. 在 Pages 环境变量里设置合适的 NODE_VERSION
  3. 触发最新 commit 重新部署

成本与维护

目前我的实际成本接近 0:

  • 托管:免费
  • HTTPS:免费
  • 域名:暂时不买,使用 pages.dev

维护成本也很低:主要是持续写作,而不是运维。

下一步计划

  • 增加文章模板(技术分享 / 复盘)
  • 完善 About 页面
  • 逐步补充站点结构(归档、标签、系列文章)

如果你也在做第一个博客,我建议先把“可持续发布”跑通,再去打磨主题细节。