最近重新规划了整套博客体系,从原来单一的主博客扩展为”主博客 + 4 个学科子博客 + 1 个 Wiki”的结构。这篇文章记录整体思路和关键实现步骤。
1. 主博客:flowwalker.top
主博客是我最早搭建的网站,使用 Hexo + anzhiyu 主题,部署在 GitHub Pages 上,绑定自定义域名 flowwalker.top。anzhiyu 主题功能比较丰富,目前包含:
- 文章归档、分类、标签
- 相册集
- 追番页
- 音乐页面(Taylor 音乐馆、随机乐音乐厅)
- 随笔(触景随谈)
- 友链
- TodoList
我主要负责维护主博客,核心定位是综合性的生活记录和技术杂谈。
2. 整体架构
随着课程笔记越来越多,把所有内容都堆在主博客里会变得混乱。于是把不同学科拆出来,形成独立的子博客:
每个子博客有独立的 URL、独立的主题配置,以后想单独公开或转让也方便。
flowwalker.github.io/ # 主博客
├── math-notes-blog/ # 数学博客
├── physics-notes-blog/ # 物理博客
├── coding-notes-blog/ # 编程博客
├── engineering-notes-blog/ # 工程笔记
└── flowwalker-wiki/ # 知识库
主博客的菜单里已经加了所有子站和 Wiki 的入口,形成一个整体的导航系统。
3. 子博客的技术实现
3.1 仓库结构
每个子博客采用两套仓库:
- Public 部署仓库:只存放生成的 HTML,用于 GitHub Pages 访问
- Private 源文件备份仓库:存放 Markdown 源文件、配置文件、主题等
我最后选择了 4 个 Public 部署仓库 + 1 个统一 Private 备份仓库 notes-source 的方案。这样只需要管理 5 个仓库,而不是 8 个。
3.2 本地目录
/Users/focus/Desktop/blog/notes/
├── hexo-dawn-template-main/ # 模板母版
├── math-notes-blog/
├── physics-notes-blog/
├── coding-notes-blog/
└── engineering-notes-blog/
3.3 主题配置
子博客使用朋友基于 Icarus 修改的 Dawn 主题。它本身已经做了比较干净的配置:
- 社交链接只保留 RSS
- Giscus 评论关闭
- 百度统计关闭
- 菜单:首页、归档、分类、标签
仅需修改每个子博客的 _config.yml:
title: 数学博客
subtitle: 数学物理方法 · 复变函数 · 概率论
url: https://flowwalker.github.io/math-notes-blog
root: /math-notes-blog/
deploy:
type: git
repo: git@github.com:flowwalker/math-notes-blog.git
branch: main
url 和 root 必须按仓库名设置,否则生成的链接会出错。因为 GitHub Pages 项目站的地址是 https://flowwalker.github.io/<仓库名>/。
注:数学博客现已迁移到 Vercel 部署,通过自定义域名 math.flowwalker.top 访问,
_config.yml相应改为url: https://math.flowwalker.top、root: /。
3.4 部署
安装 hexo-deployer-git 后,每个子博客用:
npx hexo clean && npx hexo generate && npx hexo deploy
3.5 一个坑:GitHub Pages 触发
首次在 GitHub 里开启 Pages 后,网站不会自动发布。必须在开启之后再推一次新提交,GitHub 才会触发构建。这个坑在子博客部署时浪费了不少时间,解决方式是推一个空提交:
cd .deploy_git && git commit --allow-empty -m "trigger" && git push
4. Wiki:Obsidian + Quartz的技术实现
4.1 为什么用 Wiki?
课程笔记里有很多概念需要互相引用。传统的博客按文章组织,很难表达这种网状关系。
此外最近上手Obsidian, 也想使用新工具进行创作
Obsidian + Quartz 组合正好解决这个问题:
- Obsidian 负责本地写作,支持
[[双向链接]] - Quartz 4 把 Obsidian 笔记转换成静态网站
- 发布到 GitHub Pages,支持搜索、反链、知识图谱
4.2 本地结构
~/Desktop/blog/wiki/
├── content/ # Obsidian Vault,也是 Quartz 的笔记目录
│ ├── index.md
│ └── ...
├── quartz.config.ts
├── quartz.layout.ts
└── .github/workflows/deploy.yml
关键:Obsidian 的 Vault 必须打开 wiki/content/ 这个文件夹,而不是 wiki/ 根目录。否则笔记会落在错误位置,发布不出去。
4.3 Quartz 配置
quartz.config.ts 主要修改:
pageTitle: "flowwalker 的知识库",
locale: "zh-CN",
baseUrl: "flowwalker.github.io/flowwalker-wiki",
analytics: null,
字体则通过 quartz/styles/custom.scss 覆盖:
:root:root {
--titleFont: "Comic Neue", ...;
--headerFont: "Comic Neue", ...;
--bodyFont: "Comic Neue", ...;
}
这里用 :root:root 提高优先级,覆盖 Quartz 在末尾追加的 :root 变量定义。
4.4 部署
Wiki 使用 GitHub Actions 自动构建:
- 在 Obsidian 里写笔记
git push到flowwalker/flowwalker-wiki- Actions 自动运行
npm ci和npx quartz build - 构建产物通过
actions/deploy-pages发布到 Pages
4.5 双向链接
在 Obsidian 里写:
[[傅里叶变换]] 在信号与系统中非常重要。
Quartz 会自动解析这个链接,生成对应的页面和关系图。这是 Wiki 相比普通博客最大的优势。
5. 来路方长
这次重构最主要做的是分清了三类内容:
主博客:综合、生活、随笔
子博客:按学科组织的课程笔记
Wiki:概念密集、需要互相链接的知识库或者经验经历
工具链上:
GitHub Pages 负责托管
Obsidian 和 Typora 负责写作
Hexo 负责博客
Quartz 负责 Wiki
下一步可能会为子博客配置评论,或者给 Wiki 增加更多笔记。