Initial commit: Kalendartool (Next.js, Prisma, Docker)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
Kühn
2026-10-08 14:38:04 +02:00
commit bc49c3074e
94 changed files with 12812 additions and 0 deletions

65
Dockerfile Normal file
View File

@@ -0,0 +1,65 @@
# ---------- Build-Stage ----------
# Debian statt Alpine: Prisma 5.x erkennt hier die OpenSSL-3-Engine
# (debian-openssl-3.0.x) zuverlaessig. Auf aktuellen Alpine-Versionen
# (OpenSSL >= 3.5) faellt Prisma auf die nicht verfuegbare 1.1-Engine
# zurueck und der Client kann nicht initialisiert werden.
FROM node:20-bookworm-slim AS builder
WORKDIR /app
COPY package.json package-lock.json ./
# ci statt install: reproduzierbarer Build aus dem Lockfile
RUN npm ci
# openssl-Binary: Prisma nutzt es zur Erkennung der Engine-Version.
# Ohne dieses Binary faellt Prisma auf debian-openssl-1.1.x zurueck,
# dessen Engine auf Bookworm (OpenSSL 3) nicht ladbar ist.
RUN apt-get update -y \
&& apt-get install -y --no-install-recommends openssl \
&& rm -rf /var/lib/apt/lists/*
COPY prisma ./prisma
RUN npx prisma generate
COPY . .
RUN npm run build
# ---------- Runtime-Stage ----------
FROM node:20-bookworm-slim AS runner
WORKDIR /app
ENV NODE_ENV=production
ENV HOSTNAME=0.0.0.0
ENV PORT=3000
# openssl auch zur Laufzeit: die Prisma-CLI (migrate deploy) nutzt es
# zur Engine-Erkennung; ohne Binary sucht sie die 1.1.x-Engine und failt.
RUN apt-get update -y \
&& apt-get install -y --no-install-recommends openssl \
&& rm -rf /var/lib/apt/lists/*
RUN addgroup --system nodejs && adduser --system --ingroup nodejs nextjs
COPY --from=builder /app/public ./public
COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./
COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static
# Prisma Client inkl. Query-Engine fuer den Laufzeit-Container
COPY --from=builder --chown=nextjs:nodejs /app/node_modules/.prisma ./node_modules/.prisma
# Prisma-CLI fuer "migrate deploy" beim Start (kein npx-Download zur Laufzeit)
COPY --from=builder --chown=nextjs:nodejs /app/node_modules/prisma ./node_modules/prisma
COPY --from=builder --chown=nextjs:nodejs /app/node_modules/@prisma ./node_modules/@prisma
COPY --from=builder --chown=nextjs:nodejs /app/prisma ./prisma
# bcryptjs fuer das Admin-Seed-Script (manuell ausfuehrbar, nicht beim Start)
COPY --from=builder --chown=nextjs:nodejs /app/node_modules/bcryptjs ./node_modules/bcryptjs
USER nextjs
EXPOSE 3000
# Migrationen beim Start anwenden, optional Admin seeden, dann Server starten.
# prisma migrate deploy ist idempotent und sicher fuer wiederholte Starts.
# Das Seed-Script ist NICHT-destruktiv: Es legt den Admin nur an, wenn
# noch keiner existiert (First-Run-Detection). Bestehende User werden
# niemals geloescht. Wenn SEED_ADMIN_* nicht gesetzt sind, laeuft es
# ohne Nebeneffekte durch.
# Direkter node-Aufruf statt npx: im Standalone-Output existiert
# node_modules/.bin nicht, daher wuerde "npx prisma" mit "not found" fehlschlagen.
CMD ["sh", "-c", "node node_modules/prisma/build/index.js migrate deploy && node prisma/seed-admin.cjs && node server.js"]