Files
hd-commerce/.env.example
T
till 50dfca59e1 v2.4: Medienbibliothek+WebP, Varianten-Matrix, Litestream-Backups, intelligentere Analytics
P1 Medien: eigener Admin-Bereich /admin/medien (Grid, Mehrfach-Upload, Drag&Drop, Alt-Text, URL kopieren, Loeschen). Upload konvertiert JPG/PNG via sharp zu WebP (Qualitaet 82, max 2000px), Original wird verworfen; WebP/SVG/GIF/AVIF unveraendert; Konvertierungsfehler -> Original behalten statt 500. media um alt/width/height erweitert. Wiederverwendbarer Medien-Picker (public/media-picker.js) ersetzt den URL-Prompt im Block-Editor, Produkt-Editor (Karte/Galerie/Varianten-Bild), Slides und Popups. JSON-Quelle /api/admin/media (session-gesichert).

P2 Varianten: products.options_json + Tabelle product_variants. Produkt-Editor mit Options-Definition + Matrix-Generator (Preis-Override/Bestand/SKU/Bild/aktiv je Variante). PDP-Selektoren -> Variante; Cart/Checkout tragen sku+Options, Order-Item bekommt sku/variant, Variantenpreis serverseitig verifiziert. Produkte ohne Optionen unveraendert.

P3 Litestream: Binary im Dockerfile, docker-entrypoint.sh (Restore+replicate nur bei LITESTREAM_REPLICA_URL, sonst reiner Node-Start), litestream.yml, Backup-Status unter Einstellungen, README + .env.example.

P4 Analytics: Bestseller, Top-Suchbegriffe, Umsatz/Quelle, Umsatz-Zeitreihe, AOV, Wiederkaufrate, Lager-Warnungen.

Neue Dep sharp. +19 Unit-Tests (49 gesamt gruen), Build + Smoke (P1-P4) gruen.
2026-06-18 08:09:57 +00:00

76 lines
2.8 KiB
Bash

# hd-commerce — Umgebungsvariablen
# --- Datenbank ---
# Pfad zur SQLite-Datenbank (wird automatisch angelegt)
DB_PATH=./data/hdc.db
# --- Admin-Zugang (Session-Login) ---
# Initial-Owner, der beim ERSTEN Start angelegt wird (danach im Admin verwaltbar)
ADMIN_EMAIL=admin@example.com
ADMIN_PASS=admin
# Unter welchem Pfad der Admin erreichbar ist (z.B. "admin" -> /admin, "intern" -> /intern)
ADMIN_PATH=admin
# Geheimnis zum Signieren der Session-Cookies (HMAC). In Produktion UNBEDINGT setzen!
SESSION_SECRET=bitte-langes-zufaelliges-geheimnis-setzen
# --- KI-/MCP-Admin-API ---
# Bearer-Token für /api/admin/* (getrennt von der Session). Leer => API gesperrt.
HDC_API_TOKEN=
# --- Stripe (optional) ---
# Ohne echte Keys läuft der Demo-Checkout-Fallback.
STRIPE_PUBLIC_KEY=pk_test_xxxxxxxxxxxxxxxxxxxxxxxx
STRIPE_SECRET_KEY=sk_test_xxxxxxxxxxxxxxxxxxxxxxxx
# --- MCP-Server (mcp/) ---
# HDC_BASE_URL=https://shop.example.com
# HDC_API_TOKEN= (dasselbe Token wie oben)
# --- Zahlung: Provider-Abstraktion (v2.2) ---
# Provider explizit wählen: mollie | stripe | demo. Leer => Auto-Wahl nach vorhandenen Keys.
PAYMENT_PROVIDER=
# Mollie (Default-Anbieter). Test- oder Live-Key. Ohne gültigen Key läuft der Demo-Fallback.
MOLLIE_API_KEY=
# (Stripe-Keys siehe oben — werden weiterhin unterstützt.)
# --- E-Mail-Versand (v2.2) ---
# Provider: listmonk | smtp | (leer => Log-Fallback in DB-Tabelle email_log)
MAIL_PROVIDER=
# Absenderadresse für ausgehende Mails
MAIL_FROM=shop@example.com
# Listmonk (Transactional-API /api/tx)
LISTMONK_URL=https://listmonk.example.com
LISTMONK_USER=
LISTMONK_PASS=
LISTMONK_TX_TEMPLATE_ID=
# SMTP (alternativ, via nodemailer)
SMTP_HOST=
SMTP_PORT=587
SMTP_USER=
SMTP_PASS=
SMTP_SECURE=false
# --- Feature-Module (v2.3) ---
# Warenkorb-Erinnerung: Token, das den Cron-Endpoint /api/cron/abandoned schützt.
# Leer => Endpoint bleibt gesperrt (401). Coolify-Scheduled-Task ruft den Endpoint mit diesem Token.
CRON_TOKEN=
# Karten, die älter als X Minuten sind und weder bezahlt noch erinnert wurden, werden erinnert.
ABANDONED_AFTER_MINUTES=30
# --- Medien / WebP (v2.4) ---
# Uploads von JPG/PNG werden automatisch zu WebP konvertiert (Dependency: sharp, prebuilt-Binary).
# Im node:22-slim-Image baubar (python3/make/g++ sind im Dockerfile vorhanden).
WEBP_QUALITY=82
WEBP_MAX_WIDTH=2000
# --- Backup: Litestream (v2.4, optional) ---
# Ohne diese Variablen läuft die App normal OHNE Backup (reiner Node-Start).
# Ist LITESTREAM_REPLICA_URL gesetzt, wird die SQLite-DB (DB_PATH) live nach S3/B2 gestreamt
# und beim Start bei Bedarf wiederhergestellt.
# Backblaze B2 ist S3-kompatibel: s3://<bucket>/<pfad>
LITESTREAM_REPLICA_URL=
LITESTREAM_ACCESS_KEY_ID=
LITESTREAM_SECRET_ACCESS_KEY=
# B2-S3-Endpoint, z. B. s3.eu-central-003.backblazeb2.com (für AWS S3 leer lassen)
LITESTREAM_ENDPOINT=