Files
Wabenhain/k8s/01-configmap.yaml
T
Nick SzaunigandClaude Opus 5 990a16e654 chore: Manifeste an den laufenden Cluster angleichen
Die Manifeste in k8s/ trugen noch Platzhalter, waehrend im Cluster laengst
die echten Werte stehen. Wer sie unveraendert anwendet, ueberschreibt damit
funktionierende Einstellungen.

- Domain: shop.example.com -> wabenhain.com, in 06-ingress.yaml (host und
  tls.hosts) und in 01-configmap.yaml (NEXT_PUBLIC_SITE_URL). Beide Stellen
  muessen uebereinstimmen; aus NEXT_PUBLIC_SITE_URL entstehen Sitemap,
  Canonical-Tags und jeder Link in jeder Bestellbestaetigung.

- GOOGLE_PLACES_API_KEY von der ConfigMap ins Secret. Das ist ein
  abrechenbarer Zugangsschluessel, und eine ConfigMap ist unverschluesselt
  und in der Cluster-Oberflaeche im Klartext lesbar. Die zugehoerige
  GOOGLE_PLACE_ID ist oeffentlich und bleibt in der ConfigMap. Der Cluster
  handhabt das bereits so.

- APICORE_API_URL vom Secret in die ConfigMap: eine Adresse ist kein
  Geheimnis. Auch das entspricht dem Cluster.

- VIDEO_TRANSCODE_THREADS in die ConfigMap aufgenommen, damit die
  Threadbegrenzung des Video-Transcodes (siehe vorheriger Commit) auch ueber
  das Deployment einstellbar ist.

Gegenprobe: die Vereinigung aller Schluessel aus ConfigMap und Secret deckt
jetzt genau die Umgebungsvariablen ab, die der Code ueber process.env liest
- keine fehlt. Die beiden Ueberhaenge sind beabsichtigt: DB_PASSWORD liest
der Postgres-StatefulSet, STRIPE_PUBLISHABLE_KEY haelt die Konfiguration
vollstaendig fuer eine kuenftige clientseitige Stripe-Einbindung.

Der Hinweistext der Go-Live-Pruefung nannte shop.example.com als
ausgelieferte Vorgabe; das stimmt nicht mehr. Die Pruefung selbst ist
unveraendert.

Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
2026-09-17 02:20:34 +02:00

47 lines
2.4 KiB
YAML

# Nicht-geheime Konfiguration. Geheimnisse (Passwoerter, API-Keys) gehoeren
# in 02-secret.yaml (aus 02-secret.example.yaml kopiert), NIE hierher.
apiVersion: v1
kind: ConfigMap
metadata:
name: wabenhain-config
namespace: wabenhain
data:
# "postgresql" oder "mysql" — muss zum Service passen, den du unter
# 03-postgres.yaml/03-mysql.yaml tatsaechlich ausrollst, UND zum
# DATABASE_URL-Host in 02-secret.yaml. Ein einzelnes Image traegt beide
# Prisma-Client-Varianten, siehe src/lib/prisma.ts.
DATABASE_PROVIDER: "postgresql"
NODE_ENV: "production"
# Oeffentliche URL des Shops (fuer absolute Links in E-Mails/Sitemaps/CSP).
# 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 <[email protected]>"
# Optional, siehe README-Abschnitte "Google-Rezensionen"/"CAPTCHA" — leer
# lassen, wenn nicht genutzt, die App faellt automatisch zurueck.
#
# 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,
# siehe app/api/admin/upload/route.ts) — MUSS exakt dem mountPath des
# "uploads"-Volumes in 05-app-deployment.yaml entsprechen. Die App selbst
# weiss nicht, was fuer ein Volume dort gemountet ist; siehe .env.example.
UPLOAD_DIR: "/app/uploads"