# Stage 1: Builder FROM golang:1.25.5-alpine AS builder # Build-Dependencies (bash für das Cache-Version-Skript) RUN apk add --no-cache git bash sed WORKDIR /app # Dependencies cachen COPY go.mod go.sum ./ RUN go mod download # Source Code kopieren COPY . . # Assets generieren (falls nicht vorhanden) RUN if [ ! -f cmd/client/web/assets/assets.json ]; then \ echo "🔨 Generiere Assets..."; \ go run ./cmd/builder; \ else \ echo "✅ Assets bereits vorhanden"; \ fi # Cache-Version aktualisieren (für Browser-Cache-Busting) RUN chmod +x scripts/cache-version.sh && \ ./scripts/cache-version.sh # Server binary bauen RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -a -installsuffix cgo -ldflags="-w -s" -o server ./cmd/server # WASM Client bauen RUN GOOS=js GOARCH=wasm go build -o cmd/client/web/main.wasm ./cmd/client # Stage 2: Production Image FROM alpine:latest RUN apk --no-cache add ca-certificates curl tzdata && \ addgroup -g 1000 appuser && \ adduser -D -u 1000 -G appuser appuser WORKDIR /app # Binary und Web-Dateien vom Builder kopieren COPY --from=builder /app/server . COPY --from=builder /app/cmd/client/web ./cmd/client/web # User wechseln USER appuser # Port für HTTP/WebSocket EXPOSE 8080 # Healthcheck HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \ CMD curl -f http://localhost:8080/health || exit 1 CMD ["./server"]