Ghost-Instanz umziehen: Von einem Docker-Server zum nächsten
Ein Serverwechsel muss kein Drama sein — auch nicht bei Ghost. Wer Ghost per Docker Compose mit MySQL 8 betreibt, hat einen klaren Vorteil: Alle Daten stecken in definierten Volumes, die Konfiguration liegt offen in der docker-compose.yml, und ein vollständiger Datenbankdump bringt wirklich alles mit — Beiträge, Einstellungen, Members, Newsletter-Abonnenten.
Was muss gesichert werden?
Zwei Dinge:
Die MySQL-Datenbank — hier steckt der gesamte Ghost-Datenbestand. Ein mysqldump sichert alles vollständig, Members inklusive.
Das Content-Verzeichnis — Bilder, Themes, Mediadateien. Bei Docker typischerweise als Volume unter /var/lib/ghost/content gemountet.
Schritt 1: Alten Server sichern
Ghost-Container stoppen, damit keine laufenden Schreibvorgänge den Dump verfälschen. Den Datenbankcontainer lässt man noch laufen:
docker compose stop ghost
Datenbankdump erstellen:
docker exec ghost-db mysqldump -u ghost -pPASSWORT ghost > ghost-db-backup.sql
Content-Volume sichern:
tar -czf ghost-content-backup.tar.gz /pfad/zum/volume/ghost_content/
Außerdem docker-compose.yml und .env sichern — die braucht man auf dem neuen Server als Vorlage.
Danach alles herunterfahren:
docker compose down
Schritt 2: Neuen Server vorbereiten
Docker und Docker Compose installieren, docker-compose.yml und .env vom alten Server übernehmen und ggf. anpassen (neue Domain, Pfade). Noch nicht starten.
Schritt 3: Daten übertragen
Backup-Dateien auf den neuen Server kopieren:
rsync -avz ghost-db-backup.sql ghost-content-backup.tar.gz user@neuer-server:/home/user/
Content-Archiv entpacken und ins Volume-Verzeichnis legen. Ghost läuft mit UID 1000, daher Rechte setzen:
tar -xzf ghost-content-backup.tar.gz
chown -R 1000:1000 ./ghost_content/
Schritt 4: Datenbank einspielen
Erst den Datenbankcontainer starten, Ghost noch zurückhalten:
docker compose up -d db
Kurz warten bis MySQL bereit ist, dann den Dump einspielen:
docker exec -i ghost-db mysql -u ghost -pPASSWORT ghost < ghost-db-backup.sql
Schritt 5: Ghost starten und prüfen
docker compose up -d
Im Browser prüfen:
- Alle Beiträge vorhanden?
- Bilder und Mediadateien korrekt?
- Backend unter
/ghosterreichbar? - Members und Newsletter-Abonnenten vollständig?
- Falls ActivityPub/Fediverse aktiv: Konfiguration auf neue Domain angepasst?
Schritt 6: DNS umstellen
Erst wenn alles geprüft ist, den DNS-Eintrag auf die neue Server-IP umbiegen. Den alten Server noch laufen lassen, bis die TTL ausgelaufen ist — praktischer Fallback ohne Aufwand.
SSL-Zertifikate stellt Certbot oder Traefik auf dem neuen Server automatisch aus, sobald der DNS-Eintrag greift.
Strukturiert angegangen ist ein Ghost-Umzug mit MySQL eine Routineaufgabe von unter einer Stunde. Der Dump macht's einfach: einmal raus, einmal rein, fertig.