Wiki
Backup und Wiederherstellung
Wie QuoteNode Datenbank- und Dateibackups ausführt — Online-Backups, Wiederherstellung, Verschlüsselung und Remote-Storage.
Backup und Wiederherstellung
QuoteNode enthält ein integriertes Backup-System, das kaufmännische Daten gegen Hardwareausfälle, versehentliche Löschungen und operative Fehler schützt.
Was ein Backup enthält
Jedes Backup enthält drei Komponenten:
- Datenbank-Dump — ein vollständiger PostgreSQL-Dump im Custom-Format
- Dateispeicher — Uploads und erzeugte PDFs als
files.tar.gz - Integritätsmanifest — eine
checksums.sha256-Datei mit SHA-256-Prüfsummen
Online-Backup
Das Standard-Backup läuft ohne Downtime.
Dabei gilt:
pg_dumperzeugt einen transaktional konsistenten Snapshot der Datenbank, ohne Tabellen zu sperren- der Dateispeicher wird parallel archiviert
- beide Komponenten können vor der Ablage verschlüsselt werden
Einschränkungen:
- nicht abgeschlossene Transaktionen zum Zeitpunkt des Dumps landen nicht im Backup
- für die meisten Organisationen ist dieses Verhalten korrekt und ausreichend
Offline-Backup
Für maximale Konsistenz, etwa vor großen Upgrades:
- stoppen Sie die Anwendungskontainer,
- führen Sie
pg_dumpdirekt gegen PostgreSQL aus, - archivieren Sie die Dateivolumes,
- starten Sie die Anwendung erneut.
Das erfordert ein kurzes Wartungsfenster, eliminiert aber das Restrisiko gerade laufender Änderungen.
Zeitplanung
Backups werden vom Container backup-worker gesteuert, einer dedizierten Backend-Instanz im Modus backup-only:
- Standardzeitplan täglich um 2:00 Uhr
- Aktivierung über
BACKUP_ENABLED - manueller Trigger aus dem Admin-Panel oder per API
- Konkurrenzschutz über
SKIP LOCKED, damit nie mehrere Backups parallel laufen
Speicherziele
Lokaler Speicher
Backups werden standardmäßig in BACKUP_LOCAL_DIR gespeichert. Das genügt für Entwicklung und kleine Deployments.
In Produktion sollten lokale Backups durch eine externe Kopie ergänzt werden. Ein Backup auf derselben Disk wie die Datenbank schützt nicht vor Disk-Ausfall.
Remote-Storage via rclone
Wenn BACKUP_RCLONE_REMOTE gesetzt ist, werden Backups nach der Erstellung automatisch in einen Remote-Speicher hochgeladen.
Unterstützt werden unter anderem:
- S3-kompatible Systeme,
- Google Cloud Storage,
- Azure Blob Storage,
- SFTP,
- WebDAV.
Schlägt der Remote-Upload fehl, bleibt das lokale Backup erhalten.
Verschlüsselung
Backups können über GPG verschlüsselt werden:
- setzen Sie
BACKUP_GPG_RECIPIENT, - Datenbank-Dump und Dateiarchiv werden vor der Speicherung verschlüsselt,
- zur Entschlüsselung ist der passende private Schlüssel erforderlich.
Das ist besonders wichtig bei Backups in fremd verwalteter Cloud-Infrastruktur.
Metadaten und Audit
Jedes Backup, erfolgreich oder fehlgeschlagen, wird in backup_logs protokolliert.
Gespeichert werden unter anderem:
- Status,
- Auslöser,
- Start- und Endzeit,
- Größe,
- Zielpfad,
- Checksumme,
- Fehlermeldung.
Wiederherstellung
Vollständiges Restore
- stoppen Sie alle Container:
docker compose down - stellen Sie die Datenbank wieder her:
pg_restore --clean --if-exists -d quotenode backup.dump - entpacken Sie den Dateispeicher:
tar xzf files.tar.gz -C /app/data/ - starten Sie die Container neu:
docker compose up -d - prüfen Sie die Checksums gegen das Manifest.
Teilweises Restore
Custom-Format-Dumps erlauben die Wiederherstellung einzelner Tabellen oder Datensätze, was beim gezielten Recover versehentlich gelöschter Informationen hilfreich ist.
Verschlüsselte Backups
Entschlüsseln Sie zuerst:
gpg --decrypt backup.dump.gpg > backup.dump
gpg --decrypt files.tar.gz.gpg > files.tar.gz
Danach folgt die normale Restore-Prozedur.
Backup-Timeout
Jeder Backup-Lauf hat ein Zeitlimit von 30 Minuten. Wird dieses überschritten, bricht das System den Lauf ab und markiert ihn als FAILED.
Backups herunterladen
Administratoren können Backup-Archive direkt im Admin-Panel herunterladen:
- öffnen Sie Settings > Backup
- wählen Sie ein erfolgreiches Backup aus
- klicken Sie auf Download
Das .tar.gz-Archiv enthält Datenbank-Dump, Dateispeicher und Integritätsmanifest. Behandeln Sie diese Datei wie einen kompletten Auszug Ihrer Geschäftsdaten.
Aufbewahrung
Alte lokale Backups werden nach jedem erfolgreichen Lauf automatisch bereinigt. Gesteuert wird das über BACKUP_RETENTION_DAILY.
Remote-Backups werden von QuoteNode nicht gelöscht — dort sollte die Retention-Policy beim Storage-Anbieter definiert werden.
Disaster Recovery von Grund auf
Wenn der ursprüngliche Server verloren ist und nur noch das Backup-Archiv und ein neuer Docker-Server existieren:
Schritt 1 — neuen Server vorbereiten
Legen Sie Projektverzeichnis, docker-compose.yml und .env wie im Installationsleitfaden beschrieben an.
Kritisch: Verwenden Sie denselben
DB_ENCRYPTION_KEYwie in der ursprünglichen Installation. Ohne ihn bleiben verschlüsselte Daten unlesbar.
Schritt 2 — Backup kopieren
Übertragen Sie das Archiv per scp, rsync oder ein anderes Transferwerkzeug auf den neuen Server.
Schritt 3 — Restore-Skript bereitstellen
cp /path/to/your/quotenode-repository/scripts/restore.sh .
chmod +x restore.sh
Wenn sich das Repository auf einer anderen Workstation befindet, kopieren Sie dieselbe Datei zuerst auf den Server.
Schritt 4 — Restore ausführen
./restore.sh --fresh-install ~/quotenode/quotenode-backup-20260320.tar.gz
Das Skript:
- startet die Datenbank,
- wartet auf Bereitschaft,
- spielt den Dump ein,
- startet den gesamten Stack,
- stellt Dateien und PDFs wieder her,
- führt einen Health Check aus.
Schritt 5 — prüfen
Öffnen Sie die Domain, melden Sie sich an und kontrollieren Sie, ob Kunden, Angebote, Produkte und Einstellungen dem Zustand des Backups entsprechen.
Dry Run
RESTORE_DRY_RUN=true ./restore.sh --fresh-install backup-file.tar.gz
Damit werden Archiv, Checksums und Restore-Plan geprüft, ohne Datenbank oder Dateispeicher zu verändern.
Empfohlene Strategie
Für Produktion:
- tägliche automatische Backups aktivieren,
- Remote-Storage ergänzen,
- Backups außerhalb der eigenen Infrastruktur verschlüsseln,
- Restore regelmäßig testen,
- Backup-Logs überwachen,
- mindestens 7 Tage Backup-Historie behalten.