Files
Nick Szaunig c7927f2883 feat: Wabenhain Honig-Shop Anwendung
Vollstaendige Next.js/Prisma-E-Commerce-Anwendung fuer eine Imkerei:
Shop, Warenkorb, Stripe-Checkout, Kundenkonto mit 2FA, Admin-Bereich
(Produkte, Ernten, Chargen, Bestellungen, Gutscheine, admin-editierbare
Website-Inhalte), i18n (DE/EN), Rate-Limiting/CSP/Audit-Log-Haertung,
PostgreSQL- und MySQL-Unterstuetzung ueber austauschbare Prisma-
Treiber-Adapter, Unit-/Komponenten-/E2E-Tests.
2026-08-17 14:30:28 +02:00

83 lines
3.9 KiB
Bash

# Datenbank: "postgresql" (Standard) oder "mysql". Nach einer Aenderung
# einmal `pnpm db:push` ausfuehren (schreibt prisma/schema.prisma neu und
# generiert den passenden Treiber-Adapter-Client) — siehe README, Abschnitt
# "Datenbank-Provider wechseln".
DATABASE_PROVIDER=postgresql
# PostgreSQL (Standard). Fuer docker compose siehe POSTGRES_* unten.
DATABASE_URL="postgresql://wabenhain:wabenhain@localhost:5432/wabenhain?schema=public"
# MySQL/MariaDB stattdessen:
# DATABASE_URL="mysql://wabenhain:wabenhain@localhost:3306/wabenhain"
# Postgres-Zugangsdaten fuer docker-compose.yml (Datenbank-Container)
POSTGRES_USER=wabenhain
POSTGRES_PASSWORD=change-me
POSTGRES_DB=wabenhain
# Nur noetig, wenn DATABASE_PROVIDER=mysql: Zugangsdaten fuer den
# db-mysql-Container ("docker compose --profile mysql up -d db-mysql")
MYSQL_USER=wabenhain
MYSQL_PASSWORD=change-me
MYSQL_DATABASE=wabenhain
# Stripe (Test-Keys aus dem Stripe-Dashboard, https://dashboard.stripe.com/test/apikeys)
STRIPE_SECRET_KEY=sk_test_xxxxxxxxxxxxxxxxxxxxxxxx
STRIPE_PUBLISHABLE_KEY=pk_test_xxxxxxxxxxxxxxxxxxxxxxxx
# Webhook-Secret aus `stripe listen` bzw. dem Stripe-Dashboard-Webhook-Endpoint
STRIPE_WEBHOOK_SECRET=whsec_xxxxxxxxxxxxxxxxxxxxxxxx
# Admin-Zugang: Der interne /admin-Bereich wird NICHT per Basic-Auth
# geschuetzt, sondern ueber das normale Kundenkonto-Login (/konto) und die
# Rolle "ADMIN" am Konto (siehe README, Abschnitt "Admin-Zugang"). Diese
# beiden Werte legt `prisma db seed` als initiales Admin-Konto an, falls es
# noch nicht existiert. Eine UNVORHERSEHBARE E-Mail waehlen (nicht
# "admin@..." o.ae.) — sonst koennte sich vor dem ersten Seed-Lauf jemand
# genau diese Adresse selbst registrieren; prisma/seed.ts befoerdert ein
# bereits bestehendes Nicht-Admin-Konto zwar nicht mehr automatisch, ein
# unvorhersehbarer Wert ist trotzdem die robustere erste Verteidigungslinie.
ADMIN_EMAIL=[email protected]
ADMIN_PASSWORD=change-me
# Geheimer Schluessel zum Signieren der Kundenkonto-JWTs (HS256).
# In Produktion MINDESTENS 32 Zeichen (wird beim Start erzwungen).
# Erzeugen z.B. mit: openssl rand -base64 32
SESSION_SECRET=change-me-to-a-long-random-string
# Basis-URL der Seite (fuer absolute Links, z.B. in E-Mails/Sitemaps).
# Lokale Entwicklung (pnpm dev): http://localhost:3000 (Standard hier).
# Vollstaendiger Docker-Betrieb: http://localhost (Caddy laeuft auf Port 80,
# siehe SITE_ADDRESS/Caddyfile unten) bzw. die echte Domain in Produktion.
NEXT_PUBLIC_SITE_URL=http://localhost:3000
# Nur fuer den vollstaendigen Docker-Betrieb (docker-compose.yml, Caddyfile):
# die oeffentliche Domain, unter der die Seite erreichbar sein soll. Leer
# gelassen laeuft Caddy lokal per HTTP auf Port 80 ohne TLS — fuer eine
# echte Domain mit automatischem HTTPS z.B. "wabenhain.com" eintragen.
SITE_ADDRESS=
# Google Rezensionen (optional). Ohne diese beiden Werte zeigt die Startseite
# automatisch die statischen Beispiel-Stimmen als Fallback.
# API-Key: Google-Cloud-Projekt mit aktivierter "Places API".
# Place-ID: https://developers.google.com/maps/documentation/places/web-service/place-id
GOOGLE_PLACES_API_KEY=
GOOGLE_PLACE_ID=
# Cloudflare Turnstile (optional). Ohne diese beiden Werte wird auf
# Registrierung, Newsletter und Firmenanfrage kein CAPTCHA angezeigt und die
# serverseitige Pruefung uebersprungen. Site-Key ist oeffentlich (NEXT_PUBLIC_),
# Secret-Key bleibt privat. Einrichtung: https://dash.cloudflare.com/?to=/:account/turnstile
TURNSTILE_SECRET_KEY=
NEXT_PUBLIC_TURNSTILE_SITE_KEY=
# SMTP fuer Transaktions-E-Mails (Bestellbestaetigung, Newsletter-Opt-in,
# Passwort-Reset). Ohne diese drei Werte werden E-Mails nur geloggt statt
# versendet — praktisch fuer lokale Entwicklung ohne Mail-Setup.
# Funktioniert mit jedem SMTP-Anbieter (z.B. das E-Mail-Postfach eures
# Domain-Hosters wie IONOS/Strato, oder ein Dienst wie Resend/Postmark im
# SMTP-Modus).
SMTP_HOST=
SMTP_PORT=587
SMTP_USER=
SMTP_PASSWORD=
SMTP_FROM="Wabenhain <[email protected]>"