分享一篇《搭建本地知识库》的姿势

说起知识库这个东西,很多读者第一时间就会想到语雀notion 这种公有云平台。

当然,如果只是为了图省事,亦或需要在任何地方都能编辑或访问,那公有云方案确实是比较合适的选择。
但是,如果仅仅是为了记录自己的日常、并且有较高的私密性要求,那本地知识库搭建你绝对有必要了解一下。

先说结论吧:

  • 优势
    • 绝对私密且没有账户密码管理负担(因为压根就没有管理后台一说);
    • 不用担心平台跑路或者不维护了(实际上很多公有云平台都不保险,特别是国内的互联网环境下);
    • 自由创作,写啥都可以,不用担心说了不恰当的话被封号;
    • 自由定制(需要一些技术能力),需要啥功能自己自足,不需要办卡充会员;
  • 劣势
    • 只能自己电脑或私服访问,是否需要 Everywhere 取决你自己;
    • 有一定技术门槛,但非常有限;

缘起#

大概 10 年前吧,我第一次接触 Markdonw 这种玩意,然后瞬间被以这种形式记录工作、日常的姿势深深吸引。包括后来搭建独立站,内容的载体都是一个个.md 文件,乃至你现在看到的这篇文章,原始内容仍然是… 后来由于工作和生活需要,我基于 vuepress 1.x 在本地搭建了一个知识库,通过 Github 托管内容。

这期间,由于 Vue3 的发布,很多基于 V2 版本的类库都出现了问题,比如当 nodejs 升级了,就发现原来本地的服务就跪了。再后来,官方搞了个 vitepress ,然后就没有然后了(vuepress 被正式晾在了一边,尽管现在有社区维护,但已经不好再作为第一选择了)!

由于本人技术出身,所以对于这类问题基本上都能处理,然而对于框架的新特性或者想要扩展一些额外的功能,就略显尴尬了… 特别是到了今年,问题尤为明显。直到前两天,因为 tailwindcss 库导致和 vuepress 某个依赖发生冲突然后直接启动不了了,所以就怒换了:Docusaurus

因为实在不想再继续为这老古董消耗时间和精力去折腾了,docusaurus 提供知识库基础能力的同时,还额外提供了比其他方案更多的优势

知识库套件#

在换 docusaurus 之前,我想过升级成 vitepress,因为在这种事情上,越少折腾越好。但后来发现:把 vuepress 迁移到 vitepress 并不容易

同样是体力活,索性一把换到位。于是最终选择了 React 解决方案

关于 docusaurus 的使用方法,请读者移步到他们的 官方文档,毕竟人家已经写的很详细了,这里确实没必要再做搬运工…

1、通过 create-docusaurus 生成目标站点#

nlx create-docusaurus@latest MarsNotes classic --typescript

注意:这里的 nlx 是全局 ni 的命令,没有装 ni 的可以根据自己需要换其他的,比如:yarn create xxx 效果是一样的。当然这一步官方有详细的指北

额外的依赖,建议都安装一下

ni @docusaurus/plugin-ideal-image @easyops-cn/docusaurus-search-local docusaurus-plugin-image-zoom

插件的配置和作用,对应到 github 的 readme 都有,请自行取用…

2、配置说明#

把 vuepress 迁移到 docusaurus 比我想像中要容易的多,因为原来的知识库目录层级较多,有好几个大的分类。在 vuepress 托管时,愣是写了一大托 node-fs 操作代码,用来生成目录树结构。但发现 docusaurus 对动态目录树是原生支持的,它的 sidebars.ts 里有一段注释:”By default, Docusaurus generates a sidebar from the docs folder structure”

这就不要太爽好吧,所以在 docusaurus 配置知识库的目录树就异常简单了

import type {SidebarsConfig} from '@docusaurus/plugin-content-docs';

const sidebars: SidebarsConfig = {
    cate1Sidebar: [{type: 'autogenerated', dirName: 'cate1'}],
    cate2Sidebar: [{type: 'autogenerated', dirName: 'cate2'}],
    cate3Sidebar: [{type: 'autogenerated', dirName: 'cate3'}],
};

export default sidebars;

其中,cate1、cate2… 这些,对应 docs 目录中的其他大类目录名称

3、一点优化#

如果你打算通过以上方式构建本地知识库,通常情况下你应该并不希望一直开个黑窗口。所以此时可以再做些小优化:

  • 后台运行:通过 pm2docusaurus start 放在后台;
  • 反向代理:选个你喜欢的域名,改本地 hosts,使其支持通过这个域名访问到 docusaurus 服务,这一步可以通过 nginx 搞定

pm2 的应用启动配置

{
    "name": "my-wiki",
    "script": "pnpm run build && pnpm run serve",
    "cwd":"./my-wiki"
}

注意这里启动命令是 run serve 而非 run start。是因为通过构建后运行,docusaurus 会做服务端渲染。不过有个问题就是当你再新建或改动旧 MD 文件后,站点并不会更新,当然这个很好理解啦。所以如果需要时时更新,主要需要通过 run start 启动(docusaurus start)

上 Git#

这点非常重要!

原因也很简单,因为你并不希望可能某天由于电脑进水了,然后资料丢失吧~
所以,选个你喜欢的 git 托管服务,创建一个 private 仓库,把本地知识库保存在云端就完事了。

通过 git 托管,还有一个好处,就是你能看到自己的创作记录,当然这个实际效果取决于自己的 commit 习惯。

对于技术人来说,这简直不要太滋润。如果是企业内部服务,也是可以考虑这么搞,正真的降本增效…

以上内容引用自个人独立站 托码特人 折腾笔记,如果觉得 OK,欢迎点赞转发。

本作品采用《CC 协议》,转载必须注明作者和本文链接
作者:托码特人
讨论数量: 3
北桥苏

你的博客站点是什么,U 一个吗

7个月前 评论
tomartisan (楼主) 7个月前
北桥苏

就是加个友链

7个月前 评论