跳到正文
CHUN折腾
全部项目
已跑通 2026-10-20

用 Astro + Cloudflare Pages 搭本站

折腾记录散在几个地方太难受,索性自己搭一个:Astro 出静态页,Cloudflare Pages 免费托管,push 到 GitHub 就自动部署。

开始
2026-10-20
结束
持续使用中
耗时
约 8 小时
花费
0 元
技术栈 AstroTailwind CSSMarkdownCloudflare PagesGitHub Actions

背景

折腾的东西越来越多,记录却散在几个地方:聊天记录里、临时 txt 里、脑子以为还记得的地方。 真正想回头查”当时那个端口冲突怎么解的”,得翻半天。

想要的东西其实很简单:

  • 一个自己的地方,域名自己说了算
  • 写东西就是写文件,别逼我开后台登录
  • 不花钱,或者一年只花域名的钱
  • 打开要快,手机上看也不难看

方案

对比了三类:

方案好处为什么没选
WordPress / 看图什么功能全、插件多要服务器、要维护、要防升级炸站
Hexo / Hugo生态成熟、主题多想改设计得跟主题打架
Astro 自己写布局完全自己控制、默认零 JS、构建 2 秒要自己写样式,但一次写完就完事

托管选 Cloudflare Pages:免费、无限带宽、自带 HTTPS、绑自定义域就是一条 CNAME。 部署方式从一开始的 wrangler 直传,换成了 GitHub → Pages 自动构建,因为”改完忘了发”这种事一定会发生。

过程

内容用 Astro 5 的 content collections,一个项目 = 一个 Markdown 文件,frontmatter 用 zod 校验:

title: 用 Astro + Cloudflare Pages 搭本站
status: 已跑通        # 折腾中 / 已跑通 / 暂停 / 已废弃 / 翻车
stack: [Astro, Tailwind CSS]
tags: [建站, Cloudflare]

写错字段名会在构建期直接报错,不会悄悄不显示——这一点比什么都省心。

发布链路最后长这样:

本地写 md → git push → Cloudflare 拉代码 → npm run build → 发布到 w.wanyc.xyz

Pages 那边的配置就三行:构建命令 npm run build、输出目录 dist、生产分支 main。

踩坑

现象原因解法
加完自定义域一直”待验证”,DNS 里也没有记录授权 wrangler 的 OAuth 令牌没有 DNS 写权限,Pages 没自动建记录手动加一条 w CNAME 指向 chun-2wh.pages.dev,橙云开启
深色模式刷新闪白一瞬等 JS 读完主题再切,晚于首屏渲染在 <head> 里同步执行一段内联脚本改 class
卡片缺封面图时出现空洞不想给每条都找图按 id 哈希生成渐变底色 + 大字母,永不空缺
GitHub 上推送时卡在授权22 端口被拒、GCM 的 OAuth 页面按钮不可点改用 SSH over 443(ssh.github.com:443)
首页置顶项目和”最近”重复两个区块都从同一个列表取取最近时排除已置顶的

结果

跑通了,就是你现在看的这一页。

  • 44 个页面,构建 2 秒内
  • 首屏零 JS,单页 HTML+CSS 不到 60KB
  • 费用:托管 0 元,域名是原本就有的
  • 发布体验:改一个 md,git push,一分钟内线上生效

值不值:值。写记录的阻力从”打开某个 App”降到”新建一个文件”,这才是能坚持下去的关键。

更新日志

  1. 首版上线,首页 / 项目 / 笔记 / 标签 / 关于齐活。
  2. 绑定 w.wanyc.xyz,Cloudflare 自动签发证书。
  3. 接上 GitHub,push 到 main 自动构建部署。
  4. 接入 Cloudflare Web Analytics(无 Cookie)。