FROM node:20-alpine AS client-build WORKDIR /app/client COPY client/package.json ./ RUN npm install COPY client/ ./ RUN npm run build FROM node:20-slim WORKDIR /app COPY server/package.json ./server/ RUN cd server && npm install --omit=dev COPY server/ ./server/ COPY --from=client-build /app/client/dist ./client/dist WORKDIR /app/server ENV PORT=8080 EXPOSE 8080 HEALTHCHECK --interval=30s --timeout=3s --start-period=10s \ CMD node -e "require('http').get('http://localhost:8080/health', r => process.exit(r.statusCode===200?0:1)).on('error', () => process.exit(1))" CMD ["node", "index.js"]