Migrate Knowledge to MkDocs Generator

The knowledge base project has been migrated to the MkDocs project, and it works like a charm so far.

cons of DokuWiki

The knowledge base project was based on DokuWiki, with a Markdown plugin installed, I wrote wiki pages in Markdown format and using Doku’s media manager to host the attachments.

However, there are always some breaking changes for Doku, and it will get my theme and plugins incompatible once I upgraded. Moreover, creating or editing a wiki is also a tough job, the whole editing process is online, which may cause edit conflicts.

The ideal project structure should be a static site generator that schedules create pages based on the local markdown files. Finally, MkDocs is my concluding choice.

MkDocs feature

As its name, MkDocs is a static site generator especially for some project’s documents, it only uses a YAML config file to set up the meta info of the website, followed by a folder that contains all the markdown files, MkDocs will automatically create links hierarchy. It follows Markdown syntax, so do not need to worry about insert images, just simply put the image file in the directory or subdirectory.

Migration

Since I already use Markdown to write wiki, each file is already in Markdown format with a TXT extension name, so what I need to do is to change the extension name to .md for files in each subdirectory, a simple Python script can do this trick.

extension name from txt to MD for each subdirectory.

# ref: https://stackoverflow.com/a/37016368/3886059
import os
import sys

directory = os.path.dirname(os.path.realpath(sys.argv[0])) #get the directory of your script
for subdir, dirs, files in os.walk(directory):
 for filename in files:
  if filename.find('.txt') > 0:
   subdirectoryPath = os.path.relpath(subdir, directory) #get the path to your subdirectory
   filePath = os.path.join(subdirectoryPath, filename) #get the path to your file
   newFilePath = filePath.replace(".txt",".md") #create the new name
   os.rename(filePath, newFilePath) #rename your file

If you insert images in DokuWiki using the web pop-up window (so called media-manager) , the image format should be ![[dir/imgurl.png]] , this need to be changed to markdown format ![]() , a simple Regex could also handle it.

host on GitHub

I host the knowledge base to a GitHub repo and implemented a Github Action for CI/CD. It means I can edit the wiki files locally, and when I finish editing, a simple git push to push all my local commits to GitHub and CI can automatically generate the site and publish to my server.

issue

The issue of MkDocs is mainly about the zh-CN localizations.

Currently, the MkDocs project did not support Chinese keyword searches. It works with English keywords, but for Chinese keywords, it returns nothing.

https://github.com/mkdocs/mkdocs/issues/2509#issuecomment-882689383

alternatives

If you use Obsidian as your note management tool, you can publish the Obsidian vault to the web as a knowledge base, despite the official publish service, Quartz, is also a good way to publish Obsidian to the web.

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注