#!/bin/sh # Startskript des Backend-Containers. # # Wartet auf die Datenbank, bringt das Schema auf den aktuellen Stand und legt # beim allerersten Start die Stammdaten an. Erst danach startet die Anwendung. set -eu WARTEZEIT_SEKUNDEN="${DB_WAIT_SECONDS:-60}" warte_auf_datenbank() { i=0 while [ "$i" -lt "$WARTEZEIT_SEKUNDEN" ]; do if python -c " import asyncio, sys from sqlalchemy import text from app.db.session import engine async def pruefen(): async with engine.connect() as verbindung: await verbindung.execute(text('SELECT 1')) await engine.dispose() try: asyncio.run(pruefen()) except Exception: sys.exit(1) " 2>/dev/null; then return 0 fi i=$((i + 1)) [ "$i" -eq 1 ] && echo "Warte auf die Datenbank …" sleep 1 done echo "Die Datenbank war nach ${WARTEZEIT_SEKUNDEN} Sekunden nicht erreichbar." >&2 return 1 } warte_auf_datenbank echo "Migrationen werden angewendet …" alembic upgrade head # Idempotent und nur beim leeren Kategoriebaum – bewusst gelöschte Kategorien # kehren dadurch nicht bei jedem Neustart zurück. python -m app.scripts.seed --if-empty echo "moneyfy-Backend startet." exec "$@"