# Build stage FROM node:20-alpine AS builder WORKDIR /app # Copy root package files for workspace install COPY package*.json ./ COPY backend/package*.json ./backend/ COPY backend/prisma ./backend/prisma/ # Install dependencies using npm install (no individual lockfile in workspace) RUN npm install --legacy-peer-deps # Copy backend source COPY backend/ ./backend/ # Generate Prisma client and build WORKDIR /app/backend RUN npx prisma generate RUN npm run build # Production stage FROM node:20-alpine WORKDIR /app # Install OpenSSL for Prisma RUN apk add --no-cache openssl # Copy package files COPY package*.json ./ COPY backend/package*.json ./backend/ # Install production dependencies RUN npm install --legacy-peer-deps --omit=dev # Copy built files from builder COPY --from=builder /app/backend/dist ./backend/dist COPY --from=builder /app/backend/node_modules/.prisma ./backend/node_modules/.prisma COPY --from=builder /app/backend/prisma ./backend/prisma WORKDIR /app/backend # Expose port EXPOSE 3001 # Start application CMD ["npm", "start"]