
从 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 保留这几个字段:
titledescriptionpubDateheroImage
这样在列表页和 SEO 上都更清晰。
3. 构建验证
发布前我会先执行一次:
npm run build
只要构建成功,说明静态产物可生成,线上失败概率会低很多。
4. GitHub + Cloudflare 自动部署
代码推送到 GitHub 后,Cloudflare Pages 自动拉取并构建发布。
发布链路很短:写文章 -> commit -> push -> 自动上线。
踩坑记录
我遇到的关键问题是 Node 版本不匹配:
- 构建环境 Node 版本较低
- Astro 版本要求更高
- 导致构建阶段直接失败
解决思路:
- 看清构建日志里的 Node 版本和报错行
- 在 Pages 环境变量里设置合适的
NODE_VERSION - 触发最新 commit 重新部署
成本与维护
目前我的实际成本接近 0:
- 托管:免费
- HTTPS:免费
- 域名:暂时不买,使用
pages.dev
维护成本也很低:主要是持续写作,而不是运维。
下一步计划
- 增加文章模板(技术分享 / 复盘)
- 完善 About 页面
- 逐步补充站点结构(归档、标签、系列文章)
如果你也在做第一个博客,我建议先把“可持续发布”跑通,再去打磨主题细节。