# Referenz für die PRODUKTIV-Env-Variablen (Contabo-VPS + Coolify). # ECHTE Secrets NUR in Coolify eintragen –€” diese Datei enthält nur Platzhalter. # Unterschiede zum Testserver: HTTPS-AUTH_URL, KEIN Demo-Seed, stattdessen Bootstrap-Admin. # --- Datenbank (Service "postgres") --- POSTGRES_USER=craftvia POSTGRES_PASSWORD=CHANGE_ME_starkes_db_passwort POSTGRES_DB=craftvia DATABASE_URL=postgresql://craftvia:CHANGE_ME_starkes_db_passwort@postgres:5432/craftvia?schema=public # --- Row Level Security scharfschalten (F-04) --- # RLS_ENFORCED=true –†’ die App verbindet sich als eingeschränkte Rolle craftvia_app # (NOBYPASSRLS) und setzt app.tenant_id pro Transaktion; FORCE ROW LEVEL SECURITY # macht die Policies dann scharf. Ist der Kontext nicht gesetzt, sieht craftvia_app # NULL Zeilen –€” daher NUR mit korrekt gesetztem RLS_DATABASE_URL einschalten. # WICHTIG: Die Owner-/Migrate-Rolle in DATABASE_URL MUSS BYPASSRLS/Superuser sein # (Migrationen, Seed und der mandantenübergreifende Login-Lookup laufen darüber), # sonst sähe der Login keine Nutzer. craftvia_app in Prod EINMALIG mit LOGIN + starkem # Passwort versehen: ALTER ROLE craftvia_app WITH LOGIN PASSWORD ''; RLS_ENFORCED=true RLS_DATABASE_URL=postgresql://craftvia_app:CHANGE_ME_starkes_craftvia_app_passwort@postgres:5432/craftvia?schema=public # --- Redis --- # F-18: Redis läuft mit requirepass. REDIS_PASSWORD setzen (stark!) und identisch # in die REDIS_URL einsetzen (redis://:@redis:6379). REDIS_PASSWORD=CHANGE_ME_starkes_redis_passwort REDIS_URL=redis://:CHANGE_ME_starkes_redis_passwort@redis:6379 # --- Objektspeicher (MinIO) –€” S3_* muss zu MINIO_ROOT_* passen --- S3_ENDPOINT=http://minio:9000 S3_ACCESS_KEY=CHANGE_ME_GK_plus_24_hex S3_SECRET_KEY=CHANGE_ME_starkes_minio_passwort S3_BUCKET=craftvia-documents MINIO_ROOT_USER=craftvia MINIO_ROOT_PASSWORD=CHANGE_ME_starkes_minio_passwort # --- Backup-Zielspeicher (optional) --- # Ziel der Backup-/DSGVO-Artefakte ist im Betreiber-Portal (/admin/backup) waehlbar # (Lokal/S3) und wird verschluesselt in der DB gehalten. Praezedenz: DB-Config → # Env (S3_*/BACKUP_LOCAL_DIR) → lokaler Default. Sobald im Portal gespeichert, hat # die DB-Config Vorrang. Fuer „Lokal" auf ein gemountetes, persistentes Volume zeigen. BACKUP_LOCAL_DIR=/app/.backups # --- Auth (NextAuth) –€” Produktiv über HTTPS --- # AUTH_SECRET: openssl rand -base64 32 (frisch, NICHT der Testwert) AUTH_SECRET=CHANGE_ME_openssl_rand_base64_32 # PASSWORD_PEPPER (Härtung §1): openssl rand -hex 32 — frisch je Umgebung, NICHT rotierbar, nie ins Artefakt. PASSWORD_PEPPER=CHANGE_ME_openssl_rand_hex_32 AUTH_URL=https://app.craftvia.de # AUTH_TRUST_HOST ist im Compose fest auf true (hinter dem Coolify-Proxy) –€” nicht nötig. # --- KI-Provider (optional) --- AI_PROVIDER=anthropic AI_API_KEY= # --- E-Mail (produktives SMTP-Relay, sobald Einladungs-/Mailflow aktiv) --- SMTP_HOST= SMTP_PORT=587 SMTP_USER= SMTP_PASSWORD= SMTP_FROM=noreply@craftvia.de # --- Demo-Seed: in PROD AUS lassen! --- RUN_DEMO_SEED=false # --- Erst-Superadmin-Bootstrap (statt Demo-Seed) --- # Beim ersten Deploy true setzen -> migrate-Job legt Admin + Mandant an (idempotent). # Danach kann true bleiben (tut nichts, wenn der Admin existiert) oder auf false. BOOTSTRAP_ADMIN=true BOOTSTRAP_ADMIN_EMAIL=admin@craftvia.de BOOTSTRAP_ADMIN_PASSWORD=CHANGE_ME_initiales_admin_passwort BOOTSTRAP_ADMIN_NAME=Craftvia Admin BOOTSTRAP_TENANT_NAME=Craftvia BOOTSTRAP_TENANT_SLUG=craftvia BOOTSTRAP_TENANT_SHORT=Craftvia BOOTSTRAP_TENANT_SECTOR=