FROM node:24-slim AS base ENV PNPM_HOME="/pnpm" ENV PATH="$PNPM_HOME:$PATH" RUN corepack enable WORKDIR /app FROM base AS prod-deps COPY pnpm-lock.yaml ./ RUN --mount=type=cache,target=/pnpm/store \ pnpm fetch --frozen-lockfile COPY package.json ./ RUN --mount=type=cache,target=/pnpm/store \ pnpm install --frozen-lockfile --prod --offline FROM base AS build COPY pnpm-lock.yaml package.json ./ RUN --mount=type=cache,target=/pnpm/store \ pnpm install --frozen-lockfile COPY . . RUN pnpm run build FROM node:24-slim # Setup a non-root user RUN groupadd -g 9999 appuser && \ useradd -u 9999 -g appuser -m -d /app -s /sbin/nologin appuser COPY --from=prod-deps --chown=appuser:appuser /app/node_modules /app/node_modules COPY --from=build --chown=appuser:appuser /app/build /app/build USER appuser ENV ORIGIN=http://localhost:3000 ENV BODY_SIZE_LIMIT=2G EXPOSE 3000 WORKDIR /app CMD [ "node", "build" ]