用 Astro 和 Cloudflare Pages 搭一个不要钱的博客

从零到上线,把静态博客的构建、部署、域名三件事讲清楚,顺手对比一下几种免费方案。

Updated 2026-11-032 min read
#Astro#Cloudflare#教程

静态博客的部署成本这两年已经降到接近零。这篇文章记录我自己的选择过程,以及踩过的坑。

为什么是静态站

动态博客(WordPress 之类的)需要一个一直在跑的服务进程和数据库。静态站则只有 HTML/CSS/JS 文件,任何 CDN 都能托管,天然带三个好处:

  1. 便宜 —— 文件放 CDN 上,免费额度通常够个人博客用很久
  2. 快 —— 没有服务端渲染,直接命中边缘节点缓存
  3. 安全 —— 没有数据库、没有后台登录入口,也没什么可被黑的东西

代价是「动态功能」要另想办法:评论、搜索、点赞都得靠第三方服务或者构建期预生成。

几种免费托管的对比

平台 免费额度 构建 我的评价
Cloudflare Pages 无限请求,500 次构建/月 支持,或本地直传 边缘节点多,国内访问相对友好
GitHub Pages 1 GB 站点,100 GB/月流量 Actions 生态最成熟,但国内速度一般
Netlify 100 GB/月流量 支持 体验好,函数额度也大方
Vercel 100 GB/月流量 支持 前端起家的平台,Hobby 套餐不允许商用

我最后选 Cloudflare Pages,原因很简单:请求数不计量。图片多的博客最怕的就是流量账单,这一项直接归零。

构建流程

整个流程只有三步,本地跑就行:

# 1. 装依赖
npm install

# 2. 构建,产物在 dist/
npm run build

# 3. 上传
npx wrangler pages deploy dist --project-name jrzblog

第一次运行 wrangler 会打开浏览器让你授权登录 Cloudflare 账号,授权一次之后本地会留下凭证。

如果不想在本地保存凭证,也可以用 API Token: 设置环境变量 CLOUDFLARE_API_TOKEN 和 CLOUDFLARE_ACCOUNT_ID,适合放在 CI 里用。

关于域名

<项目名>.pages.dev 是免费送的,比如这个博客就在 jrzblog.pages.dev。想用自己的域名也很简单:

  1. 把域名的 NS 记录指向 Cloudflare(免费套餐就行)
  2. Pages 项目 → Custom domains → 添加你的域名
  3. 证书是自动签发的,等几分钟生效

绑了自有域名之后,记得把 src/consts.ts 里的 url 改掉,RSS 和 sitemap 里的绝对链接才会正确。

一个小提醒

Cloudflare Pages 免费版单次部署最多 20,000 个文件。纯文字博客怎么都够了,但如果你打算往博客里塞几千张没压缩的原图,很快就撞上限 —— 用图床,或者构建时转成 WebP。

代码托管、构建、CDN、证书,全加起来一个月 0 元。这套东西放在十年前是不可想象的。