# Base stage with Node.js FROM node:20-alpine AS base WORKDIR /app # Dependencies stage FROM base AS dependencies COPY package.json package-lock.json ./ RUN npm ci --only=production && \ cp -R node_modules /tmp/prod_node_modules && \ npm ci # Build stage FROM base AS build COPY --from=dependencies /app/node_modules ./node_modules COPY . . # Build the client application RUN npm run build # Production stage FROM base AS production # Install production dependencies COPY --from=dependencies /tmp/prod_node_modules ./node_modules # Copy built application COPY --from=build /app/dist ./dist COPY --from=build /app/server ./server COPY --from=build /app/shared ./shared COPY --from=build /app/drizzle.config.ts ./ COPY --from=build /app/package.json ./ # Set environment variables ENV NODE_ENV=production ENV PORT=5000 # Expose the application port EXPOSE 5000 # Health check HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \ CMD node -e "require('http').get('http://localhost:5000/api/health', (r) => {process.exit(r.statusCode === 200 ? 0 : 1)})" # Start the application CMD ["node", "server/index.js"]