diff --git a/Dockerfile b/Dockerfile index 0c43219..0905f46 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,10 +1,15 @@ +# syntax=docker/dockerfile:1 -FROM node:20-alpine AS deps +FROM node:22-alpine AS deps WORKDIR /app COPY package.json package-lock.json ./ -RUN npm ci --ignore-scripts +# BuildKit cache mount keeps npm's global cache between builds — +# subsequent npm ci only downloads changed/new packages instead of +# re-fetching everything from the registry (~30-60s saving). +RUN --mount=type=cache,target=/root/.npm \ + npm ci --ignore-scripts -FROM node:20-alpine AS builder +FROM node:22-alpine AS builder WORKDIR /app COPY --from=deps /app/node_modules ./node_modules @@ -23,9 +28,12 @@ ENV NEXT_PUBLIC_STORAGE_ADAPTER=${NEXT_PUBLIC_STORAGE_ADAPTER} ENV NEXT_PUBLIC_APP_NAME=${NEXT_PUBLIC_APP_NAME} ENV NEXT_PUBLIC_APP_URL=${NEXT_PUBLIC_APP_URL} +# Increase memory for Next.js build if VM has limited RAM +ENV NODE_OPTIONS="--max-old-space-size=2048" + RUN npm run build -FROM node:20-alpine AS runner +FROM node:22-alpine AS runner WORKDIR /app ENV NODE_ENV=production