Die Ausgangssituation ist ein VPS in Hetzner (8 vCPU – 16 GB RAM – 160 GB SSD), der ein kleines B2B-SaaS bedient. Auf dem Ubuntu 22.04-Server, Docker Swarm (1 Manager), 12 Container (Nginx Reverse-Proxy, 3 APIs auf Node.js, 2 Worker, PostgreSQL 14, Redis, MinIO, Prometheus, Grafana, Loki). Der Zugriff auf die Produktion erfolgt jetzt über SSH mit Passwort, die Firewall ist teilweise konfiguriert, Updates werden nicht regelmäßig installiert, es gibt keine zentralisierten Protokolle oder Warnungen, Backups werden manuell auf derselben Festplatte erstellt. In den letzten zwei Monaten kam es zu zwei Vorfällen: unerwartete Dienstneustarts und CPU-Spitzen ohne ersichtlichen Grund. Sie müssen den Server mit minimaler Ausfallzeit in einen sicheren und vorhersehbaren Zustand versetzen und eine reproduzierbare Konfiguration hinterlassen. Einschränkungen – das Ausfallzeitfenster beträgt insgesamt nicht mehr als 30 Minuten – Sie können den Cloud-Anbieter nicht wechseln – Domänen und aktuelle TLS-Zertifikate müssen erhalten bleiben – Sie können die Anwendung nicht „neu schreiben“, Sie können nur die Infrastruktur und Umgebung ändern – alle Änderungen werden im Git-Repository aufgezeichnet (wir stellen den Zugriff bereit) – vorzugsweise verwenden Sie Ansible und Standard-Linux-Tools. Etappen und erwartetes Ergebnis 1 – Diagnose des aktuellen Zustands – Inventar der Dienste – Netzwerk-Ports – Benutzer – Schlüssel – Cron/Systemd-Timer – Überprüfung der Kernel- und Docker-Protokolle – Identifizierung der Ursachen für Neustarts und CPU-Spitzen – ein kurzer Bericht mit Hypothesen und einem Plan für Änderungen. 2 – Betriebssystem- und Zugriffshärtung – SSH auf Schlüssel übertragen – Passwortauthentifizierung und Root-Anmeldung deaktivieren – fail2ban einrichten – UFW oder nftables mit einer expliziten Liste offener Ports einrichten – grundlegende Einrichtung von auditd oder einem Analogon für kritische Ereignisse – Rechte und Geheimnisse überprüfen (Docker-Geheimnisse – env-Dateien) – Pakete aktualisieren und unbeaufsichtigte Upgrades mit Neustartsteuerung einrichten. 3 – Sicheres Backup-Schema und Wiederherstellung – automatische PostgreSQL-Backups (pg_dump oder pg_basebackup nach Vereinbarung) – MinIO-Backups (mc Mirror oder rclone) – Backups der Swarm-Konfiguration und wichtiger Verzeichnisse – Hochladen auf einen separaten Speicher (zum Beispiel Hetzner Storage Box über SSH – S3-kompatibler Speicher ist erlaubt) – Verschlüsselung von Backups (Alter oder GPG) – Speichervorschriften (7 täglich – 4 wöchentlich) – obligatorische Wiederherstellungsprüfung auf einer Testschaltung oder auf einer temporären VM. 4 – Beobachtbarkeit und Warnungen – Einrichten von node_exporter – cAdvisor – Sammeln von Protokollen (Loki- oder Journald-Weiterleitung) – Grafana-Dashboards für CPU – RAM – Festplatte – Docker-Neustarts – Postgres-Zustand – Einrichten von Warnungen in Telegram oder E-Mail – mindestens 6 wichtige Warnungen (Festplatte > 80 % – OOM – Container-Neustartschleife – Postgres-Replikations-/Backup-Fehler, falls zutreffend – Nginx Nichtverfügbarkeit - Wachstum 5xx). 5 – Die Bereitstellung in eine reproduzierbare Form bringen – Ansible-Rollen oder Playbooks für das Betriebssystem – Firewall – Benutzer – Docker/Swarm-Grundkonfiguration – Backups – Überwachung – alle Variablen und Geheimnisse sind getrennt (Ansible Vault oder SOPS) – Anweisungen in der README-Datei, wie ein Server von Grund auf bereitgestellt und eine Wiederherstellung durchgeführt wird. Akzeptanzkriterien (messbar) – SSH-Zugriff nur über Schlüssel – Root-Anmeldung deaktiviert – Passwortauthentifizierung deaktiviert - Alle externen Ports außer 80 – 443 – 22 sind auf der Firewall geschlossen (22 kann bei Bedarf auf einen anderen Port geändert werden) - Tägliche automatische Sicherungen in einen separaten Speicher werden nach einem Zeitplan durchgeführt und verfügen über einen Erfolgsbericht. - Mindestens ein PostgreSQL-Wiederherstellungstest und ein MinIO-Dateiwiederherstellungstest wurden mit Bestätigung abgeschlossen – Die Überwachung zeigt Server- und Containermetriken – Warnungen sind konfiguriert – Testwarnungen werden zugestellt - Schwarmdienste nach der Arbeit funktionieren wie vor der Arbeit - Domänen und TLS werden gespeichert - Gesamtausfallzeit innerhalb von 30 Minuten – Das Repository verfügt über Ansible-Code – Variablen – README – Sicherungsschema – Liste der vorgenommenen Änderungen Technische Umgebung – Ubuntu 22.04 LTS – Docker 24.x – Docker Swarm – PostgreSQL 14 – Redis – MinIO – Prometheus – Grafana – Loki – Nginx – Hetzner VPS – separater Backup-Speicher. Wir stellen den Zugriff über SSH und auf das DNS-Panel bereit.