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=:
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::
Erzeuge danach zwei unterschiedliche Datenbankpasswörter. Führe den Befehl zweimal aus und notiere beide Ausgaben getrennt:
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:
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:
Kontrolliere den Status:
Der erste Datenbankstart kann etwas dauern. Bei Bedarf zeigen die Protokolle den Fortschritt:
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:
Ö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:
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:
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:
- BookStack startet vor der Datenbank: Kurz warten und den BookStack-Container
mit
docker compose restart bookstackneu starten. - Datenbankzugriff verweigert: Werte in
.envprüfen; vorhandene Datenbank- Passwörter nicht nachträglich ohne geplante Migration ändern. - Links zeigen auf eine falsche Adresse:
APP_URLmuss exakt der verwendeten Adresse einschließlich Port entsprechen. - Schreibfehler im Konfigurationsordner:
PUID,PGIDund Besitzrechte unter/opt/bookstackkontrollieren.
10. Quellen und Video¶
- Offizielle BookStack-Installationshinweise
- Dokumentation des LinuxServer-Containers
- Offizielle Backup- und Wiederherstellungshinweise
- Video: BookStack mit Docker installieren
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.