Obsidian 博客搭建
Obsidian 博客搭建
Obsidian 是一个非常好用的 Markdown 编辑工具,编辑体验非常接近 IDEA 之类的编程软件,而且 Obsidian 有巨大的插件生态,很多方便好用的功能社区都有插件可以直接支持,比如 Linter ,之前一直使用 Marktext ,切换到 Obsidian 之后体验提升巨大。
为什么选择 Obsidian Digital Garden
官方文档:Obsidian Digital Garden。文档写的非常通俗易懂也很简单直接照着来就行。
一开始是看过 obsidian 目前最完美的免费发布方案 渐进式教程 by oldwinter,但是这个方案有我无法接收的缺陷,即没有文件夹层级显示,而且默认不支持搜索,这是一个博客最基本的功能。然后这篇文章中提到的其他方案都差不多,然后就找到了 这篇博客,通过这篇博客,知道了 Obsidian Digital Garden。
Obsidian Digital Garden 的特点是非常的灵活,
- 他并不像其他方案一样把你本地仓库的所有目录都一股脑发布,而是通过文件的元数据来控制是否发布此文章,这个控制粒度是我所喜欢的,当然你也可以通过命令一次性将所有文档发布。
- 发布单个文件的时候,会把这个文件的所有层级的目录(注意,只有目录)和这篇文章一起发布到在线博客,而且还可以配置规则换个目录名,这样就可以把博客的目录结构跟本地仓库的目录结构解耦了,而且还可以将多个仓库的文章发布到一个博客,这样的灵活度,其他工具是没有的。
- 本地不需要保留完整的 Github 仓库,只需要在 Obsidian 中安装插件,然后执行发布命令即可,这个也是其他发布工具没有的,其他的发布工具必须在本地的 Git 仓库中的特定的目录下编辑博客,然后提及整个项目到 Github,但是 Obsidian Digital Garden 不需要,会直接将博客及其目录提交到 Github 的指定文件夹,这就让本地仓库不要为了增加发布功能而移动仓库位置,非常方便。
- 在 Obsidian 中执行发布命令之后,即可将文章提交到 Github,vercel 会自动根据仓库的最新内容重新发布。当我们将本地发布命令直接绑定到保存操作后自动触发(请看 Obsidian博客搭建#小优化),整个发布过程就非常顺滑毫无负担了。
- 博客支持搜索,
- 博客支持关系图谱
- 博客支持反向链接列表
- 博客支持引用内容预览,这个是基本功能。
Obsidian Digital Garden 也不是没有缺点的,就是默认的页面样式很丑,需要自己手动调 CSS。
自定义页面 CSS
首先进入 Fork 下来的 Github 项目主页,直接在 /src/site/styles/
下新建 user/mycss.scss
文件,然后编辑即可。
/src/site/styles/custom-style.scss
这个文件将来会被启用,不要使用
如何本地搭建
小优化
有一点要注意,vercel 个人用户每天的发布次数是有限制的,只有 100 次
因此最好不好改了就立即发布,这样会很浪费,最好是隔一段时间自动发布一次。因此我们可以通过 Cron
插件,下载完成之后记得关闭 Enable Obsidian Sync Checker
开关,因为我们没有使用 Obsidian Sync
开启这个会导致定时任务无法执行,然后再添加一个定时任务。
- name : 博客发布
- command : digitalgarden:publish-multiple-notes
- frenquency :
*/30 * * * *
,每 30 分钟提交一次
如果次数足够用,我们可以配置保存的时候提交 Github,触发发布:在 linter 插件配置的自定义
标签页下的自定义命令
部分,点击添加新命令按钮,选择Digital Garden: Publish Single Note
,这样就可以在保存文件的时候发布此文件了。
遇到的问题
DuplicatePermalinkOutputError
当我们把本地的 markdown 博客提交到 Github 的时候,工具会自动加上一个属性:permalink
,这个属性是根据这个博客在本地仓库的路径来的: 路径/文章名
,同时 Obsidian Digital Garden 插件有一个配置 Slugify Note URL
,这个配置的作用是将 路径/文章名
中的空格替换成 -
,但是一旦有中文,就无法识别,就会变成空,因此同一个路径下的博客可能就都变成 A//
,也是提及到 Github 的时候,这写博客的 permalink
就会相同,然后报错:DuplicatePermalinkOutputError。
博客创建时间和更新时间无法显示
图片无法加载
博客目前使用的是阿里云的图床,当时在使用阿里云图床的时候配置了防盗链,仅限特定的域名才能访问图片,因此我们需要将当前博客的地址添加到阿里云防盗链配置中: