#!/bin/sh # FlorianNetz Container-Entrypoint. # Ablauf: auf Postgres warten -> Migrationen anwenden -> (optional) seeden -> # App-Server starten. Idempotent: Migration + Seed nutzen Journal/Upserts. set -eu echo "[entrypoint] FlorianNetz startet ..." if [ -z "${DATABASE_URL:-}" ]; then echo "[entrypoint] FEHLER: DATABASE_URL ist nicht gesetzt." >&2 exit 1 fi # --- 1) Auf Postgres warten --------------------------------------------------- # pg_isready akzeptiert die DATABASE_URL direkt; bis ~60 s pollen. echo "[entrypoint] Warte auf Postgres ..." ATTEMPTS=0 MAX_ATTEMPTS="${DB_WAIT_RETRIES:-60}" until pg_isready -d "${DATABASE_URL}" >/dev/null 2>&1; do ATTEMPTS=$((ATTEMPTS + 1)) if [ "${ATTEMPTS}" -ge "${MAX_ATTEMPTS}" ]; then echo "[entrypoint] FEHLER: Postgres nach ${MAX_ATTEMPTS} Versuchen nicht erreichbar." >&2 exit 1 fi sleep 1 done echo "[entrypoint] Postgres ist erreichbar." # --- 2) Migrationen anwenden (idempotent über das Drizzle-Journal) ------------ echo "[entrypoint] Wende Migrationen an ..." node docker/migrate.mjs # --- 3) Optionaler Seed ------------------------------------------------------- # RUN_SEED=true füllt den NÖ-Katalog (idempotente Upserts). Setzt das gebündelte # Seed-Skript voraus (docker/seed.mjs); fehlt es, wird der Schritt übersprungen. if [ "${RUN_SEED:-false}" = "true" ]; then if [ -f docker/seed.mjs ]; then echo "[entrypoint] Führe Katalog-Seed aus ..." node docker/seed.mjs else echo "[entrypoint] RUN_SEED=true, aber docker/seed.mjs fehlt — Seed übersprungen." >&2 fi fi # --- 4) App-Server starten ---------------------------------------------------- echo "[entrypoint] Starte Anwendung: $*" exec node server.js