Hetzner-MVP für Industriekunden — Lean Custom-App-Stack

Brainstorm-Output nach /ce:brainstorm am 2026-05-13. Quellt das Implementations-Planning (/ce:plan).

Problem Frame

Neuer Industriekunden-Lead mit „Datensicherheit oberste Priorität”. AWS Frankfurt ist formal DSGVO-konform aber fällt unter US CLOUD Act — ein Knock-Out-Argument für deutsche Industriekunden die explizit „kein US-Anbieter” wollen.

Das bestehende ADR llm-hosting-eu-optionen (April 2026) hat Hetzner Frankfurt als Default für App+DB-Hosting und Mistral La Plateforme als Default-LLM für DSGVO-strenge Kunden festgelegt — aber das wurde in der Praxis nicht umgesetzt. Der gesamte bisherige Stack (Becker, VF, Voice-POC, agents-platform) liegt auf AWS.

Mit diesem Lead wird die Umsetzung des ADRs akut. Wir brauchen einen Lean-Stack der reicht um den Kunden zu onboarden, ohne den vollen AWS-Twin nachzubauen (keine K3s-Schicht, keine MCP-Bundle-Mechanik, kein eigener Logging-Stack).

Requirements

Infrastruktur

  • R1. Hetzner-Account + Project pro Kunde (Customer-isoliert via API-Token)
  • R2. 2× Hetzner Cloud Server (1× CCX23 für App+LiteLLM, 1× CCX13 für Postgres) in eu-central (Falkenstein oder Nürnberg)
  • R3. Object Storage Bucket für Kunden-Daten + LLM-Audit-Logs mit 7-Jahre-Retention-Lifecycle
  • R4. Postgres 16 mit pgvector-Extension auf CCX13 + 50 GB Volume
  • R5. Backup-Strategie für Postgres (Hetzner Snapshots + pg_dump nach Object Storage)

LLM-Schicht

  • R6. Mistral La Plateforme Account + DPA unterschrieben
  • R7. LiteLLM als Provider-Adapter im App-Container (laut LLM-ADR Pflicht-Pattern)
  • R8. LiteLLM Logging-Hook protokolliert jeden LLM-Call Volltext I/O nach Object Storage (DSGVO-Audit-Trail, analog Bedrock-Invocation-Logging bei Becker)

Edge / Auth

  • R9. Cloudflare-Tunnel von App zu Cloudflare-Edge (kein direkter Public-Port auf VM)
  • R10. Cloudflare Access für SSO/Whitelist (Kunden-User authentifizieren)

Operations

  • R11. Better Stack als Log-Drain (strukturierte Logs + Alarme, kein eigener Loki-Stack)
  • R12. Terraform mit hcloud-Provider als IaC (state in Object Storage), Manual-Operations via lazyants Hetzner-MCP
  • R13. Hetzner Cost-Limit + Better-Stack-Notification bei Schwellwert-Überschreitung

Daten-Souveränität

  • R14. Client-Side-Encryption sensibler Felder via age vor Upload nach Object Storage (KMS-Äquivalent)
  • R15. Hetzner AVV unterschrieben, Mistral DPA unterschrieben
  • R16. VVT-Eintrag beim Kunden ergänzt (Hetzner + Mistral als Auftragsverarbeiter)

Capability-Dokumentation

  • R17. intern/capabilities/hetzner/_index.md als Hetzner-Sub-Index (analog aws/_index.md)
  • R18. Hetzner-MCP (lazyants) lokal registriert in MCP-Config für Infra-Steuerung aus Claude Code heraus

Success Criteria

  • Industriekunde kann komplett onboarded werden ohne AWS-Berührung (vom Pitch zum Live-Setup in ≤1 Woche aktive Bauzeit)
  • Compliance-Story sauber: deutsche AVV, kein US-Anbieter im Daten-Pfad, vollständiger LLM-Audit-Trail
  • Fixe Hetzner-Kosten unter 100 €/Mo (Server + Storage + Volume), Mistral pay-per-use
  • Pattern dokumentiert und wiederholbar für Folge-Industriekunden ohne Neudenken

Scope Boundaries

Drin:

  • 2-VM-Stack (App + DB) mit Docker Compose
  • 1 Kunde = 1 Hetzner Project
  • Mistral als LLM, LiteLLM-Adapter, Audit-Hook
  • Cloudflare-Tunnel + Access
  • Better Stack als externer Logging-Drain

Draußen (kommt später wenn 2+ Industriekunden):

  • Cloudfleet K3s / Kubernetes — Overkill für 1 App
  • MCP-Schicht / claude.ai-Connector — kein Industriekunden-Standard, Becker hat das auch nicht
  • Vault / Keycloak / Authentik — Docker-Compose-Secrets reichen bei 1 Kunde
  • Loki/Grafana-Stack — Better Stack als externer Drain reicht
  • Wazuh/CrowdSec SIEM — Hetzner-Console + Cloudflare-WAF reichen
  • Multi-Tenant-Schicht — 1 Project pro Kunde, harte Isolation via Projects
  • Voice-Stack — nicht im Industriekunden-Profil
  • Lambda/Cron-Routinen-Pendant — agents-platform bleibt auf AWS, das ist unser eigenes Tooling
  • Migration VF und Voice-POC — running system, kein Migrations-Druck

Update 2026-05-13: Becker ist jetzt explizit auf Hetzner — V3-Vertragspaket umgestellt vor Versand. Hintergrund: Ralfs “macht es genau wie Lisa Board” (Lisa läuft auf Hetzner) plus zweiter Industriekunden-Lead per WhatsApp mit Skepsis gegenüber US-Anbietern. Damit ist die Regel Industriekunde = Hetzner etabliert.

Bewusst NICHT entschieden in dieser Iteration:

  • Domain-Name für die App (kommt mit Lead-Briefing)
  • Konkrete LLM-Modell-Wahl innerhalb Mistral (Large 3 als Default, Medium 3 wenn Volume-Druck)
  • Konkreter Use-Case der App (CRM-Add-on? Vertragsprüfung? Internal-Tool?) — kommt mit Lead-Briefing

Key Decisions

  • D1 Zweite Spur statt Pivot. Hetzner und AWS parallel. Hetzner = Default für alle Industriekunden (Becker, neuer Lead aus WhatsApp-Forward 13.05.2026), AWS = Standard für Stripe-Tier/Self-Service/Voice-POC/agents-platform. Memory-Regel „AWS-First Hosting” gilt nicht mehr ungefiltert — siehe hosting-industriekunden.
  • D2 Lean-MVP statt AWS-Twin. Industriekunden-Profil ist deutlich schmaler als VF-Profil (kein MCP-Bundle, kein Multi-User-Chat, keine Multi-Tenancy). Das spart ~2 Wochen Bauzeit und ~50 €/Mo Fixkosten.
  • D3 Mistral La Plateforme als Default-LLM. Frankreich, kein CLOUD Act, DSGVO-klar. Plus Provider-Adapter via LiteLLM damit Wechsel jederzeit möglich (Anthropic via Bedrock, vLLM-Self-Host bei High-Volume).
  • D4 2 VMs + Docker Compose statt Kubernetes. Bei einem Workload + DB ist Compose simpler, billiger, debuggbarer. K3s/Cloudfleet kommt erst wenn 2-3 Kunden oder Shared Tenancy.
  • D5 Cloudflare bleibt Edge-Layer. Tunnel + Access wie heute. Kein Wechsel — Cloudflare ist provider-unabhängig und ist bereits etabliert.
  • D6 Better Stack statt eigener Loki-Stack. 0-25 €/Mo extern statt 2 Tage Setup + monatliche Pflege selbst.
  • D7 Terraform als IaC. hcloud-Provider ist reif, State in Object Storage. lazyants Hetzner-MCP für Ad-hoc-Operations aus Claude Code.

Dependencies / Assumptions

  • Hetzner-Account muss neu angelegt werden (heute nicht vorhanden)
  • Mistral La Plateforme Account muss neu angelegt werden + DPA unterschrieben
  • Lead-Briefing mit Industriekunde noch ausstehend — Use-Case, Daten-Klassifikation, User-Anzahl, Integrations-Bedarf unklar
  • Better Stack Account (Free-Tier wahrscheinlich ausreichend für 1 Kunde)
  • Cloudflare-Account ist da (bestehend)

Outstanding Questions

Resolve Before Planning

(keine — alle blockierenden Strategie-Entscheidungen sind getroffen)

Deferred to Planning

  • [Affects R5][Technical] Backup-Strategie Postgres: nur Hetzner Snapshots, oder zusätzlich pg_dump auf Object Storage mit Lifecycle?
  • [Affects R12][Technical] Hetzner-Skill hetzner-deploy (analog mcp-cloud-bereitstellung) jetzt oder erst beim zweiten Kunden?
  • [Affects R17][Needs research] Capability-Doku-Struktur: 1:1-Spiegel von intern/capabilities/aws/_index.md-Struktur oder eigenes Layout?
  • [Affects R14][Technical] Welche konkreten Felder im Datenmodell sind „sensitiv” und brauchen Client-Side-Encryption? Hängt am Use-Case.
  • [Branche/Use-Case Industriekunde][Lead-Briefing] Custom-App vs RAG-System vs Internal-Chat — bestimmt App-Code-Skeleton
  • [Affects R8][Technical] Audit-Log-Format: JSON-Lines pro Call oder strukturiertes Per-Day-Aggregat?

Next Steps

/ce:plan für strukturierten Implementierungsplan

Cross-Refs

Verlauf

  • 2026-05-13: Projekt angelegt. Brainstorm via /ce:brainstorm durchgelaufen — 2 Strategie-Entscheidungen festgelegt (D1 Zweite Spur, D2 Lean-MVP). Pressure-Test ergab: LLM-ADR existiert seit April 2026 aber wurde nicht umgesetzt. Scope-Reduktion auf reines Industriekunden-Bedarf (statt MCP-Bundle-Stack) macht Customer-Ready in ≤1 Woche realistisch.