长大ing← 全部文章

用 Astro 和 Cloudflare 搭一个自己的博客

从零到一个能访问的静态博客:Astro 负责生成,Cloudflare 负责分发。

这个博客就是这套流程的产物。没有数据库,没有服务器,也没有后台管理面板;文章是仓库里的 Markdown 文件,push 之后自动构建、自动上线。

为什么是静态站点

博客的内容在发布之后就很少变化,没必要每次访问都去查数据库、拼页面。构建时把 Markdown 一次性生成 HTML,之后所有访客拿到的都是现成文件——快,而且几乎没有被攻击的面。

需要动态能力时再补:评论用 Giscus,搜索用 Pagefind,统计用 Cloudflare Web Analytics。它们都不需要我维护一台服务器。

初始化

确保本机有 Node 22 和 pnpm,然后:

pnpm create astro@latest my-blog
cd my-blog
pnpm install
pnpm dev

打开 http://localhost:4321,能看到 Astro 的默认首页就说明环境没问题。

我删掉了模板自带的示例页面,只保留:

src/
├── components/
├── content/posts/
├── layouts/
├── pages/
└── styles/

写第一篇文章

在 src/content/posts/ 下新建一个 .md 文件,文件名就是 URL:

---
title: 第一篇文章
description: 一句话说明这篇文章写什么。
pubDate: 2026-11-06
tags: [日常]
draft: false
---

正文用 Markdown 写。Astro 的 Content Collections 会校验 frontmatter,字段写错时构建直接报错,不会等到线上才发现。

部署到 Cloudflare

把仓库推到 GitHub,然后在 Cloudflare 控制台:

  1. Workers & Pages → Create → Workers → Connect to Git;
  2. 选择仓库;
  3. 构建命令填 pnpm build,部署命令填 npx wrangler deploy;
  4. 环境变量加一个 NODE_VERSION=22。

首次部署会得到一个 *.workers.dev 地址。确认能打开后,在 Settings → Domains & Routes 里绑定自己的域名,证书由 Cloudflare 自动签发。

花了多少钱

0 元/月。静态请求和带宽不限量,构建次数每月 500 次,个人博客用不完。唯一固定支出是域名续费。

真正花时间的地方不是部署,是决定写什么、以及把一篇东西写完。