用 Quartz 搭建个人知识网站
这是一份基于 Quartz 的个人网站搭建实践:用 Obsidian 写作,用 Quartz 把 Markdown 笔记构建成静态网站,再通过 GitHub 和 Vercel 自动发布到公网。
适合想把个人笔记、项目文档、教程、读书笔记或数字花园发布出来的人参考。
整体流程
从写作到发布,大致分为五步:
-
在 Obsidian 中写作
先按自己的知识管理习惯自由记录,不必一开始就考虑发布格式。 -
整理可公开内容
将适合公开的文章移动到content/目录,并删除私人上下文、账号信息、未确认结论等内容。 -
补全文章元信息
为文章添加标题、描述、标签、发布日期,并在 Frontmatter 中设置publish: true。 -
提交到 GitHub 仓库
使用 Git 将内容提交并推送到远程仓库(git push -u origin main),GitHub 作为源码和版本管理中心。 -
由 Vercel 自动构建发布
Vercel 监听 GitHub 仓库变更,每次推送后自动运行 Quartz 构建命令,并将public/目录发布为网站。
flowchart LR A[Obsidian 写作] --> B[整理到 content 目录] B --> C[补全 Frontmatter] C --> D[Git 提交到 GitHub] D --> E[Vercel 自动构建] E --> F[公开网站]
工具清单
| 工具 | 作用 | 使用阶段 |
|---|---|---|
| Obsidian | 本地 Markdown 笔记编辑器,用于日常写作和知识管理。 | 写作 |
| Quartz | 将 Markdown 笔记转换为静态网站,支持双链、标签、搜索、关系图等数字花园能力。 | 构建 |
| Node.js / npm | 提供 Quartz 本地预览、依赖安装和构建所需的运行环境。 | 本地开发 / 构建 |
| Git | 记录内容和配置变更,方便版本管理和回滚。 | 版本管理 |
| GitHub | 托管 Quartz 项目仓库,作为 Vercel 自动部署的代码来源。 | 代码托管 |
| GitHub Actions | 可选,用于在推送后自动检查构建是否成功。 | 自动化检查 |
| Vercel | 托管静态网站,并在 GitHub 更新后自动部署。 | 网站托管 |
| Vercel Domains | 管理自定义域名,例如 notes.roammind.com。 | 域名绑定 |
| 华为云域名注册 | 注册和管理自有域名,例如 roammind.com。 | 域名 |
| 华为云云解析 DNS | 配置域名解析,将子域名指向 Vercel 或后续国内服务器/CDN。 | DNS |
| 华为云对象存储 OBS | 存放公开图片、附件等静态资源,减少仓库体积并方便后续迁移到国内访问链路。 | 图片/附件托管 |
| PicList | 图床和对象存储管理工具,可将图片上传到 OBS、GitHub、S3 等存储服务。 | 图片上传 |
| Obsidian Image Auto Upload Plugin | 在 Obsidian 粘贴图片后自动调用 PicGo/PicList 上传,并把本地图片链接替换为远程链接。 | 图片写作流 |
推荐目录结构
Quartz 默认把 content/ 作为公开内容目录。这个网站的核心内容也都放在这里。
content/
index.md # 网站首页
notes/ # 长青笔记、知识卡片
projects/ # 项目记录和实践教程
resources/ # 工具、链接、参考资料
assets/ # 少量需要随仓库管理的图片或附件
ops/ # 运行维护的相关文档
quartz.config.ts # Quartz 站点配置
quartz.layout.ts # 页面布局配置
vercel.json # Vercel 构建与部署配置首页建议承担“入口页”的作用,不必写成进度日志。更清晰的组织方式是:
- 首页:说明这个网站是什么、如何搭建、当前采用的技术路线。
- 项目页:记录 Quartz 建站规划、待办和踩坑。
- 检查清单页:沉淀发布前检查流程。
- 托管页:单独记录 Vercel、域名、DNS、OBS 等部署细节。
本地预览
首次安装依赖:
npm install本地构建并预览:
node quartz/bootstrap-cli.mjs build --serve默认预览地址通常是:
http://localhost:8080发布前建议至少本地预览一次,重点检查:
- 首页是否能打开。
- 双链、标签、目录是否正常。
- 图片是否能加载。
- 不该公开的内容是否已经删除。
sitemap.xml、robots.txt、index.xml等站点文件是否正常生成。
文章发布规范
每篇要公开的文章建议包含 Frontmatter:
---
title: 文章标题
description: 一句话说明这篇文章的内容
publish: true
date: 2026-06-11
tags:
- quartz
- 建站
---常用字段说明:
| 字段 | 作用 |
|---|---|
title | 页面标题,影响站内展示和搜索结果。 |
description | 页面摘要,适合写成一句清楚的话。 |
publish | 是否发布。公开文章设为 true。 |
date | 发布时间或最后整理日期。 |
tags | 文章标签,用于站内归类和发现。 |
更多说明可参考:Frontmatter。
图片处理策略
图片建议分两类处理:
-
少量关键图片
可以放在content/assets/中,随仓库一起管理,适合 logo、示意图、固定截图等。 -
大量文章配图
建议上传到对象存储,例如华为云 OBS,再在 Markdown 中引用远程图片链接,避免 Git 仓库过大。
推荐工作流:
flowchart LR A[在 Obsidian 粘贴图片] --> B[Image Auto Upload 插件触发上传] B --> C[PicList 处理上传] C --> D[华为云 OBS 存储图片] D --> E[Markdown 中写入远程图片链接] E --> F[Quartz 构建页面]
发布前需要确认图片链接是公开可访问的,否则部署成功后页面仍可能出现图片加载失败。
部署到 Vercel
推荐 Vercel 项目配置:
| 配置项 | 推荐值 |
|---|---|
| Framework Preset | Other |
| Root Directory | ./ |
| Install Command | npm ci |
| Build Command | node quartz/bootstrap-cli.mjs plugin install --from-config --concurrency 2 && node quartz/bootstrap-cli.mjs build |
| Output Directory | public |
如果仓库中已经配置了 vercel.json,Vercel 会优先读取其中的构建配置:
{
"cleanUrls": true,
"installCommand": "npm ci",
"buildCommand": "node quartz/bootstrap-cli.mjs plugin install --from-config --concurrency 2 && node quartz/bootstrap-cli.mjs build",
"outputDirectory": "public"
}部署成功后,Vercel 会先生成一个默认域名,例如:
https://obsidian-quartz-notes.vercel.app确认默认域名可以访问后,再绑定自定义域名。
自定义域名
以 notes.roammind.com 为例:
- 在 Vercel 项目中进入
Settings→Domains。 - 添加域名:
notes.roammind.com。 - 按 Vercel 提示到 DNS 服务商处添加 CNAME 记录。
- 在 Vercel 页面点击
Refresh,直到显示Valid Configuration。 - 访问
https://notes.roammind.com验证是否生效。
常见 DNS 配置示例:
| 类型 | 主机记录 | 记录值 |
|---|---|---|
| CNAME | notes | 以 Vercel 页面提示为准 |
如果后续迁移到国内托管,可以保持站点内容和 Quartz 构建流程不变,只切换 DNS 指向和静态资源托管方案。
相关页面
参考资料
- Quartz 官方文档
- Quartz GitHub 仓库
- Awesome Quartz我比较喜欢的模板如下:
- Welcome to Socratica 对应的源码:Socratica-Org/toolbox
- List of Patterns 清爽;侧边栏有目录,zenodotus280/apl
- Productivity 的订阅组件。
- Vercel 文档
- PicList 官网