基于Obsidian Digital Garden搭建个人博客完全实战指南

前言

你用 Obsidian 写了上百篇笔记,有些内容想分享出去。但一看传统博客方案——Hugo 要装 Go 环境、Hexo 要跑命令行、Notion 导出格式又乱七八糟——瞬间没了动力。

有没有一种方式,在 Obsidian 里写完笔记,点一下就发布到互联网上,不需要碰任何代码和命令行?

Digital Garden 就是这个方案。它是 Obsidian 的一个社区插件,让你的笔记直接变成一个带搜索、目录、关系图谱的静态博客站点。整个过程只需要点击,不需要写一行代码。

方案概览

什么是 Digital Garden

先说人话:Digital Garden 是一个 Obsidian 插件,把你的笔记推送到 GitHub,再由 Vercel 自动构建成网站。

你在 Obsidian 里给笔记加一个 dg-publish: true 的属性,执行发布命令,插件就会把笔记推到 GitHub 仓库。Vercel 检测到仓库变化后自动重新构建,几秒钟后网站就更新了。

技术架构

graph LR
    A[Obsidian] -->|插件推送笔记| B[GitHub 仓库]
    B -->|自动触发构建| C[Vercel]
    C -->|部署| D[你的博客站点]
    A -->|Apply Settings| B

整个链路:Obsidian 负责写作和发布,GitHub 做版本管理和存储,Vercel 做构建和托管。三者通过自动化串联,你只需要在 Obsidian 里操作。

与传统方案对比

方案 写作工具 部署方式 需要命令行 双链/图谱 上手难度
Digital Garden Obsidian 插件一键发布 不需要 原生支持
Hugo 任意编辑器 git push + CI 需要 不支持
Hexo 任意编辑器 hexo deploy 需要 不支持
Notion 导出 Notion 第三方工具 看方案 不支持

Digital Garden 最大的优势是:写作和发布在同一个工具里完成,且原生支持 Obsidian 的双链、图谱等特性。

前置准备

开始之前,你需要准备三样东西:

安装插件的方法:Obsidian → 设置 → 第三方插件 → 浏览 → 搜索 "Digital Garden" → 安装 → 启用。

部署模板

这一步使用官方提供的一键部署,不要手动 fork 仓库再导入 Vercel(后面踩坑记录会解释为什么)。

操作步骤

  1. 打开 Digital Garden 官方模板仓库:https://github.com/oleeskild/digitalgarden

  2. 点击 README 中的 "Deploy with Vercel" 按钮,或者直接访问:

https://vercel.com/new/clone?repository-url=https://github.com/oleeskild/digitalgarden
  1. Vercel 会引导你创建一个新的 GitHub 仓库(从模板 clone),给仓库起个名字,比如 digitalgarden

  2. 点击 Deploy,等待构建完成(大约 1 分钟)

  3. 部署成功后,你会看到一个默认页面,提示你还没有发布任何笔记。这是正常的。

记下 Vercel 分配的域名(类似 digitalgarden-xxx.vercel.app),后面要用。

配置 Obsidian 插件

生成 GitHub Token

  1. 访问 https://github.com/settings/tokens/new?scopes=repo

  2. 填写信息:

    • Note:digitalgarden(随意填写)
    • Expiration:建议选 No expiration
    • 确认 repo 权限已勾选
  3. 点击 Generate token

  4. 复制 token(只显示一次,务必保存好)

填写插件配置

打开 Obsidian → 设置 → Digital Garden,填写三个字段:

配置 Note Settings

在插件设置中找到 Note Settings,建议开启以下功能:

功能 说明 建议
Show filetree sidebar 左侧文件树导航 开启
Enable search 全文搜索 开启
Show Table of Contents 右侧目录 开启
Show backlinks 反向链接 开启
Show local graph 关系图谱 开启
Show inline title 页面显示标题 开启
Show tags 显示标签 开启
Home link 顶部导航栏 开启

配置 Appearance Settings

在 Appearance Settings 中可以选择主题。插件支持所有 Obsidian 社区主题,选择喜欢的主题后选择 dark 或 light 模式。

关闭 Slugify(中文用户必做)

在插件设置中找到 Slugify Note URL关掉它

默认的 slugify 会把中文字符全部去掉,导致文章 URL 变成空的或者只剩英文部分。关闭后,中文文件名会完整保留在 URL 中。

应用设置

以上配置完成后,点击 "Apply settings to site" 按钮。插件会把所有设置推送到 GitHub 仓库,Vercel 检测到变化后会自动重新构建。

发布笔记

创建首页

创建一个笔记作为博客首页(比如 Home.md),添加两个属性:

---
dg-publish: true
dg-home: true
---

在内容中可以用 Wikilink 链接到其他文章:

# Welcome to My Digital Garden

## Articles

- [[基于Kind搭建测试集群]]

发布文章

给想发布的笔记添加属性:

---
dg-publish: true
---

然后按 Cmd+P(Mac)或 Ctrl+P(Windows),搜索并执行 "Digital Garden: Publish Single Note"

插件会将笔记推送到 GitHub,Vercel 自动重新构建,通常几十秒后就能在网站上看到更新。

批量管理

Cmd+P,搜索 "Digital Garden: Publication Center",可以看到:

Digital Garden 支持 Obsidian 的 Wikilink 语法。在已发布的笔记中,[[笔记名]] 会自动渲染为可点击的内部链接。

如果链接目标笔记没有设置 dg-publish: true,访客点击后会看到"页面不存在"的提示。

自定义域名

默认的 Vercel 域名比较长,你可以绑定自己的域名。

Vercel 端配置

  1. 进入 Vercel → 你的项目 → SettingsDomains
  2. 在输入框中输入你的域名,比如 blog.example.com
  3. 点击 Add

DNS 端配置

去你的域名 DNS 服务商,添加一条 CNAME 记录:

主机记录 记录类型 记录值
blog CNAME cname.vercel-dns.com

如果是根域名(example.com),添加 A 记录:

主机记录 记录类型 记录值
@ A 76.76.21.21

等待生效

DNS 记录生效后(通常几分钟),Vercel 会自动签发 HTTPS 证书。之后就可以通过你的自定义域名访问博客了。

踩坑记录

以下是实际部署过程中踩过的坑,记录下来供参考。

坑1:手动导入 Vercel 导致环境变量覆盖

现象:插件设置里开启了 filetree、search、TOC 等功能,Apply settings 也点了,但网站上这些功能全部不显示。

原因:如果不使用官方的"Deploy with Vercel"按钮,而是手动 fork 仓库后在 Vercel 中导入,Vercel 会检测到仓库中的 .env 文件,弹出环境变量配置界面。如果直接跳过不填值,Vercel 会创建一批空值的环境变量。

Digital Garden 的构建代码使用 dotenv 库从 .env 文件读取配置。但 dotenv 的默认行为是不覆盖已存在的环境变量。Vercel 的空环境变量优先级高于 .env 文件,导致所有功能开关都读取到空字符串(等同于 false)。

解决方案

坑2:中文文件名被 Slugify 吃掉

现象:中文笔记发布后,URL 中只剩英文部分,中文字符全部消失。比如 基于Kind搭建测试集群 变成了 /kind/

原因:Digital Garden 默认开启 URL slugify,会把非 ASCII 字符全部去掉。

解决方案:在插件设置中找到 Slugify Note URL,关掉它。关闭后中文文件名会完整保留在 URL 中。

坑3:不要手动改仓库文件

现象:手动修改仓库中的 .envcustom-style.scss 等文件后,下次在 Obsidian 插件中点"Apply settings to site"或发布笔记时,手动修改的内容被覆盖。

原因:插件的"Apply settings to site"会将 Obsidian 中的配置状态完整推送到仓库的 .env 文件。插件是这些配置文件的唯一管理者。

解决方案:所有配置类操作都通过 Obsidian 插件界面完成,不要直接修改仓库中的配置文件。自定义 CSS 可以写在 src/site/styles/custom-style.scss 中,这个文件插件不会覆盖。

参考资料

资料 来源
Digital Garden 插件仓库 https://github.com/oleeskild/Obsidian-Digital-Garden
Digital Garden 模板仓库 https://github.com/oleeskild/digitalgarden
Digital Garden 官方文档 https://docs.forestry.md
Vercel 官网 https://vercel.com
GitHub Token 生成 https://github.com/settings/tokens/new?scopes=repo