Backup + Migration
❓
IIchinstalledhabe BookStackviaper Docker installiert (aswie inthederguideAnleitung).CouldKannstyoudupleasemirexplainbittehowerklären,towiecreateichbackupsBackups erstelle (avollständigecomplete content backup) so that I can migrate the website if needed, e.g.Inhaltssicherung),tosodassanotherichserver/domain?die Website bei Bedarf z.B. zu einem anderen Server/Domain umziehen kann?HereHierisistBookStack’sdieofficialoffizielleguide.Anleitung von BookStack.
FullVollständiges BookStack BookStack-Backup (Docker) —– soso, adass moveein toUmzug auf anotheranderen server/domainServer/Domain worksklappt 🧰📦
ForDu abrauchst für eine complete,komplette, restorablewiederherstellbare backupSicherung, youim essentially needWesentlichen twozwei componentsBausteine:
DatabaseDatenbank (allallepages,Seiten,books,Bücher,users,Nutzer,permissions,Rechte,settingsEinstellungen …)Files/configDateien/Config (uploads,Uploads,attachments,Anhänge,.env/APP_KEY,possiblyggf.themes/modules)Themes/Module)
SinceDa yourdu setupdas matchesSetup yourwie guidein deiner Anleitung hast (/opt/bookstack withmit docker-compose.yml, volumesVolumes ./mariadb andund ./bookstack), thisist isdas pleasantlyerfreulich simple.simpel.
✅ WhatWas exactlygenau needsmuss togesichert be backed up?werden?
1) DatabaseDatenbank (MariaDB)
TheInhaltcontentstecktisim DB-Container, inthedeinemDBSetupcontainer,dauerhaftand in your setup it’s persisted under:unter:./mariadb(asalsthe volumeVolume./mariadb:/config)
CleanestSaubersterapproachWeg:SQL dumpSQL-Dump (portable,portabel,tolerant across versions)versionstolerant)
2) FilesDateien (BookStack container volume)BookStack-Container-Volume)
PersistentPersistentedataDatenisliegenstoredbeiunder:dir unter:./bookstack(asalsthe volumeVolume./bookstack:/config)
InDarinparticular,sindtheseinsbesondereare important:wichtig:.env(including theinkl. APP_KEY!)uploads/attachmentsUploads/Attachmentspossiblyggf.www/themes/custom/...(yourdeinetweaks/modules)Hacks/Module)
3) Compose/Caddy (helpfulfür forden migration)Umzug hilfreich)
docker-compose.ymlCaddyfileCaddyCaddy-Datendata (optional):optional:./caddy/data&./caddy/config(certificates/state)Zertifikate/State).
NotNichtstrictlyzwingendrequirednötig,butabersometimesspartsavesmanchmalyou from re-issuing / rate limits.Re-Issue/Rate-Limits.
🗂️ CreateBackup a backuperstellen (recommendedempfohlenes approach)Vorgehen)
Assumption:Annahme:theProjektproject isliegt in/opt/bookstackandundthediecontainersContainerareheißennamed aswie inyourdeiner YAML:
bookstack-mariadbandundbookstack.
StepSchritt 1: CreateBackup-Ordner a backup folderanlegen
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 (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_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:
.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.