Files
appRobotBodyTracker/deploy.sh
2026-06-08 21:15:15 +02:00

54 lines
1.8 KiB
Bash

#!/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:-<host>}:${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