Host neu aufbauen¶
Ungeprüft
Diese Anleitung ist noch nicht durchgespielt worden; Befehle, Bezeichnungen und erwartete Ausgaben können abweichen.
Was noch zu prüfen ist, steht in todo/doku.md.
Nur, wenn der Host nicht mehr zu retten ist
Ein Neuaufbau ersetzt den Host vollständig; die Apps sind dabei Stunden nicht erreichbar, und was seit dem letzten Backup geändert wurde, ist verloren. Sprich ihn vorher in Signal ab.
Ziel¶
Ein Host, dessen VM verloren oder kaputt ist, läuft wieder mit allen Apps und den Daten aus dem letzten Backup.
Voraussetzungen¶
- alles, was Neuen Host aufsetzen voraussetzt
- gelesen: Was Infrastructure as Code bei uns nicht leistet, Backup und Statische Konfiguration
- die Images, die in den Stack-Dateien stehen, sind noch beim Anbieter zu haben (Image-Version anheben, falls nicht)
Gesichert werden nur die Apps auf werner. Auf containerhost gibt es kein Backup; dort kommen nach dem Neuaufbau nur die Container zurück, nicht ihre Daten (siehe containerhost).
Schritte¶
Die Reihenfolge ist fest, weil jeder Schritt auf den vorigen aufbaut:
- Backup-Stand prüfen: Danach richtet sich, was zurückkommt.
- Alte VM abschalten: damit nicht zwei Hosts unter demselben Namen laufen.
- VM, Grundeinrichtung und WireGuard: syslet braucht ein laufendes Betriebssystem mit Podman (Statische Konfiguration), und ohne Tunnel erreicht werner den rest-server nicht (Netzwerk).
- SOPS-Schlüssel: Der neue Host hat einen neuen SSH-Schlüssel und kann die Secrets sonst nicht entschlüsseln (Secrets im Repo).
- Ausrollen: legt Container und leere Volumes an (Infrastructure as Code).
- Interne Netzwerke in firewalld: sonst erreichen die Container einander nicht (Netzwerk).
- Restore je App: Das Repo enthält keine Daten (Was Infrastructure as Code nicht leistet).
- Backup wieder einschalten: erst jetzt, damit kein Snapshot mit leeren Apps entsteht (Backup).
- Was von Hand verwaltet wird: steht nicht im Repo und fällt keinem plan auf (Was wird wo verwaltet).
- Committen und pushen (Git-Workflow).
1. Backup-Stand prüfen¶
Nur für werner. Liste die Snapshots von containerhost aus auf, wie in Alte Snapshots von Hand aufräumen, Schritt 2 und 3:
| Bash | |
|---|---|
Erwartet: die letzten Snapshots, der jüngste aus der vergangenen Nacht. Notiere seine ID; aus ihm holst du in Schritt 7 die Daten zurück.
2. Alte VM abschalten¶
Schalte die alte VM in der Web-Oberfläche der Plattform aus, falls sie noch läuft, aber lösch sie noch nicht. Solange sie da ist, kommst du notfalls über die Konsole der Plattform noch an Dateien heran.
3. VM neu aufsetzen¶
Führe Neuen Host aufsetzen aus, Schritte 1 bis 8, mit dem bisherigen Namen des Hosts. Dabei weicht ab:
- Schritt 2: Hat die VM neue IP-Adressen, ändere nur die Adressen unter
ipam:in der Zonendatei; alle Einträge, die darauf zeigen, ziehen mit. Für containerhost bitte in Signal darum, die Adresse auf dem Gateway zu ändern. -
Schritt 3: Lösch vorher den alten Schlüssel des Hosts aus deiner
known_hosts, sonst verweigert SSH die Verbindung:Bash Die Schlüssel der Admins kopierst du beim Neuaufbau von werner aus containerhost (
vm-containerhost.garage-lab.net) und umgekehrt. - Schritt 6: Auf werner schaltest dusystem-backup.timernoch nicht ein, sondern erst in Schritt 8 dieser Anleitung, wenn die Daten zurück sind. Auf containerhost muss das NAS die Freigabe für die neue VM erlauben, bevor dumnt-backup.mounteinschaltest; frag in Signal nach, falls sich die Adresse geändert hat (siehe NAS). - Schritt 8: Die Tunnel-Adresse bleibt dieselbe; das Gateway braucht nur den neuen öffentlichen Schlüssel.
4. Neuen Schlüssel des Hosts für SOPS eintragen¶
| Bash | |
|---|---|
Ersetze in syslet/.sops.yaml den Wert hinter &server_<host> durch diese Zeile und verschlüssele die Secrets des Hosts neu:
Erwartet: git status zeigt syslet/.sops.yaml und alle creds-*.enc.yaml des Hosts als geändert.
5. Container ausrollen¶
Erwartet: alle Container, Volumes, Netzwerke und Secrets des Hosts als neu, keine Meldung decryption failed.
| Bash | |
|---|---|
Erwartet: dieselbe Ausgabe und die Frage Continue? (yes/no); tippe yes.
Das erste apply lädt alle Images herunter und kann lange dauern.
Die Apps laufen danach, aber mit leeren Daten. Lass sie nicht benutzen, bis Schritt 7 durch ist.
6. Interne Netzwerke in firewalld eintragen¶
Nur für werner.
Führe Interne Podman-Netzwerke reparieren aus, damit die Container untereinander sprechen dürfen.
Trag außerdem die Subnetze des Netzwerks caddy ein, wie in WireGuard-Tunnel einrichten, Schritt 4.
7. Daten jeder App zurückholen¶
Nur für werner.
Führe für jede App mit backup:-Block App aus dem Backup wiederherstellen aus, mit dem Snapshot aus Schritt 1.
Welche Apps das sind, zeigt:
| Bash | |
|---|---|
Erwartet: die Stack-Dateien der Apps mit Backup, eine je Zeile.
8. Backup wieder einschalten¶
Nur für werner.
| Bash | |
|---|---|
Erwartet: Der zweite Befehl kehrt nach einigen Minuten ohne Ausgabe zurück, und healthchecks.io meldet den Check als up.
9. Was von Hand verwaltet wird, prüfen¶
Geh durch Was wird wo verwaltet und prüf alles, was zum Host gehört und nicht aus dem Repo kommt, vor allem:
- die Firewall bei Netcup (für werner)
- den Peer auf dem Gateway (Schritt 3)
- den DNS-Eintrag (Schritt 3)
- auf containerhost die Einstellungen von Backrest, die nicht im Repo stehen und nicht gesichert sind (siehe Backup)
10. Committen und pushen¶
| Bash | |
|---|---|
Erwartet: am Ende von git push eine Zeile main -> main.
Erst jetzt löschst du die alte VM in der Web-Oberfläche der Plattform.
Prüfen¶
cue cmd planinsyslet/<host>zeigtNo changes detected. All units are up to date.- Jede App ist unter ihrem Namen erreichbar, und die Anmeldung über Authentik klappt.
- Im Monitoring tauchen der Host und seine Container wieder auf.
Wenn etwas schiefgeht¶
cue cmd planmeldetdecryption failed: Schritt 4 fehlt oder ist noch nicht für alle Dateien des Hosts gelaufen.- Ein Image lässt sich nicht herunterladen: Image-Version anheben
- Ein Container startet nicht: Container-Status und Logs ansehen
- werner erreicht den rest-server nicht: WireGuard-Tunnel prüfen
- Eine App lässt sich nicht wiederherstellen: App aus dem Backup wiederherstellen, Wenn etwas schiefgeht