#!/bin/sh # Startskript des Flimmer-Containers. # # Vor dem Start der App werden ausstehende Datenbankmigrationen ausgespielt. # Das ist bewusst hier und nicht im Image-Build: die Datenbank existiert erst # zur Laufzeit, und beim Update soll das Schema automatisch nachziehen. set -e if [ -z "$DATABASE_URL" ]; then echo "Flimmer: DATABASE_URL ist nicht gesetzt — Abbruch." >&2 exit 1 fi # Warten, bis der Datenbank-Port annimmt. Bewusst nur eine TCP-Verbindung über # Node-Bordmittel — so hängt der Start nicht an einem zusätzlichen Paket. echo "Flimmer: warte auf die Datenbank ..." node -e ' const net = require("node:net"); const url = new URL(process.env.DATABASE_URL); const host = url.hostname; const port = Number(url.port || 5432); const deadline = Date.now() + 120000; function attempt() { const socket = net.connect({ host, port }); socket.setTimeout(3000); socket.on("connect", () => { socket.end(); process.exit(0); }); const retry = () => { socket.destroy(); if (Date.now() > deadline) { console.error("Flimmer: Datenbank " + host + ":" + port + " nach 120 s nicht erreichbar."); process.exit(1); } setTimeout(attempt, 2000); }; socket.on("error", retry); socket.on("timeout", retry); } attempt(); ' echo "Flimmer: spiele Migrationen ein ..." node node_modules/prisma/build/index.js migrate deploy echo "Flimmer: starte Anwendung." exec "$@"