Sichern & Wiederherstellen

Was Ihre Daten in einer selbst gehosteten Conzent OCI-Installation speichert, wie Sie sie regelmäßig sichern und wie Sie sie auf einem neuen Server wiederherstellen können.

Sichern & Wiederherstellen

Alles, was Conzent speichert, befindet sich in Docker-Volumes und einer Konfigurationsdatei. Diese Seite behandelt, was es wert ist, gesichert zu werden, wie man es automatisiert und wie man alles zurückbekommt.

Was Ihre Daten tatsächlich speichert

Docker Compose erstellt fünf benannte Volumes. Nur zwei enthalten etwas, das Sie nicht wiederherstellen können.

Volume / Datei Inhalt Sichern?
oci-db-data MariaDB: Seiten, Banner, Einwilligungsprotokolle, Cookie-Kategorien, Richtlinien, Benutzer, Scan-Ergebnisse Ja — das ist alles
app-sites-data Generierte Einwilligungsskripte Ja, obwohl regenerierbar
.env Datenbankpasswort, Scanner-Schlüssel, Drittanbieter-Anmeldeinformationen Ja — unersetzlich
app-public Erstellte CSS/JS-Ressourcen Nein — wird aus dem Image neu erstellt
app-var Cache und Protokolle Nein
oci-redis-data Sitzungen, Job-Warteschlange, Beacon-Puffer Nein — absichtlich flüchtig

scripts/backup.sh erfasst genau die ersten drei, plus .conzent-credentials, falls es noch existiert.

Einwilligungsskripte sind enthalten, da deren Wiederherstellung die aktiven Banner während der Minuten zwischen einer Wiederherstellung und einer Regeneration funktionsfähig hält — sie sind jedoch nicht die Quelle der Wahrheit. Wenn sie vollständig verloren gehen, kann php bin/oci scripts:regenerate jedes einzelne aus der Datenbank neu erstellen.

Ein Backup erstellen

bash scripts/backup.sh

Das schreibt backups/conzent-YYYYmmdd-HHMMSS.tar.gz, das das vollständige Datenbank-Dump, die generierten Einwilligungsskripte, Ihre .env und ein Manifest enthält, das aufzeichnet, wann es erstellt wurde und von welchem APP_URL.

bash scripts/backup.sh --output /mnt/backups     # woanders speichern
bash scripts/backup.sh --keep 14                 # nur die 14 neuesten Archive behalten

Das Dump verwendet --single-transaction, sodass InnoDB-Tabellen konsistent erfasst werden, ohne Schreibvorgänge zu blockieren. Es ist nicht notwendig, die Anwendung zuerst zu stoppen.

Das Archiv enthält Ihre Datenbank und Ihre Geheimnisse. Es wird im Modus 600 geschrieben. Behandeln Sie es wie eine Passwortdatei: Bewahren Sie es außerhalb des Servers auf und verschlüsseln Sie es, wenn es irgendwo geteilt wird.

Automatisierung

Ein nächtliches Backup um 03:00, das zwei Wochen aufbewahrt:

0 3 * * * cd /path/to/conzent && /bin/bash scripts/backup.sh --keep 14 >> /var/log/conzent-backup.log 2>&1

Verwenden Sie den absoluten Pfad zu Ihrem Installationsverzeichnis — Cron erbt nicht das Arbeitsverzeichnis Ihrer Shell.

Ein Backup auf derselben Festplatte wie die Datenbank ist kein Backup. Fügen Sie einen Offsite-Schritt hinzu:

15 3 * * * rsync -az /path/to/conzent/backups/ backup-host:/srv/conzent-backups/

Verschlüsseln Sie, bevor es Ihr Ziel verlässt, wenn es nicht Ihnen gehört: gpg --symmetric --cipher-algo AES256 backups/conzent-....tar.gz.

Wiederherstellung

bash scripts/restore.sh backups/conzent-20260722-030000.tar.gz --yes

--yes ist obligatorisch — die Wiederherstellung ersetzt die aktuelle Datenbank vollständig. Was es tut, in der Reihenfolge:

  1. Entpackt und validiert das Archiv und druckt sein Manifest.
  2. Stoppt die Anwendungscontainer und lässt MariaDB weiterlaufen.
  3. Importiert das Dump in die in Ihrer aktuellen .env angegebene Datenbank.
  4. Stellt das Einwilligungsskripte-Volume wieder her.
  5. Startet alles wieder.
  6. Führt migrations:migrate aus, sodass ein älteres Archiv auf das Schema gebracht wird, das diese Version erwartet.
  7. Führt scripts:regenerate aus, sodass Skripte gegen Ihre aktuelle APP_URL neu erstellt werden, nicht die im Archiv.
  8. Leert Redis.

Schritte 6 und 7 sind der Grund, warum ein Backup, das auf old-domain.com erstellt wurde, sauber auf einer Installation wiederhergestellt wird, die jetzt consent.example.com bedient.

Standardmäßig bleibt Ihre vorhandene .env unberührt. Um auch die Version des Archivs zu übernehmen, fügen Sie --restore-env hinzu; Ihre vorherige Datei wird als .env.before-restore-<timestamp> aufbewahrt. Verwenden Sie diese, wenn Sie einen verlorenen Server wiederherstellen, nicht wenn Sie Daten auf einem funktionierenden zurücksetzen — das archivierte DB_PASSWORD wird nicht mit einer frisch initialisierten Datenbank übereinstimmen.

Ein Server von Grund auf neu aufbauen

# 1. Frische Installation auf der neuen Maschine
curl -sSL https://getconzent.com/install | sh -s -- --domain consent.example.com

# 2. Archiv übertragen
scp backups/conzent-20260722-030000.tar.gz newhost:/root/conzent/

# 3. Daten und Konfiguration wiederherstellen
cd /root/conzent
bash scripts/restore.sh conzent-20260722-030000.tar.gz --yes --restore-env

# 4. Wenn sich die Domain geändert hat, setzen Sie sie und regenerieren Sie
sed -i 's|^APP_URL=.*|APP_URL=https://consent.example.com|' .env
docker compose up -d
docker compose exec app php bin/oci scripts:regenerate

Ein Wiederherstellungsdrill durchführen

Ein ungetestetes Backup ist ein Ratespiel. Machen Sie dies einmal, bevor Sie es benötigen:

  1. Notieren Sie sich einen Seitennamen, dessen Banner-Einstellungen und die Anzahl der Einwilligungsprotokolle von heute.
  2. Erstellen Sie ein Backup.
  3. Installieren Sie auf einer separaten Maschine oder VM frisch und stellen Sie das Archiv wieder her.
  4. Melden Sie sich an und bestätigen Sie, dass die Seite, die Bannerkonfiguration und die Einwilligungsprotokolle alle vorhanden sind.
  5. Laden Sie eine Seite, die das Embed dieser Seite enthält, und überprüfen Sie, ob das Banner weiterhin angezeigt wird.

Zehn Minuten jetzt, im Vergleich dazu, die Lücke während eines Vorfalls zu entdecken.

Vor jedem Upgrade

Updates bewahren Ihre Datenbank, aber machen Sie trotzdem zuerst ein Backup — eine Migration ist das eine, was eine Wiederherstellung nicht rückgängig machen kann:

bash scripts/backup.sh --keep 14 && bash scripts/install.sh --update

Die vollständige Referenz befindet sich im Code: docs/backup-restore.md auf GitHub.

Zur Dokumentation zurück