Basis: Certvia dev@a48c5fb als Fundament für Craftvia
CI / build-and-check (push) Canceled after 0s
CI / audit (push) Canceled after 0s
CI / sbom (push) Canceled after 0s

Unveränderter Stand von certvia/dev (a48c5fb) plus Craftvia-Spezifikation
und Brandbook unter docs/craftvia/. ISMS-Module werden im Folgecommit entfernt.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-14 11:05:39 +02:00
co-authored by Claude Opus 5
commit c8e6f30a27
720 changed files with 140143 additions and 0 deletions
+76
View File
@@ -0,0 +1,76 @@
# 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=isms
POSTGRES_PASSWORD=CHANGE_ME_starkes_db_passwort
POSTGRES_DB=isms
DATABASE_URL=postgresql://isms:CHANGE_ME_starkes_db_passwort@postgres:5432/isms?schema=public
# --- Row Level Security scharfschalten (F-04) ---
# RLS_ENFORCED=true → die App verbindet sich als eingeschränkte Rolle isms_app
# (NOBYPASSRLS) und setzt app.tenant_id pro Transaktion; FORCE ROW LEVEL SECURITY
# macht die Policies dann scharf. Ist der Kontext nicht gesetzt, sieht isms_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. isms_app in Prod EINMALIG mit LOGIN + starkem
# Passwort versehen: ALTER ROLE isms_app WITH LOGIN PASSWORD '<stark>';
RLS_ENFORCED=true
RLS_DATABASE_URL=postgresql://isms_app:CHANGE_ME_starkes_isms_app_passwort@postgres:5432/isms?schema=public
# --- Redis ---
# F-18: Redis läuft mit requirepass. REDIS_PASSWORD setzen (stark!) und identisch
# in die REDIS_URL einsetzen (redis://:<pw>@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=isms
S3_SECRET_KEY=CHANGE_ME_starkes_minio_passwort
S3_BUCKET=isms-documents
MINIO_ROOT_USER=isms
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.certvia.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@certvia.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@certvia.de
BOOTSTRAP_ADMIN_PASSWORD=CHANGE_ME_initiales_admin_passwort
BOOTSTRAP_ADMIN_NAME=Certvia Admin
BOOTSTRAP_TENANT_NAME=Certvia
BOOTSTRAP_TENANT_SLUG=certvia
BOOTSTRAP_TENANT_SHORT=Certvia
BOOTSTRAP_TENANT_SECTOR=