新的博客方案
总是有些大部头的内容要记录下来,最早的时候是记录在自己搭建的wordpress上,后来迁移到GitHub pages上,利用的Jekyll,这已经满足我的大多数需求了,不过还是缺乏搜索功能,毕竟我自己的开发的snote快速笔记都已经有丰富的搜索能力,而且我还想能区分公开和隐私内容。
因此对新的文档系统有几个要求:
- 编写方便(markdown)
- 方便迁移(我想在现有的系统或者服务终止后能快速的迁移到其他系统上,比如说Wordpress也可能因为不想再维护服务器或者网络隔离需要迁移)。
- 有搜索能力
- 能隐藏私有文档(有些设计隐私资料的,或者没有精力整理好的,可以暂时隐藏起来)
方案对比
Docusaurus
是目前比较成熟的,支持功能最多的文档系统,支持markdown编写,支持多种搜索功能,但是缺乏隐私文档的支持,因此pass掉。
Jekyll
在GitHub上用的比较多的文档系统,但是不支持搜索功能,也缺乏隐私文档支持。
Sphinx
这是一个老牌的文档系统,适合构建大型的结构化文档,文档的格式也是很丰富的,也有搜索支持。但是缺乏隐私文档能力,而且界面过于传统,我更倾向一些博客化的风格。
gitbook readthedocs
这两个是提供在线托管服务的,基本上能满足需求,但是要想彻底满足需要交钱,免费版本有诸多限制。
最终解决方案
这里多少用到了卡bug或者投机取巧,利用markdown广泛的支持性。
我的需求里面最难的就是隐私文档支持,我觉得不行我就分两套系统做,简单的给隐私系统套一个http auth.就是搜索的时候需要分别去两个系统里面搜索。
但是有一天突然想到了GitHub对markdown的支持,熟悉GitHub的都知道,在GitHub里面打开markdown是默认显示渲染好的页面,这不就是一个markdown文档系统吗,如果我把仓库设置成隐私,那么所有的资料都是隐藏的。
然后我在把需要公开的文档按照文档生成系统的规则布置好,比如把隐私的文档放在单独的private文件夹里面,文档生成系统便不会对这些内容进行编译,我只需要对把编译好的文档发布出去就可以了,搜索功能也可以利用GitHub自己的搜索功能。
然后我选择了最简单的有搜索支持的静态生成器,就是Material for MkDocs,因为GitHub pages只支持Jekyll,所以我打算把生成的网站部署在自己的服务器上,一次偶然索索发现互联网大善人Cloudflare支持连接GitHub并且编译MkDocs,而且经过实验发现一切都是自动化的,GitHub提交了新内容Clouddflare就可以编译部署,而且支持私有仓库。
后面还有惊喜,这套系统我需要在本地部署MkDocs,用于预览编辑的结果,然后再提交GitHub。但是再熟悉MkDocs之后,基本不需要预览,可以裸写markdown。
我就想省事,不想每次写文档都要拉取仓库,甚至可以像wordpress一样在线编辑,这些都是可以的朋友,那就是在GitHub的仓库页面,按键盘上的点.
,就可以启动在线的vscode,之后就可以直接编辑文档了,我的这篇文章就是这么写的。
迁移过程
从Jekyll迁移到MkDocs还是很简单的。
对于图片文件的引用做了全区搜索替换,剩下就是每个文档要手动加Meta,主要是文档的时间。
然后是编辑内容加了标题,还有就是手动增加<!-- more -->
标签,让Mkdocs展示更好的列表。
对于搜索遇到了一个bug,没有在mkdocs.yml里面设置language的时候,搜索英文内容是出不来的,我在里面设置成zh才解决了搜索问题。
然后是blog插件把风格变成博客样式,而不是技术文档风格。