前言

一直想拥有一个属于自己的博客站点,用来记录技术学习心得和项目经验。经过一番调研,最终选择了 Astro 作为静态站点生成器,配合 GitHub Pages 实现免费托管和自动部署。本文记录整个搭建过程。

为什么选择 Astro

Astro 是一个现代化的静态站点构建工具,有几个突出优势:

  • 零 JavaScript 输出:默认情况下,Astro 在构建时会将组件渲染为纯 HTML,不向客户端发送任何 JavaScript,页面加载极快。
  • 多框架支持:可以在同一个项目中使用 React、Vue、Svelte 等组件,按需引入。
  • 内容集合:内置的内容管理系统,支持 Markdown 和 MDX,非常适合博客场景。
  • 岛屿架构:交互式 UI 组件作为“岛屿”独立加载,不影响页面其余部分的静态渲染。

项目初始化

npm create astro@latest my-blog
cd my-blog
npm install

Astro 提供了交互式 CLI,可以选择模板、配置 TypeScript 等。初始化完成后,项目结构清晰:

my-blog/
├── src/
│   ├── content/    # 博客文章(Markdown)
│   ├── pages/      # 路由页面
│   ├── components/ # 可复用组件
│   └── layouts/    # 页面布局
├── public/         # 静态资源
└── astro.config.mjs

内容管理

博客文章存放在 src/content/blog/ 目录下,每篇文章是一个 Markdown 文件,顶部用 frontmatter 定义元数据:

---
title: '文章标题'
description: '文章摘要'
pubDate: '2024-01-15'
category: 'tech'
---

通过 Astro 的 getCollection API,几行代码就能实现文章列表和详情页。

部署到 GitHub Pages

配置 astro.config.mjs,设置 sitebase 选项后,配合 GitHub Actions 即可实现推送代码自动部署:

# .github/workflows/deploy.yml
name: Deploy
on:
  push:
    branches: [main]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: withastro/action@v2

总结

Astro 让静态博客的开发体验变得非常愉快。内容全部以 Markdown 管理,编辑即更新,无需关心数据库和服务器。加上 GitHub Pages 的免费托管,维护成本几乎为零。推荐给所有想搭建个人博客的开发者。