878 字
4 分钟
使用 Cloudflare Pages 自动部署 Astro 博客
背景说明
我之前的博客是部署在 GitHub Pages 上,上线本身没什么问题。
Xiao wen
mimimi
xiaowenmimimi.github.io
Blog
在重新搭建 Astro 博客时,我更想要一种省心一点的流程:代码 push 上去之后,自动构建、自动上线,出了问题也能直接看部署记录:
所以最终选择了 Cloudflare Pages 作为新的部署平台。
Cloudflare Pages
dash.cloudflare.com
Cloudflare
关于为什么选择 Cloudflare Pages
- 和 GitHub 仓库连起来很顺手,平时只要正常提交代码就能自动部署
- 访问速度稳定,并且免费额度对个人博客非常友好(免费真的是太棒了q(≧▽≦q))
最终效果
- 博客已经成功部署到 Cloudflare Pages
- 会先拿到一个默认的
*.pages.dev地址用来访问和测试:
- 后续日常更新也比较省心,正常
git push之后,它就会自己重新构建并上线
反正我图的就是一件事:push 完不用管。
一、前置条件
开始之前先确认这几样:
- 一个可以在本地成功运行
pnpm build(npm 使用npm run build命令) 的 Astro 项目 - 一个 GitHub 仓库(已 push 代码)
- 一个 Cloudflare 账号
相关文档Cloudflare Pages Functions 官网www.cloudflare.comCloudflareCloudflare Pages 官方文档developers.cloudflare.comCloudflare
二、Astro 项目配置
1. astro.config.mjs 文件配置
如果 使用 Cloudflare 提供的默认 *.pages.dev 域名,可以保持配置,在项目中找到 astro.config.mjs 文件,修改 site 配置:
import { defineConfig } from "astro/config";
export default defineConfig({ site: "https://your-project-name.pages.dev", ...});没想好域名就先空着。我习惯先把部署跑通,回头再补,不然一开始就卡在域名上。
2. 构建输出目录
Astro 默认的构建输出目录是: dist/
Cloudflare Pages 会直接使用该目录作为站点发布内容,无需额外配置。
三、在 Cloudflare Pages 创建项目
1. 创建 Pages 项目
- 在 Cloudflare 控制台
- 左侧菜单:Workers 和 Pages
- 创建应用程序

- 选择 Connect to Git,并授权 GitHub

- 选择底部的 Get started

2. 构建配置(关键步骤)
选择你的 Astro 博客仓库

在 Build settings 中填写以下内容:
配置项 推荐值 框架预设 Astro 构建命令 pnpm build构建输出目录 dist

Root directory 一般不用改,除非你把 Astro 项目放在子目录里。
3. 保存并首次部署
点击 保存并部署,Cloudflare Pages 会自动执行:
- 拉取 GitHub 仓库代码
- 安装依赖
- 执行构建命令
- 发布站点
部署完成后会拿到一个地址,类似:
成功判断标准:
- 能正常打开上述地址
- 首页样式与静态资源加载正常
- 刷新页面不会出现 404
四、日常更新流程
日常更新:
图表加载中...
成功判断标准:
- Cloudflare Pages 的 Deploy 状态显示为 Success
- 重新打开站点能看到你本次提交带来的改动
免费版限制
- Cloudflare Pages 免费版:每月 500 次构建
- 不过对个人博客来说通常绰绰有余啦
五、绑定独立域名(可选)
可以在博客稳定运行后再进行。
1. 添加自定义域名
路径:
打开需要配置的项目,进入设置页面,填写自定义域名

2. DNS 配置
我当时域名就在 Cloudflare,直接一键添加了 CNAME 记录,指向 your-project-name.pages.dev。如果域名在其他服务商,手动加一条就行。
HTTPS
- Cloudflare Pages 会自动签发 HTTPS 证书
- 无需手动申请或配置证书
使用 Cloudflare Pages 自动部署 Astro 博客
https://blog.xhwen.cn/posts/blog/astro-deploy-cloudflare-pages/
评论
文字让我们短暂相逢。