如何系统化管理Hexo博客

建立博客的初衷

虽说这篇笔记的题目是「如何管理」,为了更好的回答这个问题,必须要回到最原始问题上来——我为何要建一个博客,而且是费那么大劲。而我的初衷是建立和维护一个属于自己的「知识库」。通常来说,为了达成这个目的,更好的选择是笔记APP,而不是博客。我确实也是这么做的。一开始用印象笔记,因为它死活不支持多级目录,我又转到国内的为知笔记,做了五年的VIP用户。但它五年来似乎从没改进过。随着近年来有道云异军突起,以及IOS生态圈中琳琅满目的APP,如熊掌记、Notion、谷歌的Keep、阿里的语雀。。。。。。各有各的惊艳,各有各的槽点。

随着国外的Github和国内的Coding等公司,相继开放永久免费、不限流量的静态网页托管平台,如Github Pages。我走上了自建Bolg的不归路。当然不是说,搭博客这条路完全没有槽点。而是——自己造的孽,含着泪也会继续造下去。至少它满足了我以下几点「必不可少」的要求:

  • [x] 多级目录
  • [x] 支持Markdown文本
  • [x] 支持分类、标签、以及站内全文检索
  • [x] 没有IOS、Windows、Android等平台限制

说白了,我是利用Github提供的免费平台,把Blog当笔记本来用。最后选了Hexo,简单易用、界面绚丽、插件丰富。除开自用的「知识平台」功能以外,偶尔还能发发博文装大尾巴狼,也是蛮不错的感觉。

网上介绍怎么搭建Hexo以及添加绚丽功能的帖子海了去了,但我基本没有发现分享「如何管理」的。因为绝大多数这些博主,搭建Hexo只是用来玩一阵子。回头有更新更好玩的东西,就跑去玩别的了。极少数有博客,站内文章超过50篇的。所以,对他们来说,根本不存在——管理——这个议题。

虽然Hexo在逻辑上支持分类标签,但物理上它把所有的Post都放到一个单一的目录下面。而我是打算把它当作知识库,长期、密集使用的。可预见的将来,站内笔记会非常多。不但写新贴,还可能经常更改旧贴。那势必会带来一个问题:如何管理数量少日益膨胀的笔记?

解决思路

我能想到的办法很简单,也很传统。就是不但逻辑分类,而且也必须物理上分目录存放。理论上在自己的PC分目录保存就好了。但我有好几台电脑,单位一台、自己Windows一台、Mac一台,还有平板。为了让能在不同的电脑上能随时修改、添加笔记,必须放在托管在云端。

硬件

没有必要租用传统的VPS,太贵了,而且连10%的运算能力都用不上。用共享的Web Hosting就完全能解决需求。比如百度云,或者Azure的Web App。而我是租用 1&1 公司的Web Hosting,每个月 1€

  • 1 CPU
  • 500M 内存
  • 20G SSD

就算那么低的运算能力,平时我的网站也用不到25%的运算能力。应付起啦,绰绰有余。

软件

我采用了MM-Wiki 管理平台(以下简称维基平台)。这是一个非常优秀的开源项目,具体请参看作者的文档。部署超级简单,可以说一键部署,然后就可以用起啦了。简单来说这个平台有以下几个特点:

  • [x] 支持空间管理、空间内支持多级目录。
  • [x] 支持Markdown编辑。
  • [x] 支持附件。
  • [x] 有修改记录。
  • [ ] 不支持内容搜索,只支持笔记的题目搜索。
  • [ ] 标签只支持到空间级别,目录和笔记都没有标签。

但它跟Hexo博客搭配使用,就完全满足我的需求了。其实Hexo博客中,有个仿维基的Wikitten主题,跟MM-Wiki项目非常像。但毕竟不是所有内容,都适合摆在公开的地方。以MM-Wiki 作为私用平台,增加了私隐保护。

我的做法是,在维基平台中开辟一个独立的空间,用来存放博客上所有的源文件。而在Github Pages上托管的静态网站其实都是HTML文件。所有的改动,都必须在源Markdownn文件上修改,然后再推送到博客网站的。

在维基平台修改、添加、删除笔记的源文件。然后复制到Hexo的项目目录,编译后推送到Github Pages站点。维基百科内置的在线版Editor.md 编辑器,非常美观实用。基本上我都不太需要在自己的电脑上用Typora等编辑器写MD文本了。思路有了,实现起来还是有一点问题。

难点的解决办法

首先,在维基平台内,MD文件是分目录存储的。这个目录不能直接拷贝到Hexo的_post目录。懒得每修改一个,或者添加一个笔记,就立马拷贝到博客中去。解决笔记复制的问题。

其次,笔记的物理保存目录,必须跟Hexo上的「分类」是一一对应的。否则,管理起来会很麻烦。在维基平台移动了笔记的保存目录后,在一一修改内容,也是很吃力的事情。

笔记复制的解决办法

说来也超级简单,一个脚本命令就够了。先用find命令在指定目录找出所有的MD文件,然后通过管道传给复制命令cp,搞定!

1
find  /root/bibliothek/markdowns/博客草稿/  -type f -name "*.md" -exec cp {} /home/_post/ \;

然后hexo d -g编译、发布,结束!

管理笔记的分类

这个问题有一点麻烦。因为必须打开每一个文件,读取笔记的头文件描述,然后再比较跟文件的物理位置是否符合。我尝试用shell脚本解决这难题。无奈我的的shell脚本功底是在很差,搞半天未果就放弃了。用Java或者.NET Core啥的,正儿八经写一个Console程序,也不是不行。但有种杀鸡用牛刀的感觉。

最后想到了用Javascript。因为编译Hexo是需要安装Node.js的,写一段JavaScript,让Node跑起来。通往罗马的道路千万条,选一条自己最熟悉的就完了。

点击查看代码

上面这个脚本使用的都是我个人设置,你如果要用的话需要改成自己实际文件目录。

-----------------------本文结束感谢您的阅读-----------------------