Docker Image bauen und veroeffentlichen / build-and-push (push) Successful in 2m29s
Uploads (Bilder + Hero-Video) schlugen live fehl, lokal aber nicht: der Container laeuft als non-root "nextjs", /app/uploads existierte nirgends vorbereitet und gehoert root -> mkdir() scheiterte mit EACCES, unbehandelt als HTML-500 statt JSON, der Client zeigte nur einen haengenden "wird hochgeladen"-Zustand ohne Fehlermeldung. - Dockerfile legt /app/uploads jetzt vor dem User-Wechsel an und uebereignet es dem nextjs-Nutzer - docker-compose.yml persistiert Uploads jetzt ueber ein eigenes Volume (vorher gingen sie bei jedem Redeploy verloren) und setzt UPLOAD_DIR explizit - Beide Upload-Routen fangen Dateisystemfehler jetzt ab und liefern eine echte JSON-Fehlermeldung statt eine unbehandelte Exception - k8s-Manifeste vorsorglich mitgefixt (fsGroup fuer den Volume-Mount, Ingress-Body-Size-Limit) fuer den Fall eines spaeteren Kubernetes-Wechsels Co-Authored-By: Claude Sonnet 5 <[email protected]>
47 lines
1.9 KiB
YAML
47 lines
1.9 KiB
YAML
# Setzt einen bereits im Cluster laufenden Ingress-Controller voraus (z.B.
|
|
# ingress-nginx) sowie optional cert-manager fuer automatisches TLS. Host
|
|
# unten anpassen (muss zu NEXT_PUBLIC_SITE_URL in 01-configmap.yaml passen).
|
|
#
|
|
# X-Forwarded-For: ingress-nginx setzt den Header standardmaessig korrekt
|
|
# (verwirft einen vom Client mitgeschickten Wert), lib/rate-limit.ts vertraut
|
|
# genau darauf — bei einem ANDEREN Ingress-Controller/zusaetzlichen Proxy
|
|
# davor unbedingt pruefen, dass er sich genauso verhaelt, siehe Kommentar in
|
|
# lib/rate-limit.ts.
|
|
apiVersion: networking.k8s.io/v1
|
|
kind: Ingress
|
|
metadata:
|
|
name: wabenhain
|
|
namespace: wabenhain
|
|
annotations:
|
|
# Nur relevant, falls cert-manager installiert ist — sonst diese beiden
|
|
# Zeilen und den "tls:"-Block unten entfernen und Host per HTTP betreiben
|
|
# oder TLS auf andere Weise terminieren.
|
|
cert-manager.io/cluster-issuer: letsencrypt-prod
|
|
nginx.ingress.kubernetes.io/ssl-redirect: "true"
|
|
# ingress-nginx laesst ohne diese Annotation standardmaessig nur 1 MB pro
|
|
# Request durch — weit unter dem Bild- (8 MB, lib/uploads.ts
|
|
# MAX_UPLOAD_BYTES) und erst recht dem Video-Limit (40 MB, lib/uploads.ts
|
|
# MAX_UPLOAD_VIDEO_BYTES) der Admin-Uploads. Ohne diese Zeile bricht
|
|
# nginx jeden Upload jenseits von 1 MB vor der App ab (Verbindungsabbruch
|
|
# ohne verwertbare Fehlermeldung im Browser) — 45m deckt das groessere der
|
|
# beiden Limits (40 MB) plus etwas Spielraum fuer den multipart/form-data-
|
|
# Overhead ab.
|
|
nginx.ingress.kubernetes.io/proxy-body-size: "45m"
|
|
spec:
|
|
ingressClassName: nginx
|
|
tls:
|
|
- hosts:
|
|
- shop.example.com
|
|
secretName: wabenhain-tls
|
|
rules:
|
|
- host: shop.example.com
|
|
http:
|
|
paths:
|
|
- path: /
|
|
pathType: Prefix
|
|
backend:
|
|
service:
|
|
name: wabenhain-app
|
|
port:
|
|
number: 80
|