Add guarded pre-production deployment script
This commit is contained in:
+22
-8
@@ -86,20 +86,34 @@ Den Beispielpfad durch den tatsächlichen absoluten Pfad ersetzen, kein `~` in `
|
||||
|
||||
Vor Aktivierung bestätigen: Die vorhandene DB ist die Pre-Production-DB, keine lokalen Daten oder Sessions wurden importiert. Übernommene `sessions`, `push_devices` und `push_notifications` aus einem anderen Umfeld müssen vor Aktivierung gezielt bereinigt werden; dies nicht durch Kopieren lokaler Daten lösen. Für den Smoke-Test frisch in Pre-Production anmelden und das Gerät dort registrieren.
|
||||
|
||||
Der bevorzugte reguläre Deployment-Weg im bestehenden Checkout ist nun:
|
||||
|
||||
```bash
|
||||
git pull --ff-only
|
||||
docker compose -f compose.yml -f compose.preprod.yml config --quiet
|
||||
docker compose -f compose.yml -f compose.preprod.yml build web
|
||||
docker compose -f compose.yml -f compose.preprod.yml run --rm --no-deps web \
|
||||
./scripts/deploy-preprod.sh
|
||||
```
|
||||
|
||||
Das Script verlangt Branch `main` und einen sauberen Working Tree, führt `git pull --ff-only origin main` aus und benutzt durchgehend `sudo docker compose -f compose.yml -f compose.preprod.yml`. Es prüft die Konfiguration still, baut nur das Web-Image und führt den erwarteten Service-Account-Preflight in einem temporären Container aus. Erst bei Exit-Code 0 und `PASS` aktualisiert es mit `up -d --no-deps web`; danach prüft es den laufenden Container. Zum Abschluss zeigt es Compose-Status, höchstens 100 Web-Logzeilen der letzten zwei Minuten und den deployten Commit. Build- oder Preflight-Fehler vor `up` lassen den laufenden Webcontainer unverändert. Das Script führt kein `down`, keine Volume-Operation, keinen erzwungenen Recreate und keine DB-Aktualisierung aus.
|
||||
|
||||
#### Manueller Fallback / Troubleshooting
|
||||
|
||||
Die einzelnen Schritte bleiben für Diagnose oder Script-Ausfall verfügbar. In allen Befehlen dieselben gegebenenfalls vorhandenen Server-Overrides ergänzen:
|
||||
|
||||
```bash
|
||||
git status --short
|
||||
git pull --ff-only origin main
|
||||
sudo docker compose -f compose.yml -f compose.preprod.yml config --quiet
|
||||
sudo docker compose -f compose.yml -f compose.preprod.yml build web
|
||||
sudo docker compose -f compose.yml -f compose.preprod.yml run --rm --no-deps web \
|
||||
python push_preflight.py \
|
||||
--expected-service-account metalcircle-push-preprod@metalcircle-30d9b.iam.gserviceaccount.com
|
||||
# Nur bei PASS fortsetzen. Das bestehende db-Service muss bereits laufen.
|
||||
docker compose -f compose.yml -f compose.preprod.yml up -d --no-deps web
|
||||
docker compose -f compose.yml -f compose.preprod.yml exec -T web \
|
||||
sudo docker compose -f compose.yml -f compose.preprod.yml up -d --no-deps web
|
||||
sudo docker compose -f compose.yml -f compose.preprod.yml exec -T web \
|
||||
python push_preflight.py \
|
||||
--expected-service-account metalcircle-push-preprod@metalcircle-30d9b.iam.gserviceaccount.com
|
||||
docker compose -f compose.yml -f compose.preprod.yml ps
|
||||
docker compose -f compose.yml -f compose.preprod.yml logs --since=5m --tail=100 web
|
||||
sudo docker compose -f compose.yml -f compose.preprod.yml ps
|
||||
sudo docker compose -f compose.yml -f compose.preprod.yml logs --since=2m --tail=100 --no-color web
|
||||
git log -1 --format='%h %s'
|
||||
```
|
||||
|
||||
Zusätzliche bisher verwendete Server-Overrides bei diesen Befehlen beibehalten und ihre endgültigen Werte kontrollieren. Keine neue DB anlegen, kein `down -v`, kein Entwicklungs-Reload-Mount. `config --quiet` prüft ohne Ausgabe der interpolierten Secrets; vollständige `compose config`-/`docker inspect`-Ausgaben nicht teilen. Der normale FastAPI-Start führt die vorhandene Schema-Prüfung aus; diese Push-Konfiguration benötigt keine neue Migration.
|
||||
|
||||
Reference in New Issue
Block a user