Stufe 8: Betreiben
Ziel: die Site überlebt einen verlorenen Laptop, einen toten Server, ein schlechtes Update und einen Rechnerwechsel, und niemand muss sich daran erinnern, wie.
Schritte
- Backups.
- Führe
scripts/backup.shwöchentlich und vor riskanten Arbeiten aus. Es packt die DB, Uploads, jeden Git-Branch und Stash sowie das Claude-Gedächtnis. - Verwende
--encrypt, bevor das Zip die Maschine verlässt, und behalte eine Kopie außerhalb der Maschine. - Live: die täglichen Backups des Hosts plus die Dumps, die die Deploy- und Content-Skripte erstellen.
- Führe
- Schreibe auf, wo alles lebt in
docs/reference/DISASTER_RECOVERY.md, Abschnitt 0. Schließe den Ordner mit den Originalfotos ein: Er ist nicht in Git. - Wiederherstellungsübung. Stelle einmal pro Quartal auf einer Ersatzmaschine oder einem frischen DDEV-Projekt wieder her, stoppe die Zeit und protokolliere sie in §5. Ein Backup, das du nie wiederhergestellt hast, ist eine Hoffnung, kein Backup.
- Credentials: jedes Geheimnis hat eine Zeile in
CREDENTIALS_INVENTORY.md(Name, wo es lebt, wer es hat, wann es rotiert wurde). Rotiere alles, was ein Agent gesehen hat. - Routinen: wöchentliche, monatliche und jährliche Checks, die Update-Richtlinie und Alarme in
docs/reference/OPERATIONS.md. Plugin-Updates gehen zuerst auf Staging. - Mehr als eine Maschine? Folge
references/multi-machine.md:docs/team/BRIDGE.mdenthält Rollen, Regeln und das Übergabe-Log;scripts/workstation-doctor.shprüft die Parität;scripts/make-state-bundle.sherzeugt die git-ignorierte Konfiguration, verschlüsselt.
Gate (abgehakt in SITE_STATUS.md)
- Backups geplant, mit einer Kopie außerhalb der Maschine
- Wiederherstellungsübung durchgeführt (Datum, Minuten)
- Update- und Alarm-Routinen in
OPERATIONS.mdgeschrieben
Lektionen
- Das Backup-Skript zeigte einmal auf den falschen Claude-Gedächtnis-Ordner. Die Sitzungen liefen aus dem übergeordneten Ordner, sodass das Gedächtnis unter einem anderen Pfad lag. Das Skript leitet den Pfad ab, akzeptiert aber
CLAUDE_MEM=für diesen Fall. - Eine Cloud-Build-Box hatte einen Branch und Stashes, die nirgendwo sonst existierten, und die Box konnte nicht pushen. Ziehe sie mit
git bundleüber SSH bevor die Box stoppt oder gelöscht wird. - Visuelle Baselines, die auf einem Betriebssystem erstellt wurden, schlagen auf einem anderen fehl. Behalte sie im gepinnten Docker-Image.
- Ein kostenloser Plan oder Guthaben, das an einem Datum endet, ist eine Frist für eine Ausstiegsübung: eine Woche vorher beweisen, dass du auf der nächsten Maschine aus Git + dem State-Bundle + einem Backup neu aufbauen kannst.