Skip to main content

Backup + Migration

❓ Ich habe BookStack per Docker installiert (wie in der Anleitung). Kannst du mir bitte erklären, wie ich Backups erstelle (vollständige Inhaltssicherung), sodass ich die Website bei Bedarf z.B. zu einem anderen Server/Domain umziehen kann? Hier ist die offizielle Anleitung von BookStack.

Vollständiges BookStack-Backup (Docker) – so, dass ein Umzug auf anderen Server/Domain klappt 🧰📦

Du brauchst für eine komplette, wiederherstellbare Sicherung im Wesentlichen zwei Bausteine:

  1. Datenbank (alle Seiten, Bücher, Nutzer, Rechte, Einstellungen …)
  2. Dateien/Config (Uploads, Anhänge, .env/APP_KEY, ggf. Themes/Module)

Da du das Setup wie in deiner Anleitung hast (/opt/bookstack mit docker-compose.yml, Volumes ./mariadb und ./bookstack), ist das erfreulich simpel.


✅ Was genau muss gesichert werden?

1) Datenbank (MariaDB)

  • Inhalt steckt im DB-Container, in deinem Setup dauerhaft unter:
    • ./mariadb (als Volume ./mariadb:/config)
  • Sauberster Weg: SQL-Dump (portabel, versionstolerant)

2) Dateien (BookStack-Container-Volume)

  • Persistente Daten liegen bei dir unter:
    • ./bookstack (als Volume ./bookstack:/config)
  • Darin sind insbesondere wichtig:
    • .env (inkl. APP_KEY!)
    • Uploads/Attachments
    • ggf. www/themes/custom/... (deine Hacks/Module)

3) Compose/Caddy (für den Umzug hilfreich)

  • docker-compose.yml
  • Caddyfile
  • Caddy-Daten optional:
    • ./caddy/data & ./caddy/config (Zertifikate/State).
      Nicht zwingend nötig, aber spart manchmal Re-Issue/Rate-Limits.

🗂️ Backup erstellen (empfohlenes Vorgehen)

Annahme: Projekt liegt in /opt/bookstack und die Container heißen wie in deiner YAML:
bookstack-mariadb und bookstack.

Schritt 1: Backup-Ordner anlegen

cd /opt/bookstack
mkdir -p backups

Schritt 2: Datenbank als SQL dumpen 💾

docker exec -i bookstack-mariadb \
  mysqldump -u bookstack -pbookstack \
  --single-transaction --routines --triggers \
  bookstack > backups/bookstack-db-$(date +%F).sql

Wichtig: Ersetze -pbookstack durch dein echtes Passwort (aus MYSQL_PASSWORD).

Alternativ (sicherer, weil Passwort nicht in der Shell-History landet):
Lass -p... weg, dann fragt mysqldump interaktiv nach dem Passwort:

docker exec -it bookstack-mariadb mysqldump -u bookstack -p --single-transaction --routines --triggers bookstack > backups/bookstack-db-$(date +%F).sql

Schritt 3: Dateien/Volumes archivieren 📦

tar -czvf backups/bookstack-files-$(date +%F).tar.gz \
  docker-compose.yml Caddyfile \
  bookstack mariadb caddy

Wenn du Caddy nicht mitsichern willst, geht auch schlanker:

tar -czvf backups/bookstack-files-$(date +%F).tar.gz \
  docker-compose.yml Caddyfile \
  bookstack mariadb

Schritt 4: (Optional) Integritätscheck ✅

ls -lh backups/
head -n 5 backups/bookstack-db-*.sql
tar -tzf backups/bookstack-files-*.tar.gz | head

🔁 Restore (auf neuem Server) – inkl. Domain/URL-Umzug

Schritt 0: Voraussetzungen

  • Docker + Docker Compose installiert
  • DNS der neuen Domain zeigt auf den neuen Server (für HTTPS via Caddy)

Schritt 1: Backup rüberkopieren

Auf alten Server packen oder direkt kopieren:

scp -r /opt/bookstack/backups user@neuer-server:/opt/bookstack/

Schritt 2: Dateien wiederherstellen (Compose/Volumes) 📂

Auf dem neuen Server:

cd /opt/bookstack
tar -xvzf backups/bookstack-files-YYYY-MM-DD.tar.gz

(Datum natürlich anpassen.)


Schritt 3: Container starten (DB soll schon laufen) 🐳

cd /opt/bookstack
docker compose up -d mariadb

Warte ein paar Sekunden, bis MariaDB bereit ist.


Schritt 4: Datenbank importieren 🧩

cat backups/bookstack-db-YYYY-MM-DD.sql | \
  docker exec -i bookstack-mariadb mysql -u bookstack -pbookstack bookstack

Wieder: Passwort anpassen bzw. interaktiv nutzen.


Schritt 5: BookStack starten

docker compose up -d

🌍 Domain/URL geändert? (sehr wichtig!)

Wenn du auf eine andere URL/Domain umziehst, musst du:

1) APP_URL im .env anpassen

In deinem Volume liegt die .env typischerweise unter:

  • ./bookstack/www/.env (häufig bei linuxserver/bookstack)
  • oder ./bookstack/.env (je nach Image/Setup)

Suche sie so:

find /opt/bookstack/bookstack -maxdepth 3 -name ".env" -print

Dann APP_URL=https://neue-domain.tld setzen.

Achte darauf: Die APP_KEY muss die alte bleiben (sonst gehen u.a. verschlüsselte Daten kaputt, z. B. MFA-Secrets).

2) BookStack-Command: „Update System URL“

docker exec -it bookstack php /app/www/artisan bookstack:update-url https://alte-domain.tld https://neue-domain.tld

(Falls der Pfad im Container anders ist, funktioniert oft auch: php artisan ... aus /app/www.)


🧠 Praktische Hinweise (damit’s wirklich „umzugsicher“ ist)

  • Backup immer offsite speichern (anderes System/Storage).

  • Datenbank-Dump + Datei-Archive ist am portabelsten.

  • Wenn du auf eine neuere BookStack-Version wiederherstellst:

    1. Restore DB

    2. Container hoch

    3. Dann Migration laufen lassen (falls nötig):

      docker exec -it bookstack php /app/www/artisan migrate --force
      

Wenn du willst: Ich mache dir ein „1-Kommando-Backup-Skript“ 🧾

Sag mir kurz:

  • Liegt deine .env unter bookstack/www/.env?
  • Wie heißen deine Container wirklich (docker ps-Auszug)?
  • Willst du Caddy-Zertifikate mitsichern oder lieber nicht?

Dann gebe ich dir ein kleines Skript inkl. Rotation (z. B. „halte die letzten 7 Backups“) und optionalem Upload zu S3/Hetzner Storage Box.