Zum Inhalt springen

Backup & Wiederherstellung

Orimora enthält ein automatisches Backup-System, das tägliche Datenbank-Dumps und wöchentliche Markdown-Exporte erstellt.

Füge die folgenden Umgebungsvariablen zu deiner .env-Datei hinzu:

Terminal-Fenster
BACKUP_ENABLED=true
BACKUP_PATH=/backups/orimora
BACKUP_RETENTION_DAILY=7
BACKUP_RETENTION_WEEKLY=4
BACKUP_SCHEDULE=0 3 * * *
VariableBeschreibungStandard
BACKUP_ENABLEDAutomatische Backups aktivierentrue in Prod
BACKUP_PATHVerzeichnis für Backup-Dateien/backups/orimora
BACKUP_RETENTION_DAILYAnzahl täglicher DB-Dumps7
BACKUP_RETENTION_WEEKLYAnzahl wöchentlicher Markdown-Exporte4
BACKUP_SCHEDULECron-Ausdruck (UTC)0 3 * * *
BACKUP_S3_BUCKETGeparst, aber nicht verdrahtet — für S3-kompatibles Off-Site BACKUP_RCLONE_REMOTE nutzen (rclone erreicht S3-Ziele)nicht gesetzt
BACKUP_RCLONE_REMOTErclone-Remote für verschlüsselte Off-Site-Kopien (S3-frei)nicht gesetzt
BACKUP_POST_HOOKBefehl mit jedem Egress-Artefaktpfad (Ziele, die rclone nicht erreicht)nicht gesetzt
BACKUP_PG_DUMP_TIMEOUT_MSTimeout für pg_dump (ms)300000 (5 Min.)

Ein vollständiger PostgreSQL-Dump mit pg_dump --format=custom. Dies ist die primäre Backup-Methode und erfasst alle Daten einschließlich Dokumente, Benutzer, Einstellungen und Metadaten.

Jeden Sonntag exportiert Orimora alle Sammlungen als ZIP-Dateien mit Markdown-Dateien und YAML-Frontmatter. Diese sind menschenlesbar und können in andere Systeme (einschließlich Obsidian) importiert werden.

Anhänge werden neben dem Datenbank-Dump als uploads-<ts>.tar.gz archiviert, sodass eine einzige Wiederherstellung Dokumente und ihre Bilder zurückbringt.

Bei STORAGE_DRIVER=s3 liegen Uploads im Bucket, nicht auf der lokalen Platte — deshalb zeigt Einstellungen → Admin → Backups eine Uploads-Sicherungs-Wahl:

  • Provider-verwaltet (Default) — den Bucket über seine eigene Versionierung / Replikation sichern. Orimora überspringt das Uploads-Archiv (und vermerkt das im Log), statt ein leeres zu schreiben.
  • In Backups replizieren — Orimora lädt bei jedem Lauf den ganzen Bucket ins Uploads-Archiv, sodass dieselbe Verschlüsselungs- + Off-Site-Pipeline greift. Schwerer (Egress pro Lauf); am besten für kleine Buckets oder eine Kopie außerhalb deines S3-Providers.

Sessions und Queues sind flüchtig — nicht Teil des Backup-Sets. Nutzer melden sich nach einer Wiederherstellung einfach neu an, und der BullMQ-Backup-Scheduler registriert sich beim Boot selbst neu. Keine Redis-Wiederherstellung nötig.

Das ist der Teil, der aus „ich habe einen Dump auf derselben Maschine” echte Notfallwiederherstellung macht. Ohne eine Off-Site-, verschlüsselte Kopie verliert ein Host-Verlust oder Ransomware-Vorfall alles.

Off-Site-Kopien und der In-App-Download-Button sind mit age verschlüsselt. Bei der Einrichtung zeigt Einstellungen → Admin → Backups den Recovery-Code (einen privaten AGE-SECRET-KEY-…-Schlüssel) einmalig an.

Setze BACKUP_RCLONE_REMOTE auf ein rclone-Remote, dann repliziert Orimora jedes verschlüsselte Artefakt off-host. rclone unterstützt SFTP, Backblaze B2, WebDAV/Nextcloud und Dutzende S3-freie Backends — konfigurierbar in der App unter Einstellungen → Admin → Backups oder per rclone config. Rezepte und das sicherste „vom gehärteten Backup-Host ziehen”-Muster stehen im Notfallwiederherstellungs-Runbook.

Navigiere zu Einstellungen → Admin → Backups, um:

  • Aktuellen Backup-Status und Gesundheit einzusehen
  • Backup-Verlauf durchzusehen
  • Manuell ein Backup auszulösen
  • Den Recovery-Code anzuzeigen und zu kopieren (einmalig bei der Einrichtung)
  • Das Off-Site-Ziel (rclone-Remote) zu konfigurieren und einen Verbindungstest zu fahren
  • Das letzte Backup zu verifizieren (zerstörungsfreier Integritätscheck) und der geführten Wiederherstellung zu folgen
Terminal-Fenster
# Anwendung stoppen
docker compose stop app
# Datenbank wiederherstellen
pg_restore --clean --if-exists --dbname=knowledgebase /backups/orimora/orimora-db-ZEITSTEMPEL.dump
# Uploads wiederherstellen
rsync -av /backup-quelle/uploads/ /app/uploads/
# Neu starten
docker compose up -d app

Importiere eine Markdown-ZIP-Datei über Einstellungen → Sammlung → Import.

Nutze die integrierte Revisionsverlauf-Funktion, um eine frühere Version eines Dokuments wiederherzustellen.

Das System warnt, wenn das letzte erfolgreiche Backup älter als 48 Stunden ist. Nutze die Status-API für externes Monitoring:

Terminal-Fenster
GET /api/admin/backup.status

Gibt healthOk: true/false und Details zum letzten Backup zurück.

KennzahlZielGetrieben von
RPO (max. Datenverlust)24 hTägliches Backup um 03:00 UTC (BACKUP_SCHEDULE)
RTO (max. Ausfallzeit)4 hManuelle Wiederherstellung + Boot, mit dem Runbook zur Hand

Den vollständigen Schritt-für-Schritt-Ablauf (entschlüsseln → pg_restore → Uploads → Boot), Fehlerszenarien, Off-Site-rclone-Rezepte und die monatliche Drill-Checkliste findest du im Notfallwiederherstellungs-Runbook.