🐙 GitHub Pages 部署指南

GitHub Pages 是 GitHub 提供的静态站点托管服务。本文记录使用 GitHub Pages 部署 Quartz 站点的方案,以及与 Cloudflare Pages 的对比。

当前状态:本站未使用 GitHub Pages,改用 Cloudflare Pages(见 Cloudflare Pages 部署指南)。本文保留作为备选方案参考。

🎯 方案对比

对比项GitHub PagesCloudflare Pages
构建环境需要 GitHub Actions自带 CI
全球 CDN无默认开启
自定义域名支持,SSL 自动支持,SSL 自动
构建限制每周 10 次每月 500 次
输出目录仓库根或 docs/任意路径
国内访问慢快

🛠️ 1. GitHub Actions 部署流程

如果不使用 Cloudflare Pages,可以用 GitHub Actions 自动构建并部署到 GitHub Pages。

创建 workflow

在仓库根创建 .github/workflows/deploy.yaml:

name: Deploy Quartz site to GitHub Pages
 
on:
  push:
    branches: [main]
 
permissions:
  contents: read
  pages: write
  id-token: write
 
concurrency:
  group: pages
  cancel-in-progress: false
 
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0
 
      # 注:fetch-depth: 0 是为完整 git 历史。日期字段现已由 vault 源文件的
      # frontmatter 维护(Obsidian Linter 自动写入),构建不再读 git 时间,
      # 所以这个选项对构建结果无影响,保留只是无害。
 
      - name: Setup Node
        uses: actions/setup-node@v4
        with:
          node-version: ">=22"
 
      - name: Install dependencies
        run: cd .quartz && npm ci
 
      - name: Sync content
        run: node .scripts/sync-content.mjs
 
      - name: Build Quartz
        run: cd .quartz && npx quartz build -d content
 
      - name: Upload artifact
        uses: actions/upload-pages-artifact@v3
        with:
          path: .quartz/public
 
  deploy:
    environment:
      name: github-pages
      url: ${{ steps.deployment.outputs.page_url }}
    runs-on: ubuntu-latest
    needs: build
    steps:
      - name: Deploy to GitHub Pages
        id: deployment
        uses: actions/deploy-pages@v4

启用 GitHub Pages

  1. 仓库 → Settings → Pages
  2. Source 选择 GitHub Actions
  3. 推送 workflow 文件后自动触发首次构建

⚙️ 2. 关键配置

quartz.config.yaml

configuration:
  baseUrl: lihuohuo1988.github.io/NotebookAI  # GitHub Pages 子路径

GitHub Pages 托管在 https://<用户名>.github.io/<仓库名>/,所以 baseUrl 需要包含仓库名。

CNAME 自定义域名

如果使用自定义域名:

  1. 在 .quartz/static/ 目录放一个 CNAME 文件,内容是域名
  2. GitHub 自动配置 DNS 验证

⚠️ 3. 已知问题

  1. 无 CDN:国内访问 GitHub Pages 很慢
  2. 构建限制:每周 10 次构建,频繁更新容易超限
  3. 子路径问题:baseUrl 需要包含仓库名,路径解析容易出错
  4. SSL 证书:自定义域名首次配置需要等待证书签发

📦 4. 发布前置条件

构建命令依赖 vault 根的 .scripts/sync-content.mjs 把内容复制到
.quartz/content/。CI 里少这一步会构建出空站,所以 workflow 里必须:

- run: node .scripts/sync-content.mjs      # 在 vault 根执行
- run: cd .quartz && npx quartz build -d content

顺序不能颠倒,且 -d content 不能省。详细机制见 Quartz 5 配置指南。

🔗 5. 与 Quartz 的关联

本站使用 Quartz 5 生成静态站点,GitHub Pages 是备选部署方案。相关笔记:

关键配置

quartz.config.yaml 中影响部署的配置:

configuration:
  baseUrl: lihuohuo1988.github.io/NotebookAI  # GitHub Pages 子路径
  enableSPA: true      # ← 已开启;曾因误判的 404 问题设为false,现已修复
  ignorePatterns: []   # ← 刻意留空,发布范围由同步脚本决定
  fontOrigin: googleFonts  # ← 国内访问建议改 local

⚠️ 不要配置「自动补尾斜杠」的重写规则。Quartz v5.0.0 的资源前缀计算对带尾
斜杠的 URL 会少退一级,导致整页资源 404。这与 enableSPA 无关,详见
Cloudflare Pages 部署指南 末尾说明。

🔗 相关