diff --git a/dockerfile b/dockerfile index 0ae76b4..e98f930 100644 --- a/dockerfile +++ b/dockerfile @@ -1,38 +1,39 @@ -# 1. Base Image -FROM node:20-alpine AS base -RUN corepack enable && corepack prepare pnpm@latest --activate +# 1. Base Image: Wir nehmen "slim" statt "alpine" (baut oft schneller) +FROM node:20-slim AS base -# 2. Dependencies Stage +# Pnpm Setup +ENV PNPM_HOME="/pnpm" +ENV PATH="$PNPM_HOME:$PATH" +RUN corepack enable + +# 2. Dependencies Stage (mit Cache!) FROM base AS deps -RUN apk add --no-cache libc6-compat WORKDIR /app -COPY package.json pnpm-lock.yaml ./ -# Config setzen um Script-Warnungen zu umgehen -RUN pnpm config set dedupe-peer-dependents false -RUN pnpm install --frozen-lockfile --unsafe-perm -# 3. Builder Stage +COPY package.json pnpm-lock.yaml ./ + +# TRICK 1: Cache Mount für pnpm store +# Das verhindert, dass Pakete jedes Mal neu aus dem Internet geladen werden +RUN --mount=type=cache,id=pnpm,target=/pnpm/store \ + pnpm install --frozen-lockfile --unsafe-perm + +# 3. Builder Stage (mit Cache!) FROM base AS builder WORKDIR /app COPY --from=deps /app/node_modules ./node_modules COPY . . -# --- NEU HINZUFÜGEN: START --- -# Wir müssen die Variablen als Build-Argumente definieren +# Environment Variablen für Build ARG NEXT_PUBLIC_SUPABASE_URL ARG NEXT_PUBLIC_SUPABASE_ANON_KEY -ARG GEMINI_API_KEY - -# Und sie als Environment-Variablen für den Build-Prozess setzen ENV NEXT_PUBLIC_SUPABASE_URL=$NEXT_PUBLIC_SUPABASE_URL ENV NEXT_PUBLIC_SUPABASE_ANON_KEY=$NEXT_PUBLIC_SUPABASE_ANON_KEY -ENV GEMINI_API_KEY=$GEMINI_API_KEY - -# --- NEU HINZUFÜGEN: ENDE --- - ENV NEXT_TELEMETRY_DISABLED 1 -RUN pnpm run build +# TRICK 2: Cache Mount für Next.js Cache (.next/cache) +# Das ist der wichtigste Teil! Next.js muss nicht alles neu kompilieren. +RUN --mount=type=cache,target=/app/.next/cache \ + pnpm run build # 4. Runner Stage FROM base AS runner