Skip to content

Updates einspielen

Ein Update besteht immer aus zwei Teilen: neue Container-Images und — falls sich das Datenmodell geändert hat — Datenbankmigrationen. Beides erledigt das mitgelieferte Deploy-Skript in der richtigen Reihenfolge.

Grundprinzip

Images werden nicht auf dem Server gebaut. Sie werden aus der Container-Registry geladen, in der Version, die in der Datei deployment/.env unter IMAGE_TAG steht. Ein Update ist damit immer: neuen Tag eintragen → Deploy-Skript ausführen.

Ablauf

bash
cd deployment

# 1. Zielversion eintragen (Beispiel)
#    IMAGE_TAG=0.1.0-alpha.16
nano .env

# 2. Deploy
bash scripts/deploy.sh

Das Skript führt aus:

SchrittWas passiert
1Voraussetzungen prüfen — Docker, Compose, Konfiguration vorhanden
2Datenbank-Schnappschuss — vollständiger Dump vor jeder Änderung
3Images ladendocker compose pull mit dem neuen IMAGE_TAG
4Migrationenalembic upgrade head. Schlägt eine Migration fehl, bricht das Skript ab und die laufende Version bleibt unangetastet.
5Container ersetzendocker compose up -d
6Health-Check — wartet, bis der Health-Endpunkt wieder antwortet

Die Anwendung ist dabei kurz nicht erreichbar (typisch 10–30 Sekunden), während die Container ersetzt werden. Für unterbrechungsfreie Updates wären mehrere Instanzen hinter einem Load Balancer nötig — das ist nicht Teil des Lieferumfangs.

Nach dem Update prüfen

bash
# Health-Endpunkt
curl -s https://<deine-domain>/api/health
# erwartet: {"status":"ok","database":"connected","storage":"connected"}

Zusätzlich im Browser:

  • Startseite lädt,
  • Anmeldung funktioniert,
  • ein bestehender Lauf ist unverändert sichtbar.

Zurückrollen

Es gibt zwei getrennte Fälle — bitte nicht verwechseln:

a) Nur die Anwendungsversion zurücknehmen

Wenn die neue Version fehlerhaft ist, die Daten aber in Ordnung sind:

bash
# in deployment/.env den vorherigen Tag eintragen
#    IMAGE_TAG=0.1.0-alpha.15
bash scripts/deploy.sh

Achtung bei Migrationen

Das funktioniert nur, wenn das Update keine Datenbankmigration enthielt — sonst passt das alte Programm nicht mehr zum neuen Schema. Enthielt das Update eine Migration, brauchst du Fall (b).

b) Datenbank auf den Stand vor dem Update zurücksetzen

bash
bash scripts/deploy.sh --rollback

Das Skript fragt nach Bestätigung und spielt den letzten Schnappschuss vor dem Deploy zurück. Anschließend trägst du wie in (a) den alten IMAGE_TAG ein und deployst erneut, damit Programm und Schema wieder zusammenpassen.

Datenverlust

Ein Rollback der Datenbank verwirft alle Daten, die seit dem Schnappschuss entstanden sind — Einreichungen, Bewertungen, Chatnachrichten. Während eines laufenden Events ist das in aller Regel die schlechtere Option: Erst prüfen, ob sich der Fehler auch vorwärts beheben lässt.

Sicherungen

Vor jedem Deploy legt das Skript automatisch einen Schnappschuss an; die Dumps liegen im Ordner deployment/backups/ und werden 30 Tage vorgehalten. Wie du sie unabhängig davon sicherst und wiederherstellst, steht unter Datenbank.