Skip to main content

Backup + Migration

IchI habeinstalled BookStack pervia Docker installiert (wieas in derthe Anleitungguide). KannstCould duyou mirplease bitteexplain erklären,how wieto ichcreate Backups erstellebackups (vollständigea Inhaltssicherung)complete content backup) so that I can migrate the website if needed, e.g., sodassto ichanother die Website bei Bedarf z.B. zu einem anderen Server/Domain umziehen kann?server/domain? HierHere istis dieBookStack’s offizielleofficial Anleitung von BookStack.guide.

VollständigesFull BookStack-BookStack Backup (Docker) so,so dassa einmove Umzug aufto anderenanother Server/Domainserver/domain klapptworks 🧰📦

DuFor brauchst für einea komplette,complete, wiederherstellbarerestorable Sicherungbackup, imyou Wesentlichenessentially need zweitwo Bausteinecomponents:

  1. DatenbankDatabase (alleall Seiten,pages, Bücher,books, Nutzer,users, Rechte,permissions, Einstellungensettings …)
  2. Dateien/ConfigFiles/config (Uploads,uploads, Anhänge,attachments, .env/APP_KEY, ggf.possibly Themes/Module)themes/modules)

DaSince duyour dassetup Setupmatches wieyour in deiner Anleitung hastguide (/opt/bookstack mitwith docker-compose.yml, Volumesvolumes ./mariadb undand ./bookstack), istthis dasis erfreulichpleasantly simpel.simple.


WasWhat genauexactly mussneeds gesichertto werden?be backed up?

1) DatenbankDatabase (MariaDB)

  • InhaltThe stecktcontent im DB-Container,is in deinemthe SetupDB dauerhaftcontainer, unter:and in your setup it’s persisted under:
    • ./mariadb (alsas Volumethe volume ./mariadb:/config)
  • SaubersterCleanest Wegapproach: SQL-DumpSQL dump (portabel,portable, versionstolerant)tolerant across versions)

2) DateienFiles (BookStack-Container-Volume)BookStack container volume)

  • PersistentePersistent Datendata liegenis beistored dir unter:under:
    • ./bookstack (alsas Volumethe volume ./bookstack:/config)
  • DarinIn sindparticular, insbesonderethese wichtig:are important:
    • .env (inkl.including the APP_KEY!)
    • Uploads/Attachmentsuploads/attachments
    • ggf.possibly www/themes/custom/... (deineyour Hacks/Module)tweaks/modules)

3) Compose/Caddy (fürhelpful denfor Umzug hilfreich)migration)

  • docker-compose.yml
  • Caddyfile
  • Caddy-DatenCaddy optional:data (optional):
    • ./caddy/data & ./caddy/config (Zertifikate/State)certificates/state).
      NichtNot zwingendstrictly nötigrequired, aberbut spartsometimes manchmalsaves Re-Issue/Rate-Limits.you from re-issuing / rate limits.

🗂️ BackupCreate erstellena backup (empfohlenesrecommended Vorgehen)approach)

Annahme:Assumption: Projektthe liegtproject is in /opt/bookstack undand diethe Containercontainers heißenare wienamed as in deineryour YAML:
bookstack-mariadb undand bookstack.

SchrittStep 1: Backup-OrdnerCreate anlegena backup folder

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:

          Restore DB

          Container hoch

          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.