把写作留在 Obsidian,把发布交给 Gobog

把写作留在 Obsidian,把发布交给 Gobog

一篇文章往往从一条笔记开始:调试时记下的命令、读书时留下的问题,或者终于弄明白一个概念后的几段解释。写作已经发生在 Obsidian 里,发表时却还要切换编辑器、重新上传图片、调整排版。积累越多,这些重复动作就越容易让文章停在草稿里。

我希望有一条更顺手的路:继续用熟悉的 Markdown 写作,准备好了再发表;零散笔记和成体系的文章可以放在同一处,各自保留清楚的边界。Gobog 和它的 Obsidian 插件,就是围绕这件事搭建的一套个人博客管线。

一份 Markdown,从笔记走到网页

写作源头是 Obsidian 中的 blog 文件夹。文章放进 post/,独立页面放进 pages/,图片集中放进 resource/image/。文章内容同步到私有 GitHub 仓库,公开站点则由 GitHub Actions 调用 Go 编写的 Gobog 渲染,再交给 GitHub Pages 展示。

这意味着文章的源文件始终在自己手里:可以离线修改,可以用 Git 查看版本,也可以换编辑器继续写。网站的 HTML 从这些源文件生成,主题与内容各自维护。需要更新排版时,修改主题并重新构建即可。

Obsidian 里常用的 双向链接 和 图片嵌入 也能接上网站渲染。笔记之间的关联可以随文章一起走出去;尚未公开的目标不会被自动展开成一篇公开文章。

发表,是一个明确的动作

新文章默认是草稿。同步到私有仓库,只是在保存与备份内容。真正准备发表时,修改文章开头的 YAML 属性:

draft: false
publish: true
hidden: false
private: false

然后在插件里执行推送。GitHub Actions 会过滤可发表内容,渲染页面、检查内部链接和资源,再建立 Pagefind 搜索索引并部署网站。插件可以显示部署状态,帮助区分“源文件已经推送”和“网站已经更新”。

这条边界尤其适合喜欢随手记、慢慢改的人。半成品不需要搬到另一套工具里,写作与发表又各自有一个清楚的时刻。

一个文件,控制一个系列

有时候需要暂时收起的不是单篇文章,而是一整个主题:准备重写的学习笔记、尚未整理完的教程,或者暂时不适合公开的系列。

在那个目录中放一篇 _folder.md:

---
hidden: true
---

这个目录及所有子目录便会从下一次成功构建的公开网站中移除。文章页面、分组、标签、归档、订阅和 sitemap 都使用同一份过滤后的索引,文章独占的图片也不会因为“顺手复制整个附件目录”而被发布。恢复时改回 hidden: false,原有文章属性和永久链接仍然保留。

插件还提供了隐藏、显示当前笔记所在文件夹的命令。写作者面对的是一个可读、可修改、可版本管理的控制文件,无须逐篇切换几十个开关。父目录隐藏时,子目录不能自行恢复公开,这让系列的发表边界容易理解。

这里的“隐藏”控制当前网站展示。已经发表过的内容仍可能保留在 Git 历史、缓存或搜索引擎中,不能把它当成撤销过去公开记录的工具。

写作细节,也有位置

文章可以保留固定 URL,重命名和移动文件时不会轻易丢失过去的链接。标签、置顶、系列顺序、封面和 AI 参与标记放在 front matter 中,随文章一起维护。网站有归档、Atom 订阅、搜索,以及六种可切换主题。

本地预览使用实际 Gobog 渲染器,能够查看草稿和隐藏文章的排版,再通过仅本机可访问的 HTTP 服务打开页面。完整搜索索引由线上工作流生成。网站部署前会检查内部链接;错误 YAML 和冲突路由会明确阻止构建,方便在问题进入网站之前修正。

这些能力的共同目的,是把重复的发布工作收进工具里,让作者把注意力放回正文。

给想长期写下去的人

这套方案适合已经在 Obsidian 中积累 Markdown,又希望拥有个人网站的写作者。它依然需要配置 GitHub 权限、插件和构建流程,也需要作者对公开内容负责;它提供的是一条可追踪、可维护的路径。

我喜欢它的一点,是每天只需要面对熟悉的笔记。一个问题可以先写成草稿,一组笔记可以逐渐长成系列,准备好的内容再走向自己的域名。

如果你也想把知识库里那些反复打磨的文字,慢慢变成一个可阅读、可搜索、可订阅的个人博客,可以从这些项目开始:

让笔记继续生长,也给准备好的文章一个公开的去处。