网络还能怎么玩(六):基于Obsidian建立博客工作流(git)

技术提要

  • hexo-轻量级博客框架。
  • Obsidian-作为编辑器及发布工具。
  • git-用于博客与文章代码的版本管理。
  • docker-博客载体。

docker基本部署

因为hexo本身提供了hexo server作为服务启动,因此我们只需要将博客项目clone到容器内部,安装依赖并启动服务即可。

dockerfile
1
2
3
4
5
6
7
8
9
10
11
12
# 构建时执行
FROM node:latest
RUN npm install -g hexo-cli \
&& git clone https://你的项目git地址 \
&& cd 项目目录 \
&& npm install

# 启动时执行
CMD cd 项目目录 \
&& git pull \
&& hexo server -p 5000
# 之后将容器的5000端口映射到服务器指定端口即可访问

每当我们更新博客内容后,只需要上传git库并重启docker容器就会自动上线最新版本了。

Obsidian

一个基于markdown的知识库管理工具

Obsidian官网
容我先说一句,word真是一个非常难用的办公软件。
究其原因,我发现是它太自由了。我可以在白纸上随心所欲地排版,调整字体大小和位置。
但正因如此,我不得不将更多心思放在排版而不是我文章的实际内容上。
而markdown恰恰相反,瀑布流式书写,受限于约定好的格式,却也不必再为此花过多心思。

Obsidian在我看来,就是md编辑器里的vscode,支持各种开源插件,而且移动端相对pc端功能是全量的。
3qH3.png
本博客所用的hexo框架,同样是使用markdown进行文章内容的书写的,因此,使用Obsidian作为编辑器最好不过。

Obsidian Git

Obsidian凭借开源插件的优势,让我们可以不借助其它git工具完成对博客的版本控制。
在第三方插件中找到Obsidian Git安装并启用,重启Obsidian。
3Aey.png
理想情况下,Obsidian目录本身就是一个git目录的话,这个插件是不需要对git路径等进行配置的。
我们只需要将push代码所需的git仓库用户名、密码、邮箱等在第三方插件中配置即可。
3T0M.png

重构仓库

比起上传代码,我们更多时候需要沉浸在文章的创作中,总是面对博客框架的目录我觉得不太ok。
因此,我将博客作为子目录(land)放入了仓库中,并创建了一个写作目录(seeds)。
当我们完成写作时,只需要将完成的文章移动至博客的_posts目录中即可上传发布。3Mrk.png

docker部署

相应地,我们的docker构建流程也需要进行更改:

dockerfile
1
2
3
4
5
6
7
8
9
10
11
12
13
# 构建时执行
FROM node:latest
RUN npm install -g hexo-cli \
&& git clone https://你的项目地址 \
&& cd /项目目录/land \
&& npm install

# 启动时执行
CMD cd 项目目录 \
&& git pull \
&& cd land \
&& hexo server -p 5000
# 之后将容器的5000端口映射到服务器指定端口即可访问

工作流

现在我们可以随时随地写文章并发布,但这还不能称之为工作流,我们仍有许多需要手动执行的相似操作。

借助Obsidian的Tmplater插件,我们可以省去许多重复内容的书写,甚至通过脚本帮我们完成一些特殊处理。
3ZyA.png
变量解释:

  • title:根据文件名称写入文章标题。
  • date:写入指定格式的当前日期时间。
  • categories:根据当前文件夹名称生成文章分类。
  • unique_url:生成文章短链。(如:https://world.ocer.cc/post/lrajsygy/ ,但需要博客支持”根据元数据生成Url“),短链生成脚本:
    js
    1
    2
    3
    4
    5
    const getUniqueUrl = () => {
    // 根据当前时间生成36位字符串。
      return Date.now().toString(36)
    }
    module.exports = getUniqueUrl;

常见问题

1. hexo的静态资源文件被缓存

安装hexo-hash插件,用于生成文件哈希后缀:

bash
1
npm install hexo-hash --save

添加配置:

yaml
1
2
3
4
5
# Hexo-hash
# https://github.com/Lete114/Hexo-hash
hash:
enable: true # 是否启用
# 更多配置信息请看: https://github.com/Lete114/cache-hash

再执行hexo g命令时,会生成hash后缀,但我们是使用hexo server启动的要怎么办呢?
还好官方提供了hexo serve -s命令,可以使用hexo g生成的静态文件启动服务。

docker部署更改:

dockerfile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 构建时执行
FROM node:latest
RUN npm install -g hexo-cli \
&& git clone https://你的项目地址 \
&& cd /项目目录/land \
&& npm install

# 启动时执行
CMD cd 项目目录 \
&& git pull \
&& cd land \
&& hexo g \
&& hexo server -sp 5000
# 之后将容器的5000端口映射到服务器指定端口即可访问