Backup & Wiederherstellung + Einstellungen in Kategorien mit Untermenü #17
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Problem
data/orchestrator.dbund teilweise in Dateien auf dem Server. Zieht man auf einen neuen Server um oder fällt der alte aus, muss man alles von Hand neu einrichten: Server, Proxmox-Zugänge, Scripts, Zeitpläne, Matrix, Dokumentation usw. Eine Sicherungs- oder Wiederherstellungsfunktion in der Oberfläche gibt es nicht.frontend/src/pages/Settings.tsxist eine einzige lange Seite (rund 930 Zeilen) mit allen Bereichen untereinander. Mit den geplanten Erweiterungen (#13, #14, #16 und dem Backup aus diesem Issue) wird das noch länger.Ziel
Teil A: Backup & Wiederherstellung
Teil B: Einstellungen mit Kategorien und Untermenü
Die Einstellungen werden in Kategorien aufgeteilt und bekommen ein Untermenü, sodass immer nur eine Kategorie zu sehen ist.
Teil A im Detail
Was ins Backup gehört (Stand im Code)
serverproxmoxserverscript,scriptscheduleserverdocappsettingauth_username,auth_password_hash),_secret_keyupdatescan,updaterun,scriptrunlog_output,raw_output), deshalb optionalserver.ssh_key_pathzeigt auf eine Datei, Default~/.ssh/id_rsa(servers.py,scripts.py)Nicht hinein gehören:
update_cache(wird neu geprüft), laufende Update-Anforderungen bzw. Logs (#16) und die.env/SECRET_KEYaus der Umgebung (gehört zur Installation, nicht zu den Daten).Format
patchpilot-backup-<version>-<zeitstempel>.zipmit:manifest.json: PatchPilot-Version, Erstellungszeitpunkt, Liste der Tabellen mit Zeilenanzahl, ob der Verlauf enthalten ist, Format-Version des Backupsdatabase.db: konsistente Kopie übersqlite3.backup()(keine reine Dateikopie, wegen WAL). Alternativ JSON pro Tabelle, was robuster gegen Schemaänderungen ist. Beides abwägen, siehe offene Punkte.ssh-keys/…: alle Dateien, auf die einssh_key_pathzeigt (inkl. Default-Key, falls ein Server ihn nutzt), mit einer Zuordnung Server → Datei im Manifestcryptographyist schon inrequirements.txt). Ohne Passwort wäre eine heruntergeladene Datei ein Generalschlüssel für das gesamte Homelab.Wiederherstellung
init_db()(ALTER TABLE … ADD COLUMN) und ergänzt neue Spalten.data/backups/gelegt, damit ein Fehlgriff nicht alles zerstört.data/geschrieben (z. B.data/ssh-keys/, Rechte600).ssh_key_pathder Server wird beim Restore auf den neuen Ort umgeschrieben, weil der alte Pfad auf dem neuen Server oft nicht existiert, besonders bei Docker.os._exit(0): systemd bzw. Docker mitrestart: unless-stoppedstartet neu). So werden Scheduler-Jobs (Scan, Update-Prüfung, Script-Zeitpläne), Matrix-Verbindung und JWT-Schlüssel sauber neu geladen. Die Oberfläche wartet auf die Rückkehr und leitet dann zum Login weiter.admin/PatchPilot. Das muss in der Oberfläche vor dem Bestätigen deutlich dastehen. Weil_secret_keymit übernommen wird, werden bestehende Tokens ungültig und man muss sich neu anmelden.Backend
backend/routers/backup.py:POST /api/backup/export(Body:password,include_history) → ZIP als Download (Content-Disposition: attachment)POST /api/backup/inspect(Upload + Passwort) → Manifest/Vorschau, ohne etwas zu ändernPOST /api/backup/restore(Upload + Passwort) → Restore wie oben beschrieben, danach Neustart../in den Pfaden).SSH-Schlüssel (Grundsatzentscheidung)
Im Moment liegen die Schlüssel irgendwo auf dem Host bzw. im Container, und PatchPilot kennt nur den Pfad. Für ein vollständiges Backup muss PatchPilot die Schlüssel lesen können, und beim Restore müssen sie an einem Ort landen, den der Container dauerhaft sieht. Deshalb ist es sinnvoll, dass Schlüssel künftig grundsätzlich unter
data/ssh-keys/liegen. Optional kann man in der Server-Maske einen Schlüssel hochladen. Das kann auch ein eigenes Folge-Issue werden. Für dieses Issue reicht: Beim Backup werden die referenzierten Dateien eingesammelt, und fehlt eine oder ist sie nicht lesbar, warnt das Backup deutlich, statt stillschweigend ein unvollständiges Backup zu erzeugen.Teil B im Detail: Einstellungen neu gliedern
Heutiger Aufbau (
Settings.tsx, alles untereinander)Allgemein (automatischer Scan + Zeitplan, Verlauf-Limit) → Proxmox-Server → Zugangsdaten → Matrix-Benachrichtigungen (Verbindung + Ereignis-Schalter) → Updates (Selbst-Update: Kanal, Prüfung, Auto-Apply, Versionsauswahl)
Vorgeschlagene Kategorien
Später können weitere Punkte ohne Umbau dazukommen, z. B. ein GitHub-Token für Versions-Checks (#14) unter „Integrationen“.
Umsetzung
/settings/general,/settings/proxmox,/settings/notifications,/settings/security,/settings/update,/settings/backup. So funktionieren Direktlinks (z. B. aus der Matrix-Meldung „siehe Einstellungen → Updates“) und der Zurück-Button./settingsleitet auf/settings/generalweiter.Settings.tsxwird in einzelne Komponenten pro Kategorie aufgeteilt, z. B.pages/settings/GeneralSettings.tsx,ProxmoxSettings.tsxusw. (CredentialsSectionundUpdateSectionsind schon eigene Komponenten).Offene Punkte
init_db()ältere Stände schon hochzieht.data/backups/mit Rotation) wären ein sinnvoller nächster Schritt, gehören aber nicht in dieses Issue.Akzeptanzkriterien
Backup & Wiederherstellung
Einstellungen