Zum Inhalt

Eigene Wissensdatenbank mit BookStack einrichten

Veröffentlicht am 9. August 2026 · Geschätzte Lesezeit: 4 Minuten

BookStack ordnet Anleitungen und Notizen wie Bücher, Kapitel und Seiten. Inhalte lassen sich im Browser schreiben, durchsuchen und gemeinsam pflegen, während sie auf dem eigenen Server bleiben. Die Installation mit Docker und MariaDB dauert ungefähr 20 Minuten.

Voraussetzungen

  • Ein Linux-Server mit Docker und Docker Compose
  • Eine feste private IP-Adresse für den Server
  • Port 6875/TCP ist im Heimnetz frei
  • SSH-Zugriff und ein Benutzer mit sudo-Rechten

1. Arbeitsordner und Benutzerkennung vorbereiten

Führe die Befehle auf dem Server aus. Sie erstellen die persistenten Ordner für BookStack und MariaDB:

sudo mkdir -p /opt/bookstack/bookstack-config /opt/bookstack/mariadb-config
sudo chown -R "$USER":"$USER" /opt/bookstack
cd /opt/bookstack

Zeige die Benutzer- und Gruppenkennung an und notiere die Zahlen hinter uid= und gid=:

id

2. Anwendungsschlüssel und Passwörter erzeugen

Der offizielle LinuxServer-Container erzeugt mit diesem Befehl einen passenden BookStack-Anwendungsschlüssel. Kopiere die vollständige Ausgabe mit base64::

docker run --rm --entrypoint /bin/bash lscr.io/linuxserver/bookstack:latest appkey

Erzeuge danach zwei unterschiedliche Datenbankpasswörter. Führe den Befehl zweimal aus und notiere beide Ausgaben getrennt:

openssl rand -hex 24

Der erste Wert wird <datenbank-passwort>, der zweite <datenbank-root-passwort>.

3. Geheimnisse in einer Umgebungsdatei speichern

Erstelle /opt/bookstack/.env. Ersetze alle fünf Platzhalter durch die notierten Werte. <uid> und <gid> sind die Zahlen aus Schritt 1.

PUID=<uid>
PGID=<gid>
APP_KEY=<app-key>
DB_PASSWORD=<datenbank-passwort>
DB_ROOT_PASSWORD=<datenbank-root-passwort>

Schütze die Datei auf dem Server:

chmod 600 /opt/bookstack/.env

Schlüssel und Passwörter sichern

Die .env-Datei gehört nicht auf eine Webseite oder in eine öffentliche Git-Ablage. Der bisherige APP_KEY wird auch nach einer Wiederherstellung benötigt und darf nicht bei jedem Start neu erzeugt werden.

4. Compose-Datei erstellen

Erstelle /opt/bookstack/compose.yaml. Ersetze <server-ip> durch die private IP des Servers, zum Beispiel 192.168.1.20.

services:
  mariadb:
    image: lscr.io/linuxserver/mariadb:latest
    container_name: bookstack-mariadb
    restart: unless-stopped
    environment:
      PUID: "${PUID}"
      PGID: "${PGID}"
      TZ: "Europe/Berlin"
      MYSQL_ROOT_PASSWORD: "${DB_ROOT_PASSWORD}"
      MYSQL_DATABASE: "bookstackapp"
      MYSQL_USER: "bookstack"
      MYSQL_PASSWORD: "${DB_PASSWORD}"
    volumes:
      - ./mariadb-config:/config

  bookstack:
    image: lscr.io/linuxserver/bookstack:latest
    container_name: bookstack
    restart: unless-stopped
    depends_on:
      - mariadb
    environment:
      PUID: "${PUID}"
      PGID: "${PGID}"
      TZ: "Europe/Berlin"
      APP_URL: "http://<server-ip>:6875"
      APP_KEY: "${APP_KEY}"
      DB_HOST: "mariadb"
      DB_PORT: "3306"
      DB_USERNAME: "bookstack"
      DB_PASSWORD: "${DB_PASSWORD}"
      DB_DATABASE: "bookstackapp"
    ports:
      - "<server-ip>:6875:80"
    volumes:
      - ./bookstack-config:/config

MariaDB ist nur im internen Compose-Netz erreichbar und erhält absichtlich keinen Host-Port. Die BookStack-Oberfläche wird an die private Server-IP gebunden.

5. Container starten

Prüfe die Compose-Datei und starte beide Dienste:

cd /opt/bookstack
docker compose config --quiet
docker compose up -d

Kontrolliere den Status:

docker compose ps

Der erste Datenbankstart kann etwas dauern. Bei Bedarf zeigen die Protokolle den Fortschritt:

docker compose logs --tail=100 mariadb bookstack

6. Standardkonto sofort absichern

Öffne http://<server-ip>:6875 und ersetze <server-ip> durch die private Server-IP. Melde dich mit dem vom Container dokumentierten Standardkonto an:

E-Mail: admin@admin.com
Passwort: password

Öffne danach sofort dein Profil, ändere E-Mail-Adresse und Passwort und verwende ein langes, einmaliges Kennwort.

Standardpasswort nicht aktiv lassen

Solange password noch gilt, kann jeder mit Zugriff auf Port 6875 die gesamte Wissensdatenbank verwalten. Leite den Port nicht im Router ins Internet weiter.

7. Erstes Buch und Rechte einrichten

Erstelle ein Buch, zum Beispiel Server-Dokumentation, darin ein Kapitel Docker und eine erste Seite. Teste Überschriften, eine Liste und einen Codeblock. Lege weitere Benutzer nur bei Bedarf an und vergib möglichst wenige Administratorrechte.

Kleine, abgeschlossene Seiten schreiben

Eine Seite pro Dienst oder Aufgabe ist leichter zu finden und zu aktualisieren als eine einzige sehr lange Seite. Halte IP-Adressen, Zugangsdaten und Wiederherstellungsschritte voneinander getrennt.

8. Backup und Rückweg

BookStack benötigt immer ein Backup der Datenbank und der hochgeladenen Dateien. Lege zuerst einen geschützten Backup-Ordner an:

sudo mkdir -p /var/backups/bookstack
sudo chmod 700 /var/backups/bookstack

Erzeuge einen konsistenten SQL-Dump aus dem laufenden MariaDB-Container:

cd /opt/bookstack
docker compose exec -T mariadb sh -c 'mariadb-dump -u "$MYSQL_USER" -p"$MYSQL_PASSWORD" "$MYSQL_DATABASE"' > "/var/backups/bookstack/bookstack-$(date +%F).sql"

Stoppe danach beide Container und sichere die Konfigurationsordner und Dateien:

docker compose down
sudo tar -czf "/var/backups/bookstack/bookstack-files-$(date +%F).tar.gz" -C /opt bookstack

Starte BookStack wieder:

cd /opt/bookstack
docker compose up -d

Bewahre SQL-Dump und Dateiarchiv gemeinsam auf einem zweiten, geschützten Gerät auf. Für eine Wiederherstellung werden beide Teile benötigt. Teste den Rückweg regelmäßig auf einem getrennten System, bevor du dich auf das Backup verlässt.

9. Aktualisieren und Fehler finden

Lege vor einem Update beide Backups an. Aktualisiere danach die Images und Container:

cd /opt/bookstack
docker compose pull
docker compose up -d
  • BookStack startet vor der Datenbank: Kurz warten und den BookStack-Container mit docker compose restart bookstack neu starten.
  • Datenbankzugriff verweigert: Werte in .env prüfen; vorhandene Datenbank- Passwörter nicht nachträglich ohne geplante Migration ändern.
  • Links zeigen auf eine falsche Adresse: APP_URL muss exakt der verwendeten Adresse einschließlich Port entsprechen.
  • Schreibfehler im Konfigurationsordner: PUID, PGID und Besitzrechte unter /opt/bookstack kontrollieren.

10. Quellen und Video

Fertig

BookStack läuft nun mit eigener MariaDB und einem abgesicherten Administratorkonto. Zur Funktionsprüfung erstellst du eine Testseite, lädst ein kleines Bild hoch und suchst anschließend über die globale Suche nach einem Wort aus dieser Seite.