FROM node:24-bookworm-slim AS build ENV PNPM_HOME="/pnpm" ENV PATH="$PNPM_HOME:$PATH" RUN corepack enable && corepack prepare pnpm@11.5.2 --activate RUN apt-get update && apt-get install -y --no-install-recommends openssl && rm -rf /var/lib/apt/lists/* WORKDIR /app COPY Backend/package.json Backend/pnpm-workspace.yaml ./Backend/ COPY UI/package.json UI/pnpm-workspace.yaml ./UI/ # Install in separate layers to keep peak memory low. RUN cd Backend && pnpm install RUN cd UI && pnpm install COPY . . # Build the frontend, then generate the Prisma client and compile the backend. RUN cd UI && pnpm run build RUN cd Backend && DATABASE_URL=postgresql://x:x@localhost/x pnpm run generate && pnpm run build FROM node:24-bookworm-slim AS runtime ENV NODE_ENV=production ENV PNPM_HOME="/pnpm" ENV PATH="$PNPM_HOME:$PATH" RUN corepack enable && corepack prepare pnpm@11.5.2 --activate RUN apt-get update && apt-get install -y --no-install-recommends openssl && rm -rf /var/lib/apt/lists/* WORKDIR /app COPY Backend/package.json Backend/pnpm-workspace.yaml Backend/prisma.config.ts ./Backend/ COPY Backend/prisma ./Backend/prisma RUN cd Backend && pnpm install --prod && DATABASE_URL=postgresql://x:x@localhost/x pnpm run generate COPY --from=build /app/Backend/dist ./Backend/dist COPY --from=build /app/UI/build ./UI/build EXPOSE 5000 # Apply migrations on boot, then start the API (which also serves the UI build). CMD ["sh", "-c", "cd /app/Backend && pnpm migrate:deploy && cd dist && node index.js"]