diff --git a/.github/workflows/deploy.yaml b/.github/workflows/deploy.yaml index 47bd7bb..dc35df6 100644 --- a/.github/workflows/deploy.yaml +++ b/.github/workflows/deploy.yaml @@ -162,10 +162,12 @@ jobs: # Ingress und App-Manifest anpassen sed -i "s|\${APP_URL}|${{ env.APP_URL }}|g" k8s/ingress.yaml + sed -i "s|\${TARGET_NS}|${{ env.TARGET_NS }}|g" k8s/ingress.yaml sed -i "s|\${IMAGE_NAME}|${{ env.DEPLOY_IMAGE }}|g" k8s/app.yaml # Anwenden echo "Deploying to Namespace: ${{ env.TARGET_NS }} (Image: ${{ env.DEPLOY_IMAGE }})" + kubectl apply -f k8s/compress-middleware.yaml -n ${{ env.TARGET_NS }} kubectl apply -f k8s/pvc.yaml -n ${{ env.TARGET_NS }} kubectl apply -f k8s/nats.yaml -n ${{ env.TARGET_NS }} kubectl apply -f k8s/redis.yaml -n ${{ env.TARGET_NS }} diff --git a/Dockerfile b/Dockerfile index bcd2497..3de291a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -34,8 +34,11 @@ RUN echo "🗜️ Komprimiere Bilder..." && \ # 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 +# WASM Client bauen (mit Strip-Flags: -w entfernt Debug-Info, -s entfernt Symbol-Tabelle) +RUN GOOS=js GOARCH=wasm go build -ldflags="-w -s" -o cmd/client/web/main.wasm ./cmd/client + +# Unnötige Audio-Dateien entfernen (game.wav = 40MB, nur game.mp3 wird verwendet) +RUN rm -f cmd/client/web/assets/game.wav # Stage 2: Production Image FROM alpine:latest diff --git a/cmd/server/gin_server.go b/cmd/server/gin_server.go index be63e31..4a91af9 100644 --- a/cmd/server/gin_server.go +++ b/cmd/server/gin_server.go @@ -32,7 +32,7 @@ func SetupGinServer(ec *nats.EncodedConn, port string) *gin.Engine { // Cache Control Middleware für statische Assets r.Use(func(c *gin.Context) { path := c.Request.URL.Path - // Assets (Bilder, Fonts, etc.) - 1 Jahr cachen + // Assets (Bilder, Audio, etc.) - 1 Jahr cachen if len(path) > 7 && path[:8] == "/assets/" { c.Header("Cache-Control", "public, max-age=31536000, immutable") } @@ -40,6 +40,14 @@ func SetupGinServer(ec *nats.EncodedConn, port string) *gin.Engine { if (path == "/main.wasm" || path == "/game.js" || path == "/wasm_exec.js") && c.Query("v") != "" { c.Header("Cache-Control", "public, max-age=31536000, immutable") } + // CSS und Hintergrundbild - 1 Tag cachen + if path == "/style.css" || path == "/background.jpg" { + c.Header("Cache-Control", "public, max-age=86400") + } + // HTML - immer neu laden (enthält BUILD_VERSION für Cache-Busting der JS/WASM) + if path == "/" || path == "/index.html" { + c.Header("Cache-Control", "no-cache") + } c.Next() }) diff --git a/k8s/ingress.yaml b/k8s/ingress.yaml index 49294ec..8d50cf0 100644 --- a/k8s/ingress.yaml +++ b/k8s/ingress.yaml @@ -5,7 +5,7 @@ metadata: annotations: cert-manager.io/cluster-issuer: letsencrypt-prod traefik.ingress.kubernetes.io/router.entrypoints: web, websecure - traefik.ingress.kubernetes.io/router.middlewares: gitea-redirect-https@kubernetescrd + traefik.ingress.kubernetes.io/router.middlewares: gitea-redirect-https@kubernetescrd,${TARGET_NS}-compress@kubernetescrd spec: ingressClassName: traefik tls: