Dieselbe Codebasis laeuft nativ auf dem Rechner oder komplett im Container. docker-compose.yml mit Profilen statt mehrerer Dateien: - "db" laeuft immer -> docker compose up -d db, App dann lokal per npm - --profile full -> zusaetzlich der App-Container - --profile tools -> Adminer als Datenbankoberflaeche Dockerfile als Multi-Stage-Build auf dem Next-Standalone-Output. In die Laufzeitschicht wandern zusaetzlich Prisma-CLI, Engines und Schema, damit der Entrypoint beim Start "migrate deploy" ausfuehren kann. Das Alpine-Image bekommt openssl fuer die Prisma-Engines, der Client wird zusaetzlich fuer linux-musl-openssl-3.0.x erzeugt. Der Container laeuft als unprivilegierter Benutzer und meldet seinen Zustand ueber /api/health. Der Entrypoint wartet in einer Schleife auf die Datenbank, ergaenzend zum pg_isready-Healthcheck und der depends_on-Bedingung. scripts/setup.mjs legt die .env aus der Vorlage an und erzeugt dabei ein zufaelliges APP_SECRET, damit die Tokens nicht mit dem Standardschluessel verschluesselt werden. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
31 lines
1.1 KiB
Bash
31 lines
1.1 KiB
Bash
#!/bin/sh
|
||
# ─────────────────────────────────────────────────────────────
|
||
# Startet Nebula im Container: erst Migrationen, dann der Server.
|
||
# ─────────────────────────────────────────────────────────────
|
||
set -e
|
||
|
||
PRISMA_CLI="/app/node_modules/prisma/build/index.js"
|
||
SCHEMA="/app/prisma/schema.prisma"
|
||
|
||
if [ -z "$DATABASE_URL" ]; then
|
||
echo "[nebula] FEHLER: DATABASE_URL ist nicht gesetzt." >&2
|
||
exit 1
|
||
fi
|
||
|
||
echo "[nebula] Migrationen werden eingespielt…"
|
||
|
||
attempt=0
|
||
max_attempts=15
|
||
until node "$PRISMA_CLI" migrate deploy --schema "$SCHEMA"; do
|
||
attempt=$((attempt + 1))
|
||
if [ "$attempt" -ge "$max_attempts" ]; then
|
||
echo "[nebula] FEHLER: Migration nach $max_attempts Versuchen fehlgeschlagen." >&2
|
||
exit 1
|
||
fi
|
||
echo "[nebula] Datenbank noch nicht bereit – neuer Versuch in 3s ($attempt/$max_attempts)"
|
||
sleep 3
|
||
done
|
||
|
||
echo "[nebula] Migrationen ok. Server startet auf Port ${PORT:-3000}."
|
||
exec "$@"
|