Skip to content

MkDocs für die Erstellung eines Wikis

MkDocs ist ein Tool zum Erstellen von statischen Websites für Dokumentationen. Es verwendet Markdown-Dateien und wandelt sie in eine HTML-basierte Dokumentation um. MkDocs bietet eine einfache Einrichtung, Echtzeit-Vorschau und anpassbare Themes, wie das Material-Theme. Es eignet sich ideal für technische Dokumentationen und Wikis.

Im Artikel MkDocs Installieren und ein erstes Projekt erstellen habe ich bereits erklärt, wie man mkdocs installieren kann. In dieser Dokumentation zeige ich, wie dieses Wiki aufgebaut ist und Automatisch aktualisiert wird.

Installation von mkdocs

Prüfen of pipx installiert ist, wenn dies nicht der Fall ist dann installieren wir es mit apt. Für andere Systeme wie Redhat muss apt mit yum bzw. dnf ersetzt werden.

pipx --version 2>/dev/null || sudo apt update && sudo apt install pipx

Nach der Installation von pipx ist es wichtig, sicherzustellen, dass der PATH angepasst ist. Dabei wird /home/$LOGNAME/.local/bin zur PATH Variable aufgenommen.

python3 -m pipx ensurepath
exec $SHELL  # Neu starten, damit PATH aktualisiert wird

Dann installieren wir mkdocs mit pipx.

pipx install mkdocs || echo "Failed to install mkdocs." >&2

Somit hätten wir schon ein funktionierendes mkdocs. Wir erweitern mkdocs mit dem Theme material und einigen weiteren Plugins. Der folgende Befehl installiert das mkdocs-material Theme.

pipx inject mkdocs mkdocs-material --include-deps --include-apps || echo "Failed to install mkdocs-material." >&2

Zusätzliche Plugins für mkdocs installieren, wie in diesem Beispiel (mkdocs-macros-plugin, mkdocstrings, mkdocs-git-revision-date-localized-plugin, mkdocs mkdocs-git-committers-plugin-2, mkdocs-git-authors-plugin) installieren wir wie folgt.

pipx inject mkdocs mkdocs-macros-plugin --include-deps --include-apps || echo "Failed to install mkdocs-macros-plugin." >&2
pipx inject mkdocs mkdocstrings || echo "Failed to install mkdocstrings." >&2
pipx inject mkdocs mkdocs-git-revision-date-localized-plugin --include-deps --include-apps || echo "Failed to install mkdocs-git-revision-date-localized-plugin." >&2
pipx inject mkdocs mkdocs-git-committers-plugin-2 --include-deps --include-apps || echo "Failed to install mkdocs-git-committers-plugin-2." >&2
pipx inject mkdocs mkdocs-git-authors-plugin --include-deps --include-apps || echo "Failed to install mkdocs-git-authors-plugin." >&2

Alle installierten mkdocs Pakete lassen wir uns mit pipx list anzeigen.

pipx list
venvs are in /vol/box01/home/$LOGNAME/.local/pipx/venvs
apps are exposed on your $PATH at /vol/box01/home/$LOGNAME/.local/bin
   package mkdocs 1.6.1, installed using Python 3.11.2
    - ghp-import
    - hjson
    - markdown_py
    - mkdocs
    - mkdocs-get-deps
    - normalizer
    - pybabel
    - pygmentize
    - watchmedo

Wer dies alles in einem Rutsch installieren möchte, kann das folgende Installationsskript für mkdocs verwenden.

#!/bin/bash

# Prüfen und pipx installieren
if ! command -v pipx >/dev/null 2>&1; then
    if [ -f /etc/debian_version ]; then
        sudo apt install pipx
    elif [ -f /etc/fedora-release ]; then
        sudo dnf install pipx
    elif [ -f /etc/arch-release ]; then
        sudo pacman -S pipx
    else
        echo "Unsupported distribution. Install pipx manually." >&2
        exit 1
    fi
    python3 -m pipx ensurepath
    exec $SHELL
fi

# mkdocs installieren
pipx install mkdocs || { echo "Failed to install mkdocs." >&2; exit 1; }

# Theme Material für mkdocs
pipx inject mkdocs mkdocs-material --include-deps --include-apps || {
    echo "Failed to install mkdocs-material." >&2
    exit 1
}

# Zusätzliche Plugins
pipx inject mkdocs mkdocs-macros-plugin --include-deps --include-apps || exit 1
pipx inject mkdocs mkdocstrings || exit 1
pipx inject mkdocs mkdocs-git-revision-date-localized-plugin --include-deps --include-apps || exit 1
pipx inject mkdocs mkdocs-git-committers-plugin-2 --include-deps --include-apps || exit 1
pipx inject mkdocs mkdocs-git-authors-plugin --include-deps --include-apps || exit 1

# Übersicht anzeigen
pipx list

# EOF

mkdocs zusammen mit Gitbucket als Backend einrichten

Für unser Wiki was Gitbucket als Backend nutzt richten wir uns unter /var/www/wiki folgende Verzeichnisstruktur ein.

wiki
  |
  +- htdocs
  |
  +- mkdocs
  |
  +- repo

Beschreibung der Verzeichnisse

Verzeichnis Beschreibung
htdocs Statiche HTML Wiki
mkdocs MkDocs Entwicklungsumgebung
repos Git Repository von docs/

Mit mkdocs erstellen wie die Verzeichnisse für unser Wiki.

mkdir -p /var/www/wiki/{repo,mkdocs,htdocs}

Dann wechseln wir in das Verzeichnis mkdocs, was wir erstellt haben und klonen und das <user>/wiki_mkdocs Repository.

cd /var/www/wiki/mkdocs/
git clone ssh://git@gitbucket.example.com:8081/<user>/wiki_mkdocs.git .

Bevor wir mkdocs starten, können wir in bin/Config.inc.sh nocht den Port und das Interface einrichten.

vi bin/startup.sh

...

# Interface or ip address
cfg[interface]="localhost"

# mkdocs port (default: 8000)
cfg[port]=8001

Bei dieser gelegenheit sollten wir gleich noch die site_url und repo_url in der mkdocs.yml anpassen.

# Project informations
site_name: IT Knowledge Base
site_url: https://mkdocs.example.com/


# Git Repository
repo_url: https://gitbucket.example.com/<user>/wiki_docs
repo_name: <user>/wiki_docs
edit_uri: edit/master/

Nun müssen wir noch das selbst erstellte mkdocs Plugin add_postmeta bauen.

cd include/plugins/ && pipx inject mkdocs  .

Damit mkdocs unabhängig von der aktuellen Bash Session läuft, erstellen wir eine Screen Session wiki in welcher wir mkdocs starten.

screen -S wiki

Nun können wir in der Screen Session das Start Skript /var/www/wiki/mkdocs/bin/startup.sh starten.

/var/www/wiki/mkdocs/bin/startup.sh

Mit der Tastenkombination Ctrl+A+D verlassen wir die aktuelle Screen Session.

Wenn wir nun auf der in site_url definierten Seite (https://mkdocs.example.com/) gehen sollten wir nun ein Fertig installiertes MkDocs mit einer Hauptseite sehen.

Damit wir die Daten in unser Wiki bekommen, bearbeiten wir das Skript bin/Config.inc.sh und passen die Variable cfg[basedir] an unseren Pfad an, wo dich die Verzeichnisse repor, mkdocs und htdocs befinden.

vi bin/wikiupdate.sh
....
# Path to the basename of the wiki directory
cfg[basedir]="/var/www/wiki"

Dann gehen wir in unserem repo Vzerzeichnis und klonen das <user>/wiki_docs Verzeichnis.

cd /var/www/wiki/repo && git clone ssh://git@gitbucket.example.com:8081/<user>/wiki_docs.git .

Im Skript /var/www/wiki/mkdocs/bin/wikiupdate.sh setzen wir die Variable cwd zum Verzeichnispfad wo die mkdocs.yml sich befindet. Dieses Skript verwenden wir dann als Webhook Skript.

Dazu gehen wir auf https://webhook.example.com/login, melden uns an und erstellen uns einen Webhook, der dieses Skript ausführt.

Info

Einen Webhook in https://webhook.example.com/ einrichten, folgt in einer weiteren Dokumentation.