diff --git a/Dockerfile b/Dockerfile index 6e42288..a8133e5 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,35 +1,37 @@ +# Base Stage +FROM node:21-slim AS base -FROM node:18-alpine AS base +ENV PNPM_HOME="/pnpm" +ENV PATH="$PNPM_HOME:$PATH" -RUN npm i -g pnpm - -FROM base AS dependencies +RUN corepack enable WORKDIR /app COPY package.json pnpm-lock.yaml ./ -RUN pnpm install --frozen-lockfile +# Dependencies Stage for Production +FROM base AS deps +RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm install --prod --frozen-lockfile + +# Build Stage FROM base AS build -WORKDIR /app +RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm install --frozen-lockfile -COPY . . +COPY . . -COPY --from=dependencies /app/node_modules ./node_modules - -RUN pnpm build - -RUN pnpm prune --prod +RUN pnpm run build +# Deploy Stage FROM base AS deploy -WORKDIR /app +COPY --from=deps /app/node_modules /app/node_modules +COPY --from=build /app/build /app/build -COPY --from=build /app/build ./build -COPY --from=build /app/node_modules ./node_modules -COPY --from=build /app/package.json ./package.json +# Run as non-root user +USER node ARG PORT=3000 @@ -37,4 +39,4 @@ ENV NODE_ENV=production PORT=$PORT EXPOSE $PORT -CMD ["node", "build"] \ No newline at end of file +CMD ["node", "build"]