#!/bin/bash # deploy-local.sh – Deploy DIESES Stacks, ausgeführt im Stack-Ordner auf dem Server. # Wird von Terraform aufgerufen, funktioniert aber genauso von Hand: # # scripts/deploy-local.sh Sperre prüfen, bauen/starten, auf gesund warten # scripts/deploy-local.sh --check-flat nur die Sperre prüfen (Terraform vor dem Kopieren) # scripts/deploy-local.sh --force Sperre ignorieren # # Sperre: Der Trader hält offene Positionen nur im Speicher. Ein Neustart mitten # im Trade = für diese Position kein BE und kein CANCEL mehr. cd "$(dirname "$0")/.." || exit 1 source ./deploy.conf check_flat() { local n n=$(curl -s -m 10 "http://127.0.0.1:$MCP_PORT/positions" \ | python3 -c 'import json,sys; print(json.load(sys.stdin)["count"])' 2>/dev/null || echo "?") if [ "$n" = "0" ]; then echo "[$STACK_KEY] Keine offenen Positionen – Deploy erlaubt." return 0 fi # Stack (noch) nicht gestartet -> nichts, was verloren gehen kann if [ "$n" = "?" ] && [ -z "$(docker compose ps -q "$TRADER_SVC" 2>/dev/null)" ]; then echo "[$STACK_KEY] Trader läuft nicht – Deploy erlaubt." return 0 fi echo "[$STACK_KEY] ABBRUCH: $n offene Position(en) bzw. MCP nicht erreichbar." echo " Warten bis flat, oder bewusst: scripts/deploy-local.sh --force" return 1 } case "${1:-}" in --check-flat) check_flat; exit $? ;; --force) echo "[$STACK_KEY] --force: Sperre übersprungen" ;; *) check_flat || exit 1 ;; esac chmod +x scripts/*.sh 2>/dev/null echo "[$STACK_KEY] docker compose up -d --build" docker compose up -d --build || exit 1 echo "[$STACK_KEY] Warte auf gesunden Stack (max. 10 min)..." for i in $(seq 1 20); do if scripts/check-stack.sh -q >/dev/null 2>&1; then scripts/check-stack.sh exit 0 fi sleep 30 done scripts/check-stack.sh -q exit 1