diff --git a/scripts/deploy-from-artifact.sh b/scripts/deploy-from-artifact.sh index ccf2daa..f0c63fd 100755 --- a/scripts/deploy-from-artifact.sh +++ b/scripts/deploy-from-artifact.sh @@ -161,6 +161,28 @@ log "Step 5: pm2 restart rebreak-staging..." "${PM2_BIN}" start "${REPO_ROOT}/ecosystem.config.js" --only rebreak-staging log "rebreak-staging restarted" +# 5b. Warten bis Backend-Port ready ist (max 60s). +# Verhindert Deploy-Race: rebreak-idle-staging startet Initial-Scan-Welle sofort +# beim Hochfahren -- wenn Port 3016 noch nicht lauscht, schlaegt jeder +# triggerScan-Call mit "fetch failed" fehl und der idle-Daemon loggt einen +# Burst (1 Fehler pro aktivem Mail-Account). Das ist kein Crash (fetch-Fehler +# werden im catch absorbiert), aber es produziert Larm im Error-Log und +# verpasst den Initial-Sweep. +# curl --retry: 12 Versuche alle 5s = 60s Timeout. --retry-connrefused: auch +# bei ECONNREFUSED (Port noch nicht offen) weiterversuchen, nicht sofort abbrechen. +# --silent --output /dev/null: kein Response-Body in die Logs. +# --fail: Exit-Code != 0 bei HTTP 4xx/5xx -- wir wollen nur "Port lauscht". +# Nitro antwortet auf / mit 200 (oder redirect), auf unbekannte Routen mit 404 -- +# beides bedeutet "Backend laeuft". Daher kein --fail hier. +log "Step 5b: Warte auf Backend-Port 3016 (max 60s)..." +if curl --silent --output /dev/null \ + --retry 12 --retry-delay 5 --retry-connrefused \ + "http://127.0.0.1:3016/"; then + log "Backend-Port 3016 ready" +else + log "WARN: Backend-Port 3016 nicht erreichbar nach 60s -- idle-Restart trotzdem fortsetzen" +fi + # 6. Optional services (best-effort, Mo's Scope) log "Step 6: Optional services restart..." "${PM2_BIN}" restart rebreak-imap-staging 2>/dev/null || true