Spring Boot und PostgreSQL auf einer VM mit Observability und Backup
In 2 TrailsZuletzt aktualisiert am
Überblick
Abschnitt betitelt „Überblick“Dieses Muster bildet das validierte Ziel mit geringer Änderungstiefe für das Spring-Boot-Rehost-
Beispiel ab. Das JAR läuft weiterhin als systemd-Service, während PostgreSQL selbstverwaltet auf
derselben VM verbleibt. Die Betriebsmodelle von Laufzeit und Datenbank bleiben damit VM-zentriert.
Die Baseline umfasst bewusst nur eine VM. Sie demonstriert wiederholbare Migrationskontrollen und Betriebsbereitschaft, nicht High Availability für Anwendung oder Datenbank.
Einsatz
Abschnitt betitelt „Einsatz“- Geringe Änderungstoleranz: Fachverhalten soll während der Migration stabil bleiben.
- Kurze Zeitfenster für die Migration: Die Verlagerung der Laufzeit soll planbar und wiederholbar sein.
- Betriebskontinuität: Teams behalten VM-zentrierte Betriebsabläufe auf STACKIT bei.
Architekturdiagramm
Abschnitt betitelt „Architekturdiagramm“Designprinzipien
Abschnitt betitelt „Designprinzipien“- Ingress explizit einschränken: SSH- und Applikationsverkehr nur aus freigegebenen Quell-CIDRs zulassen; Exporter-Traffic ausschließlich aus STACKIT Service Ranges erlauben.
- Credentials aus State und Inventar heraushalten: Das PostgreSQL-Passwort über die Prozessumgebung übergeben und die erzeugte Laufzeit-Environment-Datei nur für root lesbar speichern.
- Observability-Minimum definieren: Infrastruktur- und Applikationssignale vor Go-live festlegen.
- Recovery-Ebenen trennen: Den Datenbank-Dump von vor dem Restore für Cutover-Rollback und Server Backup für Disaster Recovery auf VM-Ebene verwenden.
- Verfügbarkeitsgrenze benennen: Eine VM mit lokaler Datenbank bildet eine gemeinsame Failure Domain. Load Balancer oder zweiten Knoten nur mit separat entworfenem Datenbank- und Konsistenzmodell ergänzen.
- Security Groups und Ingress-Regeln explizit halten: Nur erforderliche Ports und Protokolle freigeben.
Weiterführendes
Abschnitt betitelt „Weiterführendes“Repository
Abschnitt betitelt „Repository“- Datei aus dem Beispiel kopieren:
cp env.tfvars.example env.tfvars - Erforderliche Werte setzen:
create_project = truetarget_project_name = "cmf-rehost-springboot"target_project_owner_email = "owner@sa.stackit.cloud"parent_container_id = "cmf-parent-container-id"service_account_key_path = "/path/to/stackit-sa-key.json"
run_ansible = truejar_local_path = "ansible/files/springboot-app.jar"availability_zone = "eu01-1"machine_type = "g2i.2"ssh_allowed_cidr = "203.0.113.10/32"app_allowed_cidr = "203.0.113.10/32"enable_observability = trueenable_node_exporter = trueenable_local_postgresql = trueenable_server_backup = true- Optionaler CMF-Flag-Wrapper (
flags.env):
setup_project=truesetup_observability=truesetup_database=falsesetup_workload=truesetup_loadgen=falsesetup_dns=false- Ausführen:
terraform initterraform apply -var-file=env.tfvarsErwartetes Ergebnis: application_url stellt die Spring-Boot-Anwendung direkt von der VM auf dem
konfigurierten Applikationsport bereit. PostgreSQL lauscht für die Anwendung auf localhost,
Observability erfasst den Node Exporter und für das Boot Volume ist ein täglicher Backup-Zeitplan aktiv.
Verfügbarkeitsgrenze und Erweiterungen
Abschnitt betitelt „Verfügbarkeitsgrenze und Erweiterungen“Diese Baseline bietet kein automatisches Failover. Eine Load-Balancer- oder Multi-VM-Variante ist erst sinnvoll, nachdem Session Handling, PostgreSQL-Platzierung, Schreibkonsistenz, Health Checks, TLS und Traffic-Umschaltung gemeinsam entworfen und getestet wurden. Behandeln Sie dies als eigene Architekturentscheidung, nicht als implizite Eigenschaft dieses Rehost-Pfads.