diff --git a/Dockerfile b/Dockerfile index 9d9c62b..fa2def1 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,21 +1,28 @@ -FROM node:18-alpine - -RUN apk update +# Stage 1: install dependencies +FROM node:25-alpine AS deps +WORKDIR /app +COPY package*.json . ARG NODE_ENV=production ENV NODE_ENV=${NODE_ENV} +RUN npm config set fetch-retry-maxtimeout 600000 -g && npm ci +# Stage 2: build +FROM node:25-alpine AS builder +WORKDIR /app +COPY --from=deps /app/node_modules ./node_modules +COPY . . ENV DIRECTUS_URL=https://clic.epfl.ch/directus ENV NEXT_PUBLIC_DIRECTUS_URL=https://clic.epfl.ch/directus +RUN apk update && npm run build +# Stage 3: run +FROM node:25-alpine WORKDIR /app -COPY package.json package-lock.json ./ -RUN npm config set fetch-retry-maxtimeout 600000 -g && npm ci - -COPY . . -RUN npm run build - # switch to unprivileged user from node base image RUN chown -R node . USER node - +COPY --from=builder /app/.next ./.next +COPY --from=builder /app/public ./public +COPY --from=builder /app/node_modules ./node_modules +COPY --from=builder /app/package.json ./ CMD [ "npm", "start" ]