This commit is contained in:
commit
59bb5a38a3
132 files changed
+19435
No files matched your search
+62
@@ -0,0 +1,62 @@
|
||||
# syntax=docker/dockerfile:1
|
||||
#
|
||||
# Zwei Images aus einem Build:
|
||||
# docker build --target runner -t <registry>/artista-modelcamp:<tag> .
|
||||
# docker build --target tools -t <registry>/artista-modelcamp-tools:<tag> .
|
||||
#
|
||||
# runner: der Next.js-Server (standalone), sonst nichts.
|
||||
# tools: Prisma-CLI + tsx fuer den kontrollierten Migrationsschritt
|
||||
# (Kubernetes-Job), den Worker (CronJob) und `admin:create`.
|
||||
# Beide IMMER mit demselben Tag bauen und ausrollen — sie teilen das
|
||||
# Datenbankschema.
|
||||
|
||||
FROM node:22.23.2-alpine3.24 AS base
|
||||
RUN corepack enable
|
||||
WORKDIR /app
|
||||
ENV NEXT_TELEMETRY_DISABLED=1
|
||||
|
||||
# --- Abhaengigkeiten --------------------------------------------------------
|
||||
FROM base AS deps
|
||||
COPY package.json pnpm-lock.yaml pnpm-workspace.yaml ./
|
||||
# postinstall (prisma generate) braucht das Schema, das erst im builder
|
||||
# vorliegt; generiert wird dort ausdruecklich.
|
||||
RUN pnpm install --frozen-lockfile --ignore-scripts
|
||||
|
||||
# --- Build ------------------------------------------------------------------
|
||||
FROM base AS builder
|
||||
COPY --from=deps /app/node_modules ./node_modules
|
||||
COPY . .
|
||||
# Zur Build-Zeit wird keine Datenbank und kein Secret benoetigt.
|
||||
RUN mkdir -p public && pnpm prisma generate && pnpm next build
|
||||
|
||||
# --- Laufzeit: Anwendung ------------------------------------------------------
|
||||
FROM node:22.23.2-alpine3.24 AS runner
|
||||
WORKDIR /app
|
||||
ENV NODE_ENV=production \
|
||||
NEXT_TELEMETRY_DISABLED=1 \
|
||||
PORT=3000 \
|
||||
HOSTNAME=0.0.0.0 \
|
||||
MEDIA_DIR=/app/media
|
||||
RUN addgroup --system --gid 1001 nodejs && adduser --system --uid 1001 --ingroup nodejs nextjs
|
||||
COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./
|
||||
COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static
|
||||
COPY --from=builder --chown=nextjs:nodejs /app/public ./public
|
||||
# Schreibbar fuer den Bild-Cache; im Cluster ein emptyDir (reiner Cache).
|
||||
RUN mkdir -p /app/.next/cache /app/media && chown -R nextjs:nodejs /app/.next/cache /app/media
|
||||
USER 1001
|
||||
EXPOSE 3000
|
||||
CMD ["node", "server.js"]
|
||||
|
||||
# --- Laufzeit: Werkzeuge (Migration, Worker, Admin-Anlage) --------------------
|
||||
FROM base AS tools
|
||||
ENV NODE_ENV=production
|
||||
RUN addgroup --system --gid 1001 nodejs && adduser --system --uid 1001 --ingroup nodejs nextjs
|
||||
COPY --from=builder --chown=nextjs:nodejs /app/node_modules ./node_modules
|
||||
COPY --from=builder --chown=nextjs:nodejs /app/src ./src
|
||||
COPY --from=builder --chown=nextjs:nodejs /app/scripts ./scripts
|
||||
COPY --from=builder --chown=nextjs:nodejs /app/prisma ./prisma
|
||||
COPY --from=builder --chown=nextjs:nodejs /app/prisma.config.ts /app/package.json /app/tsconfig.json ./
|
||||
ENV PATH="/app/node_modules/.bin:${PATH}"
|
||||
USER 1001
|
||||
# Standard: Migrationen anwenden. Worker: ["tsx", "scripts/worker.ts"].
|
||||
CMD ["prisma", "migrate", "deploy"]
|
||||
Reference in new issue
Block a user