Darstellung
Sichern und Wiederherstellen
Was du sichern musst
Genau drei Volumes:
| Volume | Inhalt |
|---|---|
postdog-secrets | der Keystore, das Datenbank-Kennwort, das Geheimnis für Besprechungen |
postdog-mysql | die Datenbank: Domains, Verteiler, Empfänger, Historie, Chat, Kalender |
postdog-maildirs | die Postfächer |
Dazu lohnen sich:
| Was | Warum |
|---|---|
postdog-dkim | die DKIM-Schlüssel. Lassen sich neu erzeugen – dann muss aber für jede Domain der DNS-Eintrag neu gesetzt werden. |
postdog-certs | die Zertifikate. Lassen sich neu holen. |
/opt/postdog | .env mit Lizenz und Image, docker-compose.yml |
Der Keystore ist nicht wiederherstellbar
Empfängernamen, Mailadressen und weitere Felder liegen verschlüsselt in der Datenbank. Der Schlüssel dazu ist der Keystore in postdog-secrets. Geht er verloren, sind diese Daten weg – auch für POSTDOG. Es gibt keine Kopie bei uns und keinen Weg darum herum.
Keystore und Datenbank nicht am selben Ort
Wer beide hat, kann alles lesen. Lege die Sicherung von postdog-secrets getrennt ab, zum Beispiel verschlüsselt und außer Haus.
Volumes und down -v
Die Volumes gehören nicht zu compose, sondern sind als external eingetragen. docker compose down -v lässt sie deshalb stehen. Gewöhn dir das -v trotzdem nicht an: auf einer anderen Installation löscht es genau das.
Zum Anhalten reicht:
sh
cd /opt/postdog && docker compose downSichern
Alles, im Stillstand
Am einfachsten und in sich stimmig: POSTDOG kurz anhalten, die Volumes als Archiv wegschreiben, wieder starten. Andere Mailserver stellen in der Zwischenzeit nicht ab, sondern versuchen es später noch einmal.
sh
mkdir -p /root/postdog-sicherung
cd /opt/postdog && docker compose stop
for v in postdog-secrets postdog-mysql postdog-maildirs postdog-dkim postdog-certs; do
docker run --rm -v "$v":/quelle:ro -v /root/postdog-sicherung:/ziel debian:bookworm-slim \
tar --numeric-owner -czf "/ziel/$v.tar.gz" -C /quelle .
done
docker compose start
cp /opt/postdog/.env /opt/postdog/docker-compose.yml /root/postdog-sicherung//root/postdog-sicherung ist nur ein Beispiel. Von dort gehört es auf eine andere Maschine.
Die Datenbank im laufenden Betrieb
Für tägliche Sicherungen ohne Stillstand ein Dump aus dem laufenden Container:
sh
docker exec postdog-data sh -c \
'exec mysqldump -u postdog -p"$(cat /run/secrets/db.password)" --single-transaction --no-tablespaces postdog' \
| gzip > /root/postdog-sicherung/postdog-$(date +%F).sql.gzEin Dump ersetzt postdog-secrets nicht: ohne den Keystore ist er nur zur Hälfte lesbar.
Wiederherstellen
Auf einer neuen Maschine
Die Reihenfolge ist wichtig: erst die Volumes, dann das Installationsskript. Findet das Skript keine Volumes, legt es leere an und erzeugt einen neuen Keystore.
Docker installieren, falls noch nicht da.
Volumes anlegen und füllen:
shfor v in postdog-secrets postdog-mysql postdog-maildirs postdog-dkim postdog-certs; do docker volume create "$v" docker run --rm -v "$v":/ziel -v /root/postdog-sicherung:/quelle:ro debian:bookworm-slim \ tar --numeric-owner -xzf "/quelle/$v.tar.gz" -C /ziel doneDie Konfiguration zurücklegen:
shmkdir -p /opt/postdog cp /root/postdog-sicherung/.env /root/postdog-sicherung/docker-compose.yml /opt/postdog/Ist die neue Maschine anders aufgebaut als die alte – direkt auf 80/443 statt hinter Apache oder nginx oder umgekehrt –, lass die
.envweg. Das Skript schreibt dann eine passende. Übernimm danach aus der alten nurPOSTDOG_IMAGE, damit dieselbe Version läuft wie vorher.Die Installationszeile starten. Sie meldet sich an, holt das Image, findet die Geheimnisse vor, startet und bindet sich in den Webserver ein.
DNS auf die neue Adresse umstellen, PTR beim Anbieter neu setzen (siehe DNS-Einträge).
Nur die Datenbank
Aus einem Dump, bei laufendem postdog-data:
sh
cd /opt/postdog && docker compose stop core
gunzip -c /root/postdog-sicherung/postdog-<datum>.sql.gz \
| docker exec -i postdog-data sh -c 'exec mysql -u postdog -p"$(cat /run/secrets/db.password)" postdog'
docker compose start coreDer Dump passt nur zu dem Keystore, mit dem er entstanden ist.
Der Schutz im Skript
Ist postdog-secrets neu, postdog-mysql aber schon da, bricht das Installationsskript ab:
FEHLER: Das Volume postdog-secrets ist neu, postdog-mysql gibt es aber schon.Ein neuer Keystore neben einer vorhandenen Datenbank würde deren Daten unlesbar machen.
Nicht einfach noch einmal starten
Das Skript hat postdog-secrets vor dem Abbruch schon leer angelegt. Beim nächsten Lauf gilt es als vorhanden, der Schutz greift nicht mehr – und es entsteht ein neuer Keystore. Spiel deshalb erst die Sicherung in das Volume zurück (Schritt 2 oben, nur für postdog-secrets) und starte dann das Skript.