diff --git a/k8s/01-configmap.yaml b/k8s/01-configmap.yaml index 728b073..6910dfd 100644 --- a/k8s/01-configmap.yaml +++ b/k8s/01-configmap.yaml @@ -13,14 +13,30 @@ data: DATABASE_PROVIDER: "postgresql" NODE_ENV: "production" # Oeffentliche URL des Shops (fuer absolute Links in E-Mails/Sitemaps/CSP). - NEXT_PUBLIC_SITE_URL: "https://shop.example.com" + # Muss zum "host" in 06-ingress.yaml passen, sonst zeigen Sitemap, + # Canonical-Tags und jeder Link in jeder Bestellbestaetigung ins Leere. + NEXT_PUBLIC_SITE_URL: "https://wabenhain.com" SMTP_PORT: "587" SMTP_FROM: "Wabenhain " # Optional, siehe README-Abschnitte "Google-Rezensionen"/"CAPTCHA" — leer # lassen, wenn nicht genutzt, die App faellt automatisch zurueck. - GOOGLE_PLACES_API_KEY: "" + # + # Nur die Place-ID steht hier: sie ist oeffentlich, sie steckt in jeder + # Google-Maps-Adresse des Eintrags. Der zugehoerige GOOGLE_PLACES_API_KEY + # ist dagegen ein abrechenbarer Zugangsschluessel und liegt im Secret — + # eine ConfigMap ist unverschluesselt und in der Cluster-Oberflaeche im + # Klartext lesbar. GOOGLE_PLACE_ID: "" NEXT_PUBLIC_TURNSTILE_SITE_KEY: "" + # Adresse der ApiCore-API fuer den Stammdaten-Sync (Ernten, Produkte, + # Chargen — siehe src/lib/apicore-client.ts). Nur die URL; die Zugangsdaten + # des Sync-Kontos liegen im Secret. + APICORE_API_URL: "" + # Threads fuer das Umrechnen hochgeladener Videos. Nicht gesetzt bedeutet 2. + # NICHT ohne Not erhoehen: ffmpeg teilt sich das Speicherlimit dieses Pods + # mit dem Node-Prozess, und jeder zusaetzliche Thread haelt eigene + # Bildpuffer (bei 4K rund 12 MB je Bild). Siehe src/lib/video-transcode.ts. + VIDEO_TRANSCODE_THREADS: "2" # "sandbox" bis DHL-Versandmarken getestet sind, danach "production". DHL_ENVIRONMENT: "sandbox" # Verzeichnis fuer hochgeladene Bilder (Inhalte-/Produkt-/Erntenfotos, diff --git a/k8s/02-secret.example.yaml b/k8s/02-secret.example.yaml index 38b66fe..016fb1e 100644 --- a/k8s/02-secret.example.yaml +++ b/k8s/02-secret.example.yaml @@ -57,12 +57,19 @@ stringData: DHL_ACCOUNT_NUMBER: "" # Entra-ID-SSO ("Mit Microsoft anmelden"), siehe .env.example fuer die # Einrichtung in Azure. ENTRA_REDIRECT_URI muss auf die echte, oeffentliche - # Domain zeigen (z.B. https://shop.example.com/api/auth/entra/callback). + # Domain zeigen: https://wabenhain.com/api/auth/entra/callback ENTRA_TENANT_ID: "" ENTRA_CLIENT_ID: "" ENTRA_CLIENT_SECRET: "" ENTRA_REDIRECT_URI: "" - # ApiCore-Ernten-Sync (Admin -> Ernten -> Sync), siehe .env.example. - APICORE_API_URL: "" + # Abrechenbarer Zugangsschluessel fuer die Google-Places-API (echte + # Google-Rezensionen auf der Startseite). Gehoert hierher und NICHT in + # 01-configmap.yaml: eine ConfigMap ist unverschluesselt und in der + # Cluster-Oberflaeche im Klartext lesbar. Die zugehoerige, oeffentliche + # GOOGLE_PLACE_ID steht dort. + GOOGLE_PLACES_API_KEY: "" + # Zugangsdaten des ApiCore-Sync-Kontos (Admin -> Ernten bzw. Produkte -> + # "ApiCore-Synchronisierung"), siehe .env.example. Die zugehoerige Adresse + # APICORE_API_URL ist nicht geheim und steht in 01-configmap.yaml. APICORE_SYNC_EMAIL: "" APICORE_SYNC_PASSWORD: "" diff --git a/k8s/06-ingress.yaml b/k8s/06-ingress.yaml index ae9f962..8aa7ae5 100644 --- a/k8s/06-ingress.yaml +++ b/k8s/06-ingress.yaml @@ -80,10 +80,10 @@ spec: ingressClassName: traefik tls: - hosts: - - shop.example.com + - wabenhain.com secretName: wabenhain-tls rules: - - host: shop.example.com + - host: wabenhain.com http: paths: - path: / diff --git a/k8s/README.md b/k8s/README.md index 930613e..be226ab 100644 --- a/k8s/README.md +++ b/k8s/README.md @@ -50,9 +50,11 @@ anwendbar. Nummerierung = empfohlene Reihenfolge. 6. `image:` in `05-app-deployment.yaml` zeigt bereits auf `git.encry.de/nick.rosenloecher/wabenhain` — nur noch den Tag pruefen - (`:latest` passt fuer den jeweils neuesten `main`-Build). In - `06-ingress.yaml` `shop.example.com` durch die echte Domain ersetzen - (zweimal: `host:` und `tls.hosts`). + (`:latest` passt fuer den jeweils neuesten `main`-Build). Die Domain steht + in `06-ingress.yaml` (`host:` und `tls.hosts`) und in `01-configmap.yaml` + (`NEXT_PUBLIC_SITE_URL`) bereits als `wabenhain.com` — beide Stellen + muessen uebereinstimmen, sonst zeigen Sitemap, Canonical-Tags und die + Links in allen Bestellbestaetigungen woandershin. ## Deployment diff --git a/scripts/preflight.ts b/scripts/preflight.ts index fc8896d..b387348 100644 --- a/scripts/preflight.ts +++ b/scripts/preflight.ts @@ -81,7 +81,7 @@ must( must( "NEXT_PUBLIC_SITE_URL ist die echte Domain, kein Platzhalter", !siteUrl.includes("example.com") && !siteUrl.includes("example.org"), - 'k8s/01-configmap.yaml und k8s/06-ingress.yaml liefern "shop.example.com" als Vorgabe aus. Bleibt der Wert stehen, zeigen Sitemap, Canonical-Tags und jeder Link in jeder Bestellbestaetigung auf eine fremde Domain.' + 'Die echte Domain steht in k8s/01-configmap.yaml (NEXT_PUBLIC_SITE_URL) und k8s/06-ingress.yaml (host/tls.hosts) und muss an beiden Stellen dieselbe sein. Steht hier eine Beispiel-Domain, zeigen Sitemap, Canonical-Tags und jeder Link in jeder Bestellbestaetigung auf eine fremde Domain.' ); // --- Zahlung ---------------------------------------------------------------