# --- Build stage --- FROM node:20-alpine AS builder WORKDIR /app RUN apk add --no-cache python3 make g++ COPY package.json package-lock.json* ./ RUN npm install --no-audit --no-fund COPY . . RUN npm run build # --- Runtime stage --- FROM node:20-alpine ENV NODE_ENV=production PORT=8080 WORKDIR /app RUN apk add --no-cache python3 make g++ COPY package.json package-lock.json* ./ RUN npm install --omit=dev --no-audit --no-fund COPY --from=builder /app/client/dist ./client/dist COPY server/ ./server/ RUN mkdir -p /app/data && chown -R node:node /app USER node EXPOSE 8080 HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \ CMD wget -q --spider http://localhost:8080/ || exit 1 CMD ["node", "server/server.js"]