Featured image of post 如何从Obsidian部署Hugo

如何从Obsidian部署Hugo

将Obsidian中的内容发布到Hugo。

背景

由于历史原因,我的文章,文档,几乎所有的文本内容都存放在以下工具中:

  • Obsidian:目前的主力写作工具,几乎提供了所有我需要的功能,拥有良好的写作体验,数据存放在私有的GitLab仓库中
  • Outlne:Obsidian之前的工具,内容过多,没有全部迁移到Obsidian,数据存在PostgreSQL数据库中
  • Hugo:用于发布公开的文章到博客,数据存在私有的GitLab仓库

我想将所有的文本内容存放在一个地方,现在的做法是,Hugo仓库作为Obsidian仓库的一个submodule;这样做缺点很明显,Hugo中有许多资源文件,不应该出现在Obsidian中,对于搜索来说很不方便,而且每次都要提交两个仓库。

于是,我设计了一个新的方案,如图所示:

flowchart LR A(Obsidian) --1. commit--> B(GitLab Obsidian Repo) --2. GitLab CI/CD--> C(GitLab Hugo Repo) --3. mirror--> D(GitHub Private Repo) --4. build--> E(CloudFlare Pages)
  1. Obsidian写作完成,提交到GitLab
  2. Obsidian仓库通过CI/CD功能,将公开发表的文章,整合到Hugo仓库
  3. Hugo镜像到GitHub私有仓库
  4. CloudFlare从GitHub仓库构建Hugo博客,并发布到CloudFlare Pages

在该方案中,Hugo Repo只负责维护配置和页面,而文章内容来自于Obsidian。不要问我为什么搞这么复杂,详情可以查看关于写作和博客

难点

这个方案的难点主要是数据转换,体现在如下两点:

  • Obsidian中的文档和附件结构,需要转换到适合Hugo的结构
  • Obsidian文档中的图片和参考链接修改

迁移过程

  1. 将Hugo模版迁移到Obsidian,主要是修改和新增一些数据字段
  2. 迁移Hugo文章到Obsidian,并修改Front Matter中的字段,最后删除Hugo的content/posts下的子文件夹
  3. 为Obsidian仓库添加GitLab CI/CD,编写脚本自动修改Obsidian中的文章,并提交到Hugo仓库

最后

更新了该文章,提交一次Obsidian仓库,我的博客就自动更新了,体验非常丝滑。

使用 Hugo 构建
主题 StackJimmy 设计