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 Folgendes:
| Ziel | Inhalt |
|---|---|
| Vollständiger PostgreSQL-Dump | Benutzerkonten · Gesprächsverlauf · Watcher · Benachrichtigungslesestatus · Skills · Bereitstellungsverlauf · Audit-Protokoll |
Workspace(workspaces/) | Tatsächlicher Quellcode pro Projekt · Chat-Anlagen |
Build-Artefakte(builds/) | Jede Version der bereitgestellten App (erforderlich für Rollback) |
Status-Verzeichnis(state/) | settings.json (Konfiguration) · Audit-/Nutzungsprotokolle · Benutzerdefinierte Vorlagen · Branding-Logos |
Das PostgreSQL-Datenverzeichnis selbst wird aus dem Archiv ausgeschlossen — es wird durch einen SQL-Dump ersetzt.
Das Archiv enthält den gesamten Workspace aller Benutzer vollständig, und bei Migrationen von früheren Installationen können API-Schlüssel in settings.json verbleiben.
- Das Skript erstellt die Backup-Datei mit
600(nur Besitzer lesen) und dasdist/Verzeichnis mit700. - Behalten Sie diese Berechtigungen bei, wenn Sie auf externe Medien oder andere Server übertragen.
(Verwenden Sie Berechtigungserhaltungsoptionen wie
scp -p,rsync -a,tar -p) - Für externe Übertragungen wird zusätzliche 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: Nur die neuesten 14 werden beibehalten, ältere Dateien werden automatisch gelöscht (anpassen mit
BACKUP_KEEP). - Bei Verwendung des gebündelten PostgreSQL muss der Stack laufen, um einen Dump zu erstellen.
BACKUP_KEEP=30 bash bin/backup.sh # 이번 실행부터 30개 보존
Führen Sie bash bin/backup.sh vor Image-Upgrades oder großen Konfigurationsänderungen aus.
Automatisches Backup installieren (empfohlen)
Installieren Sie cron, um das Backup täglich um 03:30 Uhr auszuführen. Root-Berechtigung erforderlich.
sudo bash bin/install-backup-cron.sh
[backup-cron] 설치 완료 — 스케줄: '30 3 * * *', 보존 14개, 로그: dist/backup.log
Um die Uhrzeit oder Aufbewahrungsanzahl zu ändern:
sudo BACKUP_CRON="0 4 * * *" BACKUP_KEEP=30 bash bin/install-backup-cron.sh
Zum Entfernen:
sudo bash bin/install-backup-cron.sh remove
Überprüfen Sie die Funktionalität in den Protokollen:
tail -50 /opt/kopens/plantpulse-studio-docker/dist/backup.log
ls -lh /opt/kopens/plantpulse-studio-docker/dist/backup-*.tar.gz
Empfohlener Betriebszyklus
| Zyklus | Aufgabe |
|---|---|
| Täglich | Automatisches Backup (cron) — 14 Tage Aufbewahrung |
| Wöchentlich | Neuestes Backup auf anderen Server/Medium kopieren (Berechtigungen beibehalten) |
| Monatlich | Kapazität dist/ und verfügbaren Speicher überprüfen |
| Vierteljährlich | DRYRUN=1 Wiederherstellungsübung — siehe unten |
| Vor dem Upgrade | Einmaliges manuelles Backup |
Auch wenn Backup-Dateien täglich erstellt werden, können Sie nicht sicher sein, dass sie wiederhergestellt werden können, bis Sie es versuchen. Führen Sie vierteljährlich eine Übung durch. Sie ist zerstörungsfrei und kann während des Betriebs sicher ausgeführt werden.
Wiederherstellungsübung (zerstörungsfrei)
Überprüft nur die Archivstruktur und Datenbankerreichbarkeit, ändert nichts.
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
Der aktuelle Datenbankinhalt und das gesamte Datenverzeichnis werden zum Sicherungszeitpunkt überschrieben. Projekte, Gespräche und Bereitstellungen, die nach der Wiederherstellung erstellt wurden, gehen verloren.
cd /opt/kopens/plantpulse-studio-docker
bash bin/restore.sh # 최신 백업으로 복구
bash bin/restore.sh dist/backup-20260712-191858.tar.gz # 특정 시점으로 복구
Sie müssen restore bei der Bestätigungsaufforderung eingeben, um fortzufahren.
⚠ 현재 DB 와 /var/lib/pp-studio 파일 상태를 이 백업으로 덮어씁니다: dist/backup-...
계속하려면 'restore' 를 입력하세요:
Die Reihenfolge der Skriptausführung:
- Archivstruktur validieren (Dump und Datei-Archiv-Existenz überprüfen)
- Aktuellen Dateistatus automatisch zu
dist/pre-restore-<date>.tar.gzausweichen - Stack stoppen
- Datenverzeichnis wiederherstellen → Datenbank wiederherstellen
- Stack starten → Integritätsprüfung durchführen
Um innerhalb eines Automatisierungsskripts ohne Aufforderung auszuführen:
FORCE=1 bash bin/restore.sh dist/backup-20260712-191858.tar.gz
Integritätsprüfung nach Wiederherstellung nicht bestanden
bash bin/logs.sh # 서버 로그 확인
bash bin/status.sh
Um zurückzusetzen, stellen Sie mit dem in Schritt 2 erstellten Sicherungsbestand wieder her. Beachten Sie jedoch, dass der Sicherungsbestand nur den Dateistatus enthält (die Datenbank ist nicht enthalten).
bash bin/restore.sh dist/pre-restore-20260728-104233.tar.gz
Migration zu einem anderen Server
- Installieren Sie den Stack auf dem neuen Server mit derselben Version (Installation oder Air-Gap-Installation).
- Kopieren Sie
.envvom alten Server auf den neuen Server (behalten Sie Berechtigungen600). - Kopieren Sie das Backup-Archiv auf den neuen Server nach
dist/(behalten Sie Berechtigungen600). - Führen Sie die Wiederherstellung aus.
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 Zugangsadresse nach der Migration ändert, müssen sich alle Benutzer einmal abmelden und wieder anmelden — Login-Cookies sind nur für den Host zum Zeitpunkt der Ausstellung verfügbar. Daher werden Dateinanforderungen zu 401. Weitere Details finden Sie unter Domain und Reverse Proxy.
Speicherverwaltung
Backups enthalten den gesamten Workspace und Build-Artefakte, daher wachsen sie mit der Anzahl der Projekte.
du -sh /opt/kopens/plantpulse-studio-docker/dist
du -sh /var/lib/pp-studio/*
df -h /var/lib/pp-studio
- Um die Aufbewahrungsanzahl zu verringern, installieren Sie cron mit dem Wert
BACKUP_KEEPneu. - Frühere Versionen von bereitgestellten Apps werden pro Projekt standardmäßig bis zu 10 aufbewahrt, und überschüssige werden automatisch bereinigt (die derzeit laufende Version wird immer aufbewahrt).
Verwandte Dokumentation
- Installation · Air-Gap-Installation
- Geheimnis-Management — Best Practices, um zu verhindern, dass Schlüssel in Backups vermischt werden
- Fehlerbehebung