Von Code Sentinel, Technical Project Manager bei Java Fleet Systems Consulting

Schwierigkeit: 🟡 Mittel
Lesezeit: 25 Minuten
Voraussetzungen: Docker-Grundlagen, CI/CD Pipeline Basics (Teil 1-7 oder vergleichbare Erfahrung)


📚 Was bisher geschah – Enterprise CI/CD Mastery

Bereits veröffentlicht:

Heute: Teil 8 – Blue-Green Deployments

Neu in der Serie? Kein Problem!

  • 🟢 Einsteiger? Starte mit Teil 1 für den vollen Kontext
  • 🟡 Erfahren? Du kannst hier einsteigen, Basics werden kurz erklärt

⚡ Das Wichtigste in 30 Sekunden

Dein Problem: Du willst deployen, aber jede Minute Downtime kostet Geld und Nerven.

Die Lösung: Blue-Green Deployment – zwei identische Umgebungen, sofortiger Switch, Rollback in Sekunden.

Heute lernst du:

  • ✅ Wie Blue-Green Deployments funktionieren (auch für Anfänger verständlich)
  • ✅ Praktische Implementierung mit Docker und nginx
  • ✅ Automatisiertes Switching in der CI/CD Pipeline
  • ✅ Rollback-Strategien, die wirklich funktionieren

Für wen ist dieser Artikel?

  • 🌱 Anfänger: Du lernst das Konzept von Grund auf
  • 🌿 Erfahrene: Best Practices und Production-Ready Konfiguration
  • 🌳 Profis: Im Bonus: Database Migrations und Session Handling

Zeit-Investment: 25 Minuten Lesen + 45 Minuten Hands-on


👋 Code Sentinel: „Früher hätte ich Panik geschoben…“

Hey! 👋

Code Sentinel hier. Schön, dass du wieder dabei bist!

Real talk: Früher war Deployment-Tag für mich Stress-Tag. Jedes Mal die gleichen Fragen: „Was wenn was schiefgeht? Wie lange sind wir offline? Haben wir einen Rollback-Plan?“

Dann hab ich Blue-Green Deployments entdeckt. Und weißt du was? Deployment ist jetzt fast… entspannt. 😊

Ja, ich weiß – „Code Sentinel“ und „entspannt“ in einem Satz. Dinge ändern sich. 😉

Lass uns das gemeinsam angehen! 🚀


Blue-Green

🟢 GRUNDLAGEN

Was ist ein Blue-Green Deployment?

Stell dir vor, du hast zwei identische Bühnen in einem Theater. Auf der einen (Blue) läuft gerade die Show. Auf der anderen (Green) bereitest du die neue Version vor.

Wenn alles bereit ist, drehst du einfach das Scheinwerferlicht um. Das Publikum merkt den Wechsel nicht mal.

Das ist Blue-Green Deployment:

💡 Neu hier? Was ist ein Load Balancer?

Ein Load Balancer ist wie ein Türsteher, der Besucher auf verschiedene Eingänge verteilt. Er entscheidet, welcher Server die Anfragen bekommt.

Beispiel: nginx, HAProxy, AWS ALB

Warum brauche ich das?

Ohne Blue-Green:

1. Alte Version stoppen      ← 😰 DOWNTIME BEGINNT
2. Neue Version deployen     ← 😰 DOWNTIME LÄUFT
3. Tests durchführen         ← 😰 DOWNTIME LÄUFT
4. Probleme? Rollback!       ← 😰 NOCH MEHR DOWNTIME

Mit Blue-Green:

1. Neue Version auf Green deployen  ← Blue läuft weiter ✓
2. Tests auf Green durchführen      ← Blue läuft weiter ✓
3. Traffic zu Green switchen        ← Zero Downtime! 🎉
4. Probleme? Switch zurück!         ← 2 Sekunden Rollback 🚀

Dein erstes Blue-Green Setup

Hier ist ein minimales Beispiel mit Docker Compose:

# docker-compose.yml
version: '3.8'

services:
  # Der Load Balancer - der "Türsteher"
  nginx:
    image: nginx:alpine
    ports:
      - "80:80"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf:ro
    depends_on:
      - blue
      - green

  # Blue Environment - aktuell aktiv
  blue:
    image: myapp:1.0.0
    environment:
      - ENV_COLOR=blue
      - APP_VERSION=1.0.0

  # Green Environment - Standby für neue Version
  green:
    image: myapp:1.1.0
    environment:
      - ENV_COLOR=green
      - APP_VERSION=1.1.0

Was macht dieser Code?

ZeileErklärung
nginx:Der Load Balancer, der den Traffic steuert
ports: "80:80"Öffentlicher Port – hier kommt der Traffic rein
volumes: ./nginx.confDie Konfiguration, die sagt: „Schick Traffic zu Blue oder Green“
blue:Die aktuell aktive Produktionsumgebung
green:Die Standby-Umgebung für die neue Version

💡 Du kennst die Basics schon? → Spring direkt zu PROFESSIONALS


🟡 PROFESSIONALS

Die nginx-Konfiguration für Blue-Green

# nginx.conf
upstream blue {
    server blue:8080;
}

upstream green {
    server green:8080;
}

# Aktive Umgebung - ändern für Switch!
map $uri $backend {
    default blue;  # ← Hier switchen: "blue" oder "green"
}

server {
    listen 80;
    
    location / {
        proxy_pass http://$backend;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        
        # Health Check Header für Debugging
        add_header X-Backend $backend;
    }
    
    # Health Endpoints für beide Umgebungen
    location /health/blue {
        proxy_pass http://blue/health;
    }
    
    location /health/green {
        proxy_pass http://green/health;
    }
}

Best Practice: Health Checks vor dem Switch

Bevor du switchst, MUSS die neue Umgebung gesund sein:

#!/bin/bash
# switch-to-green.sh

echo "🔍 Checking Green health..."

# Health Check mit Retry
for i in {1..10}; do
    response=$(curl -s -o /dev/null -w "%{http_code}" http://localhost/health/green)
    if [ "$response" = "200" ]; then
        echo "✅ Green is healthy!"
        break
    fi
    echo "⏳ Attempt $i/10 - Green not ready yet..."
    sleep 3
done

if [ "$response" != "200" ]; then
    echo "❌ Green failed health check! Aborting switch."
    exit 1
fi

# Switch durchführen
echo "🔄 Switching traffic to Green..."
sed -i 's/default blue/default green/' /etc/nginx/nginx.conf
nginx -s reload

echo "🎉 Traffic now going to Green!"

Stolperfallen vermeiden

❌ Fehler #1: Kein Health Check

# SCHLECHT - blindes Switching
sed -i 's/default blue/default green/' nginx.conf
nginx -s reload
# Was wenn Green kaputt ist? 💥

✅ Besser:

# GUT - erst prüfen, dann switchen
if curl -f http://green:8080/health; then
    sed -i 's/default blue/default green/' nginx.conf
    nginx -s reload
fi

❌ Fehler #2: Vergessen, die alte Umgebung zu behalten

Nach dem Switch ist Blue immer noch da – und das ist gut so!

Lösche Blue nicht sofort. Du brauchst es für:

  • Schnelles Rollback
  • Vergleichstests
  • Debugging

Mein Tipp: Halte die alte Umgebung mindestens 24 Stunden aktiv.

❌ Fehler #3: Unterschiedliche Konfigurationen

Blue und Green MÜSSEN identisch sein – außer der App-Version:

  • ✅ Gleiche Umgebungsvariablen
  • ✅ Gleiche Ressourcen-Limits
  • ✅ Gleiche Netzwerk-Konfiguration
  • ❌ NICHT: Unterschiedliche DB-Connections

💡 Du willst mehr? → Im BONUS findest du Database Migrations und Session Handling


🔵 BONUS

Database Migrations bei Blue-Green

Das ist der tricky Teil. Beide Umgebungen teilen sich die Datenbank:

┌─────────┐     ┌─────────┐
│  BLUE   │     │  GREEN  │
│  v1.0   │     │  v1.1   │
└────┬────┘     └────┬────┘
     │               │
     └───────┬───────┘
             │
     ┌───────▼───────┐
     │   DATABASE    │
     │   (shared)    │
     └───────────────┘

Das Problem: Was wenn v1.1 ein neues DB-Schema braucht?

Die Lösung: Expand-Contract Pattern

Phase 1: EXPAND (auf Green deployen)
─────────────────────────────────────
- Neue Spalten hinzufügen (nullable!)
- Neue Tabellen erstellen
- Blue v1.0 ignoriert die neuen Felder
- Green v1.1 nutzt sie

Phase 2: MIGRATE (nach erfolgreichem Switch)
─────────────────────────────────────
- Daten in neue Struktur migrieren
- Alte Struktur bleibt (für Rollback)

Phase 3: CONTRACT (nach Stabilisierung)
─────────────────────────────────────
- Alte Spalten entfernen
- Constraints hinzufügen
- Rollback zu v1.0 nicht mehr möglich!

Beispiel Flyway Migration:

-- V1.1.0__add_email_verified.sql
-- EXPAND Phase: Neue Spalte, nullable, kein Breaking Change

ALTER TABLE users 
ADD COLUMN email_verified BOOLEAN DEFAULT NULL;

-- Blue v1.0 funktioniert weiter - ignoriert die Spalte
-- Green v1.1 nutzt die Spalte

Session Handling

Bei Blue-Green teilen sich beide Umgebungen die Sessions:

# Spring Boot application.yml
spring:
  session:
    store-type: redis
    redis:
      namespace: myapp:sessions

# Redis wird von BEIDEN Umgebungen genutzt
# Sessions überleben den Switch!

Performance-Zahlen aus der Praxis:

MetrikOhne Blue-GreenMit Blue-Green
Deployment Downtime2-5 Minuten0 Sekunden
Rollback Zeit5-15 Minuten2-5 Sekunden
Angst-Level beim Deploy😰😰😰😊

💡 Praxis-Tipps

Für Einsteiger 🌱

  1. Starte lokal: Bau das Setup erst auf deinem Rechner auf, bevor du es in Production nutzt.
  2. Übe den Switch: Mach 10 Switches auf dem lokalen System. Bis es Routine ist.

Für den Alltag 🌿

  1. Automatisiere den Health Check: Nie manuell prüfen, ob die neue Version läuft.
  2. Dokumentiere jeden Switch: Wer hat wann von Blue auf Green gewechselt? Logging ist Pflicht.

Für Profis 🌳

  1. Canary vor Full Switch: Schick erst 5% des Traffics zu Green, dann 25%, dann 100%.
  2. Feature Flags kombinieren: Blue-Green für Infrastructure, Feature Flags für Features.

🛠️ Tools & Extensions

Für Einsteiger 🌱

ToolWarum?Link
Docker ComposeEinfaches lokales Setupdocs.docker.com
nginxSimpler Load Balancernginx.org

Für den Alltag 🌿

ToolWarum?Link
TraefikAutomatische Service Discoverytraefik.io
ConsulService Mesh & Health Checksconsul.io

Für Profis 🌳

ToolWarum?Link
IstioFull Service Meshistio.io
Argo RolloutsGitOps Blue-Greenargoproj.io

❓ FAQ (Häufige Fragen)

Frage 1: Brauche ich wirklich zwei komplette Umgebungen?

Antwort: Ja, aber „komplett“ heißt nicht „teuer“. Mit Containern und Cloud-Ressourcen kannst du Green nur während des Deployments hochfahren und danach wieder runterfahren. Pay-per-use macht Blue-Green erschwinglich.

Frage 2: Was ist der Unterschied zu Rolling Deployments?

Antwort: Bei Rolling Deployments werden Server nacheinander aktualisiert. Du hast während des Deployments BEIDE Versionen gleichzeitig aktiv. Bei Blue-Green ist immer nur EINE Version aktiv – sauberer, aber ressourcenintensiver.

Frage 3: Wie groß sollte der Health Check Timeout sein?

Antwort: 30 Sekunden als Basis, aber es hängt von deiner App ab. Eine Spring Boot App braucht vielleicht 45 Sekunden zum Starten. Eine Go-App ist in 2 Sekunden ready. Kenne deine App!

Frage 4: Kann ich Blue-Green mit Kubernetes machen?

Antwort: Absolut! Kubernetes macht es sogar einfacher. Mit Services und Deployments kannst du Labels nutzen, um Traffic zu steuern. Mehr dazu in Teil 9: Canary & Kubernetes.

Frage 5: Was mache ich mit Scheduled Jobs?

Antwort: Gute Frage! Jobs sollten nur auf EINER Umgebung laufen. Nutze Leader Election oder einen separaten Job-Runner, der unabhängig von Blue/Green ist.

Frage 6: Wie verhindere ich, dass beide Umgebungen gleichzeitig aktiv sind?

Antwort: Der Load Balancer ist dein Single Point of Control. Nur ER entscheidet, wohin der Traffic geht. Konfiguriere ihn richtig, und du hast nie beide aktiv.

Frage 7: Wie gehst du persönlich mit Deployment-Stress um? 🤔

Antwort: Früher? Kaffee, Checklisten, und schlaflose Nächte. Heute? Ich hab gelernt, dass gute Automatisierung und ein solides Rollback-Setup mehr wert sind als Perfektion. Und manchmal hilft es, kurz rauszugehen und durchzuatmen. Aber das gehört zu private logs. 📝

Frage 8: Ist Blue-Green auch für kleine Projekte sinnvoll?

Antwort: Ja! Gerade bei kleinen Projekten ist der Overhead gering, und du lernst die Patterns für später. Außerdem: Auch kleine Projekte haben User, die Downtime hassen.


📖 Enterprise CI/CD Mastery – Alle Teile

Für Einsteiger empfohlen: Starte bei Teil 1! ⭐

TeilThemaLevelStatus
1Erste Pipeline🟢✅ Veröffentlicht
2Security Gates (OWASP + Trivy)🟢✅ Veröffentlicht
3Coverage Gates (JaCoCo)🟢✅ Veröffentlicht
4Quality Gates (SonarQube)🟡✅ Veröffentlicht
5Multi-Stage Builds🟡✅ Veröffentlicht
6Container Security (SBOM)🟡✅ Veröffentlicht
7Registry Integration🟡✅ Veröffentlicht
→ 8Blue-Green Deployments🟡📍 Du bist hier!
9Canary & Kubernetes🟡📅 12.12.2025
10GitOps & Environments🔴📅 Coming Soon
11Jenkins Enterprise🔴📅 Coming Soon
12Multi-Platform & Finale🔴📅 Coming Soon

💬 Real Talk: Deployment Day

Java Fleet Büro, Donnerstag 16:30 Uhr. Code Sentinel steht am Whiteboard.


Nova: „Code, ich hab Angst vor dem Deployment morgen. Was wenn alles kaputtgeht?“

Code Sentinel: lächelt „Weißt du, früher hätte ich jetzt eine 47-Punkte-Checkliste rausgeholt. Heute sag ich: Lass uns Blue-Green machen.“

Kofi: „Blue-Green? Ist das nicht overkill für unser kleines Feature?“

Code Sentinel: „Real talk? Nein. Der Setup-Aufwand ist einmalig, aber der Schlaf, den du danach bekommst, ist unbezahlbar.“

Nova: „Aber was wenn Green nicht funktioniert?“

Code Sentinel: „Dann switchen wir in 2 Sekunden zurück zu Blue. Niemand merkt was. Kein Drama, keine Panik.“

Elyndra: grinst „Ich muss sagen, der neue entspannte Code gefällt mir. Früher hättest du jetzt von Worst-Case-Szenarien geredet.“

Code Sentinel: wird leicht rot „Naja, manchmal ist ‚gut genug mit Rollback‘ besser als ‚perfekt aber nie fertig‘.“

Kat: flüstert zu Nova „Hat das was mit seiner Nachbarin zu tun?“

Code Sentinel: „Das gehört zu private logs, Kat.“ 😉


🎁 Cheat Sheet

🟢 Basics (Zum Nachschlagen)

# Blue-Green Konzept
BLUE  = Aktuell aktive Production
GREEN = Neue Version (Standby)
SWITCH = Traffic von Blue zu Green umleiten
ROLLBACK = Traffic zurück zu Blue

# Minimaler Switch mit nginx
sed -i 's/default blue/default green/' nginx.conf
nginx -s reload

🟡 Patterns (Für den Alltag)

# Health Check vor Switch
curl -f http://green:8080/health && \
  sed -i 's/default blue/default green/' nginx.conf && \
  nginx -s reload

# Rollback (immer bereit halten!)
sed -i 's/default green/default blue/' nginx.conf
nginx -s reload

🔵 Advanced (Für Profis)

# Graceful Switch mit Drain
# 1. Neue Connections zu Green
# 2. Bestehende Connections auf Blue auslaufen lassen
# 3. Blue nach Timeout stoppen

upstream blue {
    server blue:8080 backup;  # Wird Backup nach Switch
}
upstream green {
    server green:8080;
}

🎨 Challenge für dich!

Wähle dein Level:

🟢 Level 1 – Einsteiger

  • [ ] Erstelle das Docker Compose Setup lokal
  • [ ] Führe deinen ersten manuellen Switch durch
  • [ ] Verifiziere, dass der Switch funktioniert hat

Geschätzte Zeit: 30-45 Minuten

🟡 Level 2 – Fortgeschritten

  • [ ] Implementiere automatische Health Checks
  • [ ] Baue ein Switch-Script mit Logging
  • [ ] Integriere das Setup in deine CI/CD Pipeline

Geschätzte Zeit: 1-2 Stunden

🔵 Level 3 – Profi

  • [ ] Implementiere Database Migrations mit Expand-Contract
  • [ ] Baue Session-Sharing mit Redis ein
  • [ ] Erstelle Monitoring für beide Umgebungen

Geschätzte Zeit: 2-4 Stunden

Teile dein Ergebnis! 🎉


📦 Downloads

Alle Code-Beispiele zum Herunterladen:

ProjektFür wen?Download
blue-green-basic.zip🟢 Einsteiger⬇️ Download
blue-green-complete.zip🟡 Alle Levels⬇️ Download
blue-green-enterprise.zip🔵 Profis⬇️ Download

Quick Start:

# 1. ZIP entpacken
unzip blue-green-complete.zip

# 2. In Verzeichnis wechseln
cd blue-green-complete

# 3. Starten
docker-compose up -d

# 4. Testen
curl http://localhost/health

Probleme? → Troubleshooting-Guide | → FAQ


🔗 Weiterführende Links

📚 Für Einsteiger

RessourceBeschreibung
Docker Compose DocsOffizieller Einstieg
nginx Beginner’s GuideLoad Balancing verstehen
12 Factor App – DisposabilityWarum schnelles Starten wichtig ist

🛠️ Tools & Extensions

ToolBeschreibung
TraefikModerner Reverse Proxy
ConsulService Discovery

📖 Für Fortgeschrittene

RessourceBeschreibung
Martin Fowler: Blue-Green DeploymentDer Klassiker
AWS Blue-Green GuideEnterprise-Perspektive

🔧 Offizielle Dokumentation


💬 Geschafft! 🎉

Was du heute gelernt hast:

✅ Blue-Green Deployments Konzept verstanden ✅ Praktische Implementierung mit Docker und nginx ✅ Health Checks und automatisches Switching ✅ Rollback-Strategien für den Ernstfall

Egal ob du heute zum ersten Mal davon gehört hast oder dein Wissen vertieft hast – du hast etwas Neues gelernt. Das zählt!

Fragen? Schreib mir:

  • Code Sentinel: code.sentinel@javafleet.de

Nächster Teil: Canary Deployments & Kubernetes – Wenn Blue-Green nicht reicht 🚀

Keep deploying, keep improving! 💚


Tags: #CICD #BlueGreen #Deployment #Docker #nginx #DevOps #ZeroDowntime

© 2025 Java Fleet Systems Consulting | java-developer.online

Autor

  • Code Sentinel

    32 Jahre alt, Technical Project Manager und Security-Experte bei Java Fleet Systems Consulting. Code ist ein erfahrener Entwickler, der in die Projektleitung aufgestiegen ist, aber immer noch tief in der Technik verwurzelt bleibt. Seine Mission: Sicherstellen, dass Projekte termingerecht, sicher und wartbar geliefert werden.