App entfernen¶
Mit dem Stack verschwinden auch die Daten
Sobald die Sperre aufgehoben ist (Schritt 4), löscht syslet beim Entfernen des Stacks auch die Volumes der App mit allen Daten. Klär vorher, ob die Daten noch gebraucht werden und ob es ein Backup davon gibt (Schritt 2).
Ziel¶
Eine App läuft nicht mehr, und nichts erinnert mehr an sie: kein Container, kein DNS-Eintrag, keine Zeile in der Token-Policy, keine Anbindung in Authentik und kein Eintrag im Backup-Lauf.
Voraussetzungen¶
- du kannst eine Änderung ausrollen (Änderung ausrollen), auch für DNS
- gelesen: syslet in diesem Repo, vor allem die Locks, Backup und DNS
- mit den anderen in Signal abgesprochen, dass die App weg kann
Schritte¶
1. Neuesten Stand holen und plan ausführen¶
Wie in Änderung ausrollen, Schritt 1 bis 3, im Ordner des Hosts der App und in desec/.
Erwartet: überall „No changes“.
2. Backup klären¶
Sieh auf der Seite der App unter „Backup“ nach, ob sie gesichert wird.
-
Wird sie gesichert, prüf, dass der letzte Lauf geklappt hat:
Bash Erwartet:
status=0/SUCCESSund das Datum der letzten Nacht. Nach dem Entfernen bleiben die Daten der App in den bisherigen Snapshots, bis Backrest diese nach den eingestellten Regeln aufräumt (siehe Backup). Sollen sie länger aufgehoben werden, kläre das vorher in Signal. - Wird sie nicht gesichert, sind die Daten nach Schritt 6 weg. Willst du sie behalten, setz in Schritt 4 bei den Volumes zusätzlichreclaimPolicy: core.#ReclaimPolicyRetain, wie beim Netzwerk insyslet/werner/stack-hedgedoc.cue; dann bleiben sie auf dem Host liegen.
3. Backup-Lauf anpassen¶
Nur wenn die App in rootfs/werner/usr/bin/system-backup vorkommt.
Lösch dort die Zeilen der App und in rootfs/werner/etc/systemd/system/system-backup.service ihre Zeile Requires=, dann kopier beide Dateien auf werner:
| Bash | |
|---|---|
Erwartet: keine Ausgabe außer dem Fortschritt von scp.
Committe und pushe die beiden Dateien.
Das muss vor Schritt 6 passieren; sonst sucht der nächste Backup-Lauf nach Containern, die es nicht mehr gibt, und schlägt fehl.
4. Sperre aufheben¶
Lösch in der Stack-Datei der App den ganzen Block tools.#SysdefLock und roll das aus, wie in Änderung ausrollen, Schritt 5 bis 10.
Erwartet bei plan: für jede Unit der App nur geänderte [X-Syslet]-Werte, etwa:
| Text Only | |
|---|---|
Bei Volumes, die du in Schritt 2 behalten wolltest, fehlt die Zeile ReclaimPolicy.
Es startet nichts neu.
Dieser Schritt braucht ein eigenes apply: syslet liest die Sperre vom Host, nicht aus dem Repo. Löschst du Sperre und Stack in einem Zug, bleibt alles stehen (siehe Removing specs in der syslet-Doku).
5. Dateien der App löschen¶
Lösch außerdem:
- die Speicherlimits der App in
syslet/<host>/host.cue - den Eintrag unter
scrape_configsfür ihren Postgres-Exporter insyslet/containerhost/stack-prom.cue, falls es einen gibt - jedes Secret der App, das in einer gemeinsamen Datei wie
creds-mailjet.enc.yamlliegt, aber nur, wenn es keine andere App nutzt (Secret anlegen oder ändern)
Prüfen, ob noch etwas auf die App verweist:
| Bash | |
|---|---|
Erwartet: keine Ausgabe.
6. Stack entfernen¶
Wie in Änderung ausrollen, Schritt 5 bis 10, im Ordner des Hosts, danach für den Exporter auch in syslet/containerhost.
Erwartet bei plan:
- unter
Unit files to delete:die Units der App - unter
Podman volumes to delete:ihre Volumes, außer denen, die du in Schritt 2 behalten wolltest; die Daten darin sind nach dem apply weg - unter
Secret changes:die Secrets der App mit- - in der Zusammenfassung jede Unit der App mit
removed, dazucaddy.containermitconfig updated, reloadedund, wenn die App gesichert wurde,restic.containermitunit updated, restarted
Steht eine Unit der App mit skipped: protected (removalAllowed: false) in der Zusammenfassung, hat Schritt 4 sie nicht erfasst; nimm die Datei mit git restore --staged --worktree syslet/<host>/stack-<app>.cue zurück und mach Schritt 4 noch einmal.
Committe die gelöschten und geänderten Dateien zusammen und push sofort.
7. DNS-Eintrag und Token-Policy löschen¶
Erst jetzt, wenn Caddy den Hostnamen nicht mehr bedient.
Lösch in der Zonendatei des Hosts (desec/desec_garage_lab_de.cue bzw. desec/desec_garage_lab_net.cue) die Einträge mit subname: "<subdomain>" und in der Token-Policy die Zeile _acme-challenge.<subdomain>.
Roll das im Ordner desec/ aus wie in Änderung ausrollen.
Erwartet bei plan etwa:
| Text Only | |
|---|---|
Bei einer App auf containerhost bitte in Signal außerdem jemanden mit Zugang zum Gateway, den Namen dort zu entfernen.
8. Anbindung in Authentik entfernen¶
Nur wenn die App an Authentik angebunden war.
Lösch in apps/authentik/tf-core/ die Datei application_<app>.tf und die Access-Gruppe der App in group_access.tf, in apps/authentik/tf-groups/ ihre App-Gruppen in group_applications.tf.
Roll beide Ordner aus wie in Terraform ausführen.
Erwartet bei terraform plan: nur Ressourcen der App mit will be destroyed.
9. Überwachung und Doku¶
- Ist die App öffentlich erreichbar gewesen, bitte jemanden mit Zugang, sie in der Web-Oberfläche von Uptime Kuma zu entfernen (siehe Uptime-Monitoring).
- Trag die App in
docs/explanation/general/apps.mdunter „Nicht im Einsatz“ ein oder lösch ihre Zeile; lösch ihre Seite und den Eintrag innavinzensical.toml, wenn sie nicht wiederkommt, und prüf mitmake docs.
Prüfen¶
cue cmd planzeigt im Ordner des Hosts, indesec/und gegebenenfalls insyslet/containerhost„No changes“,terraform planin beiden Authentik-OrdnernNo changes.cue cmd ingresslistet den Hostnamen nicht mehr.grep -rn '<app>' syslet/ desec/ apps/authentik/ rootfs/findet nichts mehr.- Am Morgen nach dem nächsten Backup zeigt
cue cmd -t unit=system-backup.service statusstatus=0/SUCCESS.
Wenn etwas schiefgeht¶
- plan bricht ab mit
references undefined volumeoderreferences undefined network: Ein Container einer anderen App nutzt noch ein Volume oder Netzwerk dieser App; prüfe mitgrep -rninsyslet/<host>/, wer, und frag in Signal nach. - Das nächste Backup schlägt fehl: Schritt 3 fehlt oder die Dateien sind nicht auf dem Host; Backup-Meldung von healthchecks.io
- Daten werden doch noch gebraucht: App aus dem Backup wiederherstellen, solange es Snapshots mit der App gibt
- Allgemeines: Removing specs und Lock resources in der syslet-Doku