# ========================================== # STAGE 1: JavaScript Minifier # ========================================== FROM node:alpine AS minifier WORKDIR /minify # Tool installieren RUN npm install -g uglify-js # Alle JS-Dateien kopieren COPY static/js/ ./js/ # 1. Zusammenfügen (Reihenfolge ist wichtig!) # 2. In IIFE (Function) wickeln für Kapselung (Sicherheit) # 3. Minifizieren (Unlesbar machen) RUN cat js/config.js js/state.js js/network.js js/input.js js/logic.js js/render.js js/main.js > temp.js \ && echo "(function(){" > combined.js \ && cat temp.js >> combined.js \ && echo "})();" >> combined.js \ && uglifyjs combined.js -o game.min.js -c -m toplevel # ========================================== # STAGE 2: Go Builder # ========================================== FROM golang:1.25-alpine AS builder WORKDIR /app # Abhängigkeiten laden COPY go.mod go.sum ./ RUN go mod download # Restlichen Code kopieren COPY . . # Bauen (Der Punkt am Ende heißt: Alle Dateien im Ordner nutzen) RUN go build -o server . # ========================================== # STAGE 3: Final Runner (Production) # ========================================== FROM alpine:latest WORKDIR /root/ # Notwendige Zertifikate RUN apk --no-cache add ca-certificates # 1. Server Binary kopieren COPY --from=builder /app/server . # 2. Statische Dateien kopieren (Originale) COPY --from=builder /app/static ./static COPY --from=builder /app/secure ./secure # 3. Das MINIFIZIERTE JS kopieren (als einziges Script) COPY --from=minifier /minify/game.min.js ./static/js/game.min.js # 4. HTML ANPASSEN (Automatisch via sed) # Schritt A: Lösche alle Zeilen, die ' static/index.html # Port und Start EXPOSE 8080 CMD ["./server"]