加载中

我的博客系统搭建记录:主博客、子博客与 Wiki

最近重新规划了整套博客体系,从原来单一的主博客扩展为”主博客 + 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

urlroot 必须按仓库名设置,否则生成的链接会出错。因为 GitHub Pages 项目站的地址是 https://flowwalker.github.io/<仓库名>/

注:数学博客现已迁移到 Vercel 部署,通过自定义域名 math.flowwalker.top 访问,_config.yml 相应改为 url: https://math.flowwalker.toproot: /

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 自动构建:

  1. 在 Obsidian 里写笔记
  2. git pushflowwalker/flowwalker-wiki
  3. Actions 自动运行 npm cinpx quartz build
  4. 构建产物通过 actions/deploy-pages 发布到 Pages

4.5 双向链接

在 Obsidian 里写:

[[傅里叶变换]] 在信号与系统中非常重要。

Quartz 会自动解析这个链接,生成对应的页面和关系图。这是 Wiki 相比普通博客最大的优势。

5. 来路方长

这次重构最主要做的是分清了三类内容:

  • 主博客:综合、生活、随笔

  • 子博客:按学科组织的课程笔记

  • Wiki:概念密集、需要互相链接的知识库或者经验经历


工具链上:

  • GitHub Pages 负责托管

  • ObsidianTypora 负责写作

  • Hexo 负责博客

  • Quartz 负责 Wiki


下一步可能会为子博客配置评论,或者给 Wiki 增加更多笔记。

本文作者:flowwalker之工巧Blog

本文链接:/engineering-notes-blog/posts/df65/

版权声明:本文采用 CC BY-NC-SA 4.0 许可协议