Skip to content

Sichern und Wiederherstellen ​

Was du sichern musst ​

Genau drei Volumes:

VolumeInhalt
postdog-secretsder Keystore, das Datenbank-Kennwort, das Geheimnis für Besprechungen
postdog-mysqldie Datenbank: Domains, Verteiler, Empfänger, Historie, Chat, Kalender
postdog-maildirsdie Postfächer

Dazu lohnen sich:

WasWarum
postdog-dkimdie DKIM-Schlüssel. Lassen sich neu erzeugen – dann muss aber für jede Domain der DNS-Eintrag neu gesetzt werden.
postdog-certsdie 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 down

Sichern ​

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.gz

Ein 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.

  1. Docker installieren, falls noch nicht da.

  2. Volumes anlegen und füllen:

    sh
    for 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
    done
  3. Die Konfiguration zurücklegen:

    sh
    mkdir -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 .env weg. Das Skript schreibt dann eine passende. Übernimm danach aus der alten nur POSTDOG_IMAGE, damit dieselbe Version läuft wie vorher.

  4. Die Installationszeile starten. Sie meldet sich an, holt das Image, findet die Geheimnisse vor, startet und bindet sich in den Webserver ein.

  5. 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 core

Der 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.

POSTDOG – Mail, Verteiler, Chat und Besprechungen auf deinem eigenen Server.