Backup + Migration
❓
IchIhabeinstalled BookStackpervia Dockerinstalliert(wieas indertheAnleitungguide).KannstCouldduyoumirpleasebitteexplainerklären,howwietoichcreateBackups erstellebackups (vollständigeaInhaltssicherung)complete content backup) so that I can migrate the website if needed, e.g.,sodasstoichanotherdie Website bei Bedarf z.B. zu einem anderen Server/Domain umziehen kann?server/domain?HierHereistisdieBookStack’soffizielleofficialAnleitung 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:
DatenbankDatabase (alleallSeiten,pages,Bücher,books,Nutzer,users,Rechte,permissions,Einstellungensettings …)Dateien/ConfigFiles/config (Uploads,uploads,Anhänge,attachments,.env/APP_KEY,ggf.possiblyThemes/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)
InhaltThestecktcontentim DB-Container,is indeinemtheSetupDBdauerhaftcontainer,unter:and in your setup it’s persisted under:./mariadb(alsasVolumethe volume./mariadb:/config)
SaubersterCleanestWegapproach:SQL-DumpSQL dump (portabel,portable,versionstolerant)tolerant across versions)
2) DateienFiles (BookStack-Container-Volume)BookStack container volume)
PersistentePersistentDatendataliegenisbeistoreddir unter:under:./bookstack(alsasVolumethe volume./bookstack:/config)
DarinInsindparticular,insbesonderethesewichtig:are important:.env(inkl.including the APP_KEY!)Uploads/Attachmentsuploads/attachmentsggf.possiblywww/themes/custom/...(deineyourHacks/Module)tweaks/modules)
3) Compose/Caddy (fürhelpful denfor Umzug hilfreich)migration)
docker-compose.ymlCaddyfileCaddy-DatenCaddyoptional:data (optional):./caddy/data&./caddy/config(Zertifikate/State)certificates/state).
NichtNotzwingendstrictlynötigrequired,aberbutspartsometimesmanchmalsavesRe-Issue/Rate-Limits.you from re-issuing / rate limits.
🗂️ BackupCreate erstellena backup (empfohlenesrecommended Vorgehen)approach)
Annahme:Assumption:Projekttheliegtproject is in/opt/bookstackundanddietheContainercontainersheißenarewienamed as indeineryour YAML:
bookstack-mariadbundandbookstack.
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 fragtmysqldumpinteraktiv 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
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./bookstack/.envSuche sie so:
find /opt/bookstack/bookstack -maxdepth 3 -name ".env" -print
Dann APP_URL=https://neue-domain.tld setzen.
Achte darauf:DieAPP_KEYmuss die alte bleiben(sonst gehen u.a. verschlüsselte Daten kaputt, z. B. MFA-Secrets).
2) BookStack-Command: „Update System URL“
Damit Inhalte/Links in der DB sauber umgeschrieben werden:
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:
.envbookstack/www/.envdocker psDann gebe ich dir ein kleines Skript inkl. Rotation (z. B. „halte die letzten 7 Backups“) und optionalem Upload zu S3/Hetzner Storage Box.