# ── Stage 1: React bauen ───────────────────────────────────────────────────── FROM node:20-alpine AS builder WORKDIR /build COPY frontend/package.json ./ RUN npm install COPY frontend/ ./ # version.txt VOR dem Build generieren – Unix-Timestamp (Sekunden) # Dieser Wert wird von vite.config.js als __BUILD_TIME__ ins Bundle gebacken # UND vom Backend als /api/build-time ausgeliefert → exakt derselbe Wert RUN date -u +"%s" > ./version.txt # Build-Version in sw.js einsetzen damit der Browser bei jedem Deploy einen neuen SW erkennt RUN BUILD_V=$(cat ./version.txt) && sed -i "s/__BUILD_VERSION__/${BUILD_V}/g" ./public/sw.js RUN npm run build # ── Stage 2: Express liefert API + React in einem Container ────────────────── FROM node:20-alpine RUN apk add --no-cache tzdata python3 make g++ WORKDIR /app COPY backend/package.json ./ RUN npm install --production COPY backend/ ./ # version.txt aus dem Build-Stage kopieren (selber Wert wie im JS-Bundle) COPY --from=builder /build/version.txt ./version.txt COPY --from=builder /build/dist ./public EXPOSE 4000 CMD ["node", "src/index.js"]