ARG NODE_VERSION=24 ARG TURBO_VERSION=2.6.3 FROM node:${NODE_VERSION}-slim AS base ENV PNPM_HOME="/pnpm" ENV PATH="$PNPM_HOME:$PATH" RUN corepack enable FROM base AS prepare # Set working directory WORKDIR /app RUN pnpm install -g turbo@${TURBO_VERSION} COPY . . RUN turbo prune @olli/backend --docker # Add lockfile and package.json's of isolated subworkspace FROM base AS builder WORKDIR /app RUN pnpm install -g turbo@${TURBO_VERSION} # First install dependencies (as they change less often) COPY --from=prepare /app/out/json/ . COPY --from=prepare /app/out/pnpm-lock.yaml ./pnpm-lock.yaml RUN pnpm install --frozen-lockfile # Build the project and its dependencies COPY --from=prepare /app/out/full/ . RUN turbo build --filter=@olli/backend FROM base AS runner WORKDIR /app # Don't run production as root RUN groupadd --system --gid 1001 backend RUN useradd --system --uid 1001 --gid backend backend # Copy package files and install production dependencies only COPY --from=prepare /app/out/json/ . COPY --from=prepare /app/out/pnpm-lock.yaml ./pnpm-lock.yaml RUN pnpm install --prod --frozen-lockfile # Copy built application COPY --from=builder --chown=backend:backend /app/apps/backend/dist ./apps/backend/dist COPY --from=builder --chown=backend:backend /app/apps/backend/package.json ./apps/backend/package.json USER backend # Set default environment variables (can be overridden) ENV NODE_ENV=production ENV PORT=80 EXPOSE 80 CMD ["node", "apps/backend/dist/index.js"]