Files
flimmer/docker/entrypoint.sh
T
2026-09-01 20:52:52 +02:00

47 lines
1.4 KiB
Bash

#!/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 "$@"