#!/usr/bin/env bash # --------------------------------------------------------------------------- # appRobotBodyTracker — Build & Start ohne Portainer (per docker compose). # # ./deploy.sh bauen + starten (Default) # ./deploy.sh logs Live-Logs # ./deploy.sh stop stoppen + entfernen # ./deploy.sh status Status # # Die robot.json ist im Image eingebacken (/app/config/robot.json) -> kein # Volume noetig. Das Skript repariert vorher automatisch den haeufigen Fall, # dass config/robot.json versehentlich ein (leeres) Verzeichnis ist. # --------------------------------------------------------------------------- set -euo pipefail cd "$(dirname "$0")" PORT=8446 NAME=appRobotBodyTracker case "${1:-up}" in logs) exec docker compose logs -f ;; stop) exec docker compose down ;; status) exec docker compose ps ;; esac # --- robot.json muss eine DATEI sein (kein Phantom-Verzeichnis vom Bind-Mount) --- if [ -d config/robot.json ]; then echo ">> config/robot.json ist ein Verzeichnis -> repariere aus tests/data/robot.json" rm -rf config/robot.json cp tests/data/robot.json config/robot.json fi if [ ! -f config/robot.json ]; then echo "FEHLER: config/robot.json fehlt." echo "Fix: cp tests/data/robot.json config/robot.json" exit 1 fi echo ">> Build + Start ($NAME, Port $PORT)" docker compose up -d --build echo ">> Warte auf /v1/health ..." for _ in $(seq 1 30); do if curl -fsS "http://localhost:${PORT}/v1/health" >/dev/null 2>&1; then echo ">> OK $(curl -fsS "http://localhost:${PORT}/v1/health")" ip="$(hostname -I 2>/dev/null | awk '{print $1}')" echo ">> API erreichbar unter: http://${ip:-}:${PORT}" echo ">> Logs: ./deploy.sh logs | Stop: ./deploy.sh stop" exit 0 fi sleep 1 done echo ">> WARN: Health nicht erreicht. Logs ansehen: ./deploy.sh logs" exit 1