Files
Kontrollverlust/dev-up.sh
T

61 lines
1.8 KiB
Bash
Executable File

#!/usr/bin/env bash
#
# dev-up.sh — baut das Image aus dem aktuellen Arbeitsverzeichnis neu und
# startet den lokalen DEV-Container (kver-dev) damit neu.
#
# Verwendung:
# ./dev-up.sh
#
# Läuft auch automatisch nach jedem Commit (githooks/post-commit, im
# Hintergrund, Log in .git/dev-up.log). Einrichten einmalig per:
# git config core.hooksPath githooks
#
# Voraussetzungen:
# - dev.env mit KVER_DSN (Host "localhost" wird für den Container auf
# host.containers.internal umgeschrieben)
# - Daten/Medien aus dem PROD-Dump unter $KVER_DEV_DATA (read-only gemountet)
#
set -euo pipefail
cd "$(dirname "$0")"
NAME=kver-dev
IMAGE=localhost/kver:dev
PORT="${KVER_DEV_PORT:-8081}"
DATA="${KVER_DEV_DATA:-./prod_backup/2026-09-26}"
# Nur ein Lauf gleichzeitig (schnell aufeinanderfolgende Commits).
exec 9>.git/dev-up.lock
flock 9
DSN="$(grep '^KVER_DSN=' dev.env | cut -d= -f2- | sed 's/@localhost:/@host.containers.internal:/')"
if [[ -z "$DSN" ]]; then
echo "FEHLER: KVER_DSN fehlt in dev.env." >&2
exit 1
fi
echo "== $(date '+%F %T') Baue $IMAGE ($(git rev-parse --short HEAD))"
podman build -q -t "$IMAGE" .
mounts=()
[[ -d "$DATA/data" ]] && mounts+=(-v "$DATA/data:/app/data:ro" -e KVER_GEOIP_ASN=/app/data/GeoLite2-ASN.mmdb)
[[ -d "$DATA/media" ]] && mounts+=(-v "$DATA/media:/app/static/media:ro")
podman rm -f "$NAME" >/dev/null 2>&1 || true
podman run -d --name "$NAME" -p "127.0.0.1:$PORT:8080" \
-e KVER_DSN="$DSN" \
"${mounts[@]}" \
--security-opt label=disable "$IMAGE" >/dev/null
# Warten, bis die API antwortet.
for _ in $(seq 30); do
if curl -fs -o /dev/null "http://127.0.0.1:$PORT/api/stats"; then
echo "== läuft: http://127.0.0.1:$PORT"
exit 0
fi
sleep 1
done
echo "FEHLER: $NAME antwortet nicht. Log:" >&2
podman logs --tail 20 "$NAME" >&2
exit 1