Zum Hauptinhalt springen

Backup und Wiederherstellung

PlantPulse Studio verwaltet den gesamten Zustand mit einem Backup-Skript und einem Wiederherstellungsskript. Alle Befehle werden im Installationsverzeichnis (/opt/kopens/plantpulse-studio-docker) ausgeführt.


Was wird gesichert​

Eine einzelne Backup-Datei (dist/backup-<date>.tar.gz) enthält alles Folgende.

ZielInhalt
Vollständiger PostgreSQL-DumpBenutzerkonten · Chat-Verläufe · Watcher · Gelesen-Status von Benachrichtigungen · Skills · Bereitstellungsverlauf · Audit-Logs
Workspace(workspaces/)Projektspezifischer Quellcode · Chat-Anhänge
Build-Artefakte(builds/)Jede Version der bereitgestellten Apps (für Rollback erforderlich)
Statusverzeichnis(state/)settings.json(Konfiguration) · Audit-/Nutzungslogs · Benutzerdefinierte Vorlagen · Branding-Logos

Das Datenverzeichnis von PostgreSQL selbst ist vom Archiv ausgeschlossen — es wird durch den SQL-Dump ersetzt.

Backup-Dateien sind sensible Daten

Das Archiv enthält die Workspaces aller Benutzer vollständig, und wenn es von einer älteren Installation stammt, können in settings.json API-Schlüssel verbleiben.

  • Das Skript erstellt die Backup-Datei mit 600(nur für den Eigentümer lesbar) und setzt das Verzeichnis dist/ auf 700.
  • Beibehalten dieser Berechtigungen auch beim Übertragen auf externe Medien oder andere Server. (Optionen zur Berechtigungserhaltung verwenden, z. B. scp -p, rsync -a, tar -p)
  • Bei einer Übertragung nach außerhalb wird eine separate Verschlüsselung empfohlen.

Backup ausführen​

cd /opt/kopens/plantpulse-studio-docker
bash bin/backup.sh
▶ PostgreSQL 덤프
▶ 파일 상태 아카이브(postgres 데이터 제외 — 덤프로 대체)
-rw------- 1 root root 78M ... dist/backup-20260728-031501.tar.gz
✅ 백업 완료 (보존 14개)
  • Ergebnis: dist/backup-<YYYYMMDD-HHMMSS>.tar.gz
  • Aufbewahrungsrichtlinie: Es werden nur die neuesten 14 Dateien behalten, ältere werden automatisch gelöscht (einstellbar über BACKUP_KEEP).
  • Auf das externe PostgreSQL muss zugegriffen werden können, damit der Dump erstellt werden kann.
BACKUP_KEEP=30 bash bin/backup.sh # 이번 실행부터 30개 보존
Vor Updates immer manuelles Backup

Vor einem Image-Upgrade oder einer größeren Konfigurationsänderung bash bin/backup.sh einmal ausführen.


Automatisches Backup einrichten (empfohlen)​

Ein Cron wird installiert, der täglich um 03:30 Uhr ein Backup ausführt. Root-Rechte sind erforderlich.

sudo bash bin/install-backup-cron.sh
[backup-cron] 설치 완료 — 스케줄: '30 3 * * *', 보존 14개, 로그: dist/backup.log

Um Zeit und Aufbewahrungsanzahl zu ändern:

sudo BACKUP_CRON="0 4 * * *" BACKUP_KEEP=30 bash bin/install-backup-cron.sh

Entfernen:

sudo bash bin/install-backup-cron.sh remove

Die Funktion wird über das Log überprüft.

tail -50 /opt/kopens/plantpulse-studio-docker/dist/backup.log
ls -lh /opt/kopens/plantpulse-studio-docker/dist/backup-*.tar.gz

Empfohlener Betriebszyklus​

ZyklusAufgabe
TäglichAutomatisches Backup (cron) — 14 Tage Aufbewahrung
WöchentlichNeuestes Backup 1x auf anderen Server / anderes Medium kopieren(Berechtigungen beibehalten)
Monatlichdist/-Kapazität und freien Festplattenplatz prüfen
QuartalsweiseDRYRUN=1 Wiederherstellungsprobe — siehe unten
Vor Updates1 manuelles Backup
Backup ist nur ein Backup, wenn es wiederherstellbar ist

Selbst wenn Backup-Dateien täglich anfallen, weiß man nicht, ob sie tatsächlich wiederherstellbar sind, bevor man es ausprobiert. Führen Sie die Probe quartalsweise durch. Sie ist nicht destruktiv und kann gefahrlos im laufenden Betrieb ausgeführt werden.


Wiederherstellungsprobe (nicht destruktiv)​

Es werden nur die Archivstruktur und die Erreichbarkeit der Datenbank geprüft, nichts wird geändert.

DRYRUN=1 bash bin/restore.sh # 최신 백업 대상
DRYRUN=1 bash bin/restore.sh dist/backup-20260712-191858.tar.gz
▶ 아카이브 검증
ppstudio.sql 12M · files.tar.gz 66M
▶ DRYRUN — DB 도달성만 확인
✅ DB 도달 OK
✅ DRYRUN 통과 — 실제 복구는 DRYRUN 없이 실행

Wiederherstellung ausführen​

Wiederherstellung ist destruktiv

Der aktuelle Datenbankinhalt und das gesamte Datenverzeichnis werden mit dem Stand des Backups überschrieben. Projekte, Chats und Bereitstellungen, die nach dem Backup erstellt wurden, gehen verloren.

cd /opt/kopens/plantpulse-studio-docker

bash bin/restore.sh # 최신 백업으로 복구
bash bin/restore.sh dist/backup-20260712-191858.tar.gz # 특정 시점으로 복구

Zur Bestätigungsaufforderung muss restore eingegeben werden, um fortzufahren.

⚠ 현재 DB 와 /var/lib/pp-studio 파일 상태를 이 백업으로 덮어씁니다: dist/backup-...
계속하려면 'restore' 를 입력하세요:

Die Reihenfolge der Skript-Ausführung:

  1. Validierung der Archivstruktur (Prüfung, dass Dump und Dateiarchiv vorhanden sind)
  2. Automatische Sicherung des aktuellen Dateizustands nach dist/pre-restore-<date>.tar.gz
  3. Stack stoppen
  4. Datenverzeichnis wiederherstellen → Datenbank wiederherstellen
  5. Stack starten → Health-Check

Für die Ausführung ohne Eingabeaufforderung innerhalb eines Automatisierungsskripts:

FORCE=1 bash bin/restore.sh dist/backup-20260712-191858.tar.gz

Wenn der Health-Check nach der Wiederherstellung nicht anspringt​

bash bin/logs.sh # 서버 로그 확인
bash bin/status.sh

Zum Zurücksetzen die in Schritt 2 erstellte Sicherung erneut wiederherstellen. Beachten Sie: Die Sicherung enthält nur den Dateizustand (die Datenbank ist nicht enthalten).

bash bin/restore.sh dist/pre-restore-20260728-104233.tar.gz

Migration auf einen anderen Server​

  1. Installieren Sie den Stack auf dem neuen Server mit derselben Version (Installation oder Air-Gap-Installation).
  2. Kopieren Sie die .env vom alten Server auf den neuen (Berechtigungen 600 beibehalten).
  3. Kopieren Sie das Backup-Archiv in das dist/ des neuen Servers (Berechtigungen 600 beibehalten).
  4. Führen Sie die Wiederherstellung durch.
cd /opt/kopens/plantpulse-studio-docker
DRYRUN=1 bash bin/restore.sh dist/backup-20260728-031501.tar.gz # 먼저 리허설
bash bin/restore.sh dist/backup-20260728-031501.tar.gz
Wenn sich die Domain ändert

Wenn sich die Zugriffsadresse nach der Migration ändert, müssen sich alle Benutzer einmal ab- und wieder anmelden — Login-Cookies sind hostgebunden zum Zeitpunkt der Ausstellung; wenn sie unverändert bleiben, führen Datenanfragen zu 401-Fehlern. Details finden Sie unter Domain und Reverse-Proxy.


Festplattenverwaltung​

Da das Backup den Workspace und die Build-Artefakte vollständig enthält, wächst es mit zunehmender Projektzahl.

du -sh /opt/kopens/plantpulse-studio-docker/dist
du -sh /var/lib/pp-studio/*
df -h /var/lib/pp-studio
  • Um die Aufbewahrungsanzahl zu reduzieren, installieren Sie den Cron erneut mit dem Wert BACKUP_KEEP.
  • Frühere Versionen von bereitgestellten Apps werden pro Projekt standardmäßig auf maximal 10 Stück begrenzt; darüber hinausgehende werden automatisch bereinigt (die aktuell laufende Version wird immer aufbewahrt).

Verwandte Dokumente​