ARG NODE_IMAGE=node:20-alpine FROM ${NODE_IMAGE} AS build WORKDIR /app COPY backend/package*.json ./ RUN npm ci COPY backend/prisma ./prisma RUN npm run prisma:generate COPY backend/ ./ RUN npm run build FROM ${NODE_IMAGE} AS runtime WORKDIR /app ENV NODE_ENV=production COPY backend/package*.json ./ RUN npm ci --include=dev COPY --from=build /app/node_modules/.prisma ./node_modules/.prisma COPY --from=build /app/node_modules/@prisma/client ./node_modules/@prisma/client COPY --from=build /app/prisma ./prisma COPY backend/prisma/seed-initial.cjs ./prisma/seed-initial.cjs COPY backend/prisma/seed-demo.cjs ./prisma/seed-demo.cjs COPY --from=build /app/dist ./dist COPY docker/backend-entrypoint.sh /usr/local/bin/backend-entrypoint.sh RUN chmod +x /usr/local/bin/backend-entrypoint.sh EXPOSE 3000 ENTRYPOINT ["backend-entrypoint.sh"] CMD ["npm", "run", "start:prod"]