Ghost-Instanz umziehen: Von einem Docker-Server zum nächsten

Ghost-Instanz umziehen: Von einem Docker-Server zum nächsten
Photo by Compagnons / Unsplash

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 /ghost erreichbar?
  • 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.