Technische Dokumentation

StartLobster Architektur

Two-Way Ticket Sync Plattform — Hochverfügbare Infrastruktur mit Reverse Proxy, Self-Registration und automatisierter Provisionierung auf Hetzner Cloud.

Version 1.0
Stand Februar 2026
Infrastruktur Hetzner Cloud
Status Production
System-Architektur

Die Plattform besteht aus einem hochverfügbaren Reverse Proxy mit automatischer SSL-Terminierung, Self-Registration der Backend-Server und einer vollautomatisierten Provisioning-Pipeline.

┌─────────────────────────────────────────────────────────────────────┐ INTERNET / CLIENTS *.startlobster.de → DNS Wildcard A-Record └──────────────────────────────┬──────────────────────────────────────┘ │ ▼ ┌──────────────────────────────────────────────────────────────────────┐ FLOATING IP: floating-ip.example Keepalived VRRP Failover ┌──────────────────┐ ┌──────────────────┐ proxy-1 (MASTER) │◄──VRRP──►│ proxy-2 (BACKUP) │ Caddy v2.11 │ sync │ Caddy v2.11 │ │ SSL Termination │◄──────►│ SSL Termination │ │ Registration API│ :2019 │ Registration API│ │ :9876 │ │ :9876 │ └────────┬─────────┘ └────────┬─────────┘ └───────────┼──────────────────────────────┼───────────────────────────┘ │ │ │ Private Network 10.0.0.0/16 │ │ ┌───────────┼──────────────────────────────┼───────────────────────────┐ ▼ ▼ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ s1 (10.0.1.x) │ │ s2 (10.0.1.x) │ │ sN (10.0.1.x) │ ... ×500 │ │ │ │ │ │ │ Gateway │ │ Gateway │ │ Gateway │ │ :18789 │ │ :18789 │ │ :18789 │ │ Chat UI │ │ Chat UI │ │ Chat UI │ │ :8888 │ │ :8888 │ │ :8888 │ │ Auth │ │ Auth │ │ Auth │ │ :3000 │ │ :3000 │ │ :3000 │ └──────────────┘ └──────────────┘ └──────────────┘ BACKEND SERVER └──────────────────────────────────────────────────────────────────────┘
System-Bausteine

Jede Komponente ist unabhängig skalierbar und über klar definierte Schnittstellen verbunden.

🛡️

Reverse Proxy (Caddy)

Zwei Caddy v2.11 Instanzen mit Wildcard SSL-Zertifikat (Let's Encrypt). Automatische SSL-Terminierung für alle *.startlobster.de Subdomains. JSON-basierte Admin API für dynamisches Routing.

🔄

HA Failover (Keepalived)

VRRP-basiertes Failover mit Floating IP. proxy-1 als Master, proxy-2 als Backup. Bei Ausfall automatische IP-Umschaltung via Hetzner API in <5 Sekunden.

📝

Registration API

REST API (Port 9876) auf dem Private Network. Backends registrieren sich selbst beim Proxy. Unterstützt Simple Routes (Gateway) und Full Routes (Auth + UI + Gateway).

🔐

SSL / Zertifikate

Wildcard-Zertifikat via acme.sh mit Custom DNS Hook für http.net API. Automatisches Renewal. Cert-Sync zwischen beiden Proxy-Instanzen.

🌐

DNS (http.net)

Wildcard A-Record *.startlobster.de → Floating IP. Kein individueller DNS-Eintrag pro Server mehr nötig. Verwaltung über http.net Partner API.

Provisioning Pipeline

Vollautomatisiert: HubSpot-Formular → Hetzner Server → Private Network → Docker + Services → Proxy-Registration. Pool-basiert für Instant-Assignment (<30s).

Server & Netzwerk
KomponenteSpezifikationIP / NetzwerkStandort
proxy-1 (Master) CX23 · Debian 12 · Caddy + Keepalived proxy-1.example / 10.0.1.x Nürnberg (nbg1)
proxy-2 (Backup) CX23 · Debian 12 · Caddy + Keepalived proxy-2.example / 10.0.1.y Nürnberg (nbg1)
Floating IP IPv4 · VRRP-gesteuert floating-ip.example Nürnberg
Private Network startlobster-net · 10.0.0.0/16 Subnet: 10.0.1.0/24 eu-central
Backend Server CX23 · Ubuntu 24.04 · Docker 10.0.1.x (Private) Nürnberg (nbg1)
💡 Netzwerk-Architektur

Backend-Server sind ausschließlich über das Private Network erreichbar. Alle Services (Gateway :18789, Chat UI :8888, Auth :3000) binden nur auf die private IP. Kein öffentlicher Zugang zu Backend-Ports — der gesamte Traffic läuft über den Reverse Proxy.

Request-Flow

Wie ein Request von einem Client zum richtigen Backend geroutet wird.

1

DNS Resolution

Client ruft s42.startlobster.de auf → Wildcard DNS löst auf Floating IP floating-ip.example auf.

2

SSL Termination

Caddy auf dem aktiven Proxy terminiert TLS mit dem Wildcard-Zertifikat *.startlobster.de.

3

Route Matching

Caddy matched den Host-Header gegen registrierte Routen. Für s42.startlobster.de wird die Full Route verwendet (Auth + Chat UI + Gateway).

4

Forward Auth

Caddy prüft via forward_auth beim Auth-Container (10.0.1.x:3000), ob der User authentifiziert ist. Bei Erfolg wird der Gateway-Token als Header injiziert.

5

Reverse Proxy

Je nach Pfad wird zum Backend geroutet:
/auth/* → Auth :3000
/api/* + /ws → Gateway :18789
/* → Chat UI :8888

Backend Self-Registration API

Neue Server registrieren sich automatisch beim Reverse Proxy — kein manueller DNS-Eintrag oder Config-Änderung nötig.

Endpoint

HTTP POST http://10.0.1.x:9876/register Authorization: Bearer <SHARED_SECRET> Content-Type: application/json

Simple Route (z.B. Gateway-Subdomain)

JSON { "subdomain": "s42-gw", "backend_ip": "10.0.1.x", "backend_port": 18789, "type": "simple" }

Full Route (Auth + Chat UI + Gateway)

JSON { "subdomain": "s42", "backend_ip": "10.0.1.x", "type": "full" }
✅ Auto-Sync

Registrierungen werden automatisch auf beide Proxy-Instanzen synchronisiert. Nur ein API-Call nötig — der empfangende Proxy leitet die Route an den Peer weiter.

Weitere Endpoints

MethodePfadBeschreibung
POST/registerRoute registrieren (simple oder full)
POST/deregisterRoute entfernen
GET/routesAlle aktiven Routen auflisten
GET/healthHealth Check
Automatisierte Server-Bereitstellung

Vom HubSpot-Formular bis zum funktionierenden Server in unter 30 Sekunden dank Server-Pool.

1

HubSpot Trigger

Neues Formular-Submission → Pipeline erkennt neuen Kunden.

2

Pool Assignment

Vorkonfigurierter Server aus dem Pool wird zugewiesen. Pool hält 5 ready Server vor. Bei Zuweisung wird automatisch nachprovisioniert.

3

Hetzner Server + Private Network

CX23 Server wird in startlobster-net erstellt. Erhält automatisch eine private IP (10.0.1.x).

4

Proxy Registration

Pipeline registriert Full Route + Gateway Route beim Reverse Proxy. Sofort über sXX.startlobster.de erreichbar.

5

Ansible Provisioning

Playbook install-docker-proxy.yml: Docker, OpenClaw Gateway, Chat UI, Auth — alle Services nur auf Private Network Interface gebunden.

6

Verification & Notification

Gateway erreichbar? → HubSpot-Note mit Credentials → WhatsApp-Benachrichtigung an Team.

Security Architecture
🔒

Netzwerk-Isolation

Backend-Services sind nur über Private Network erreichbar. Keine öffentlichen Ports auf Backend-Servern. Gesamter externer Traffic läuft über den Reverse Proxy.

🛡️

Firewall

iptables auf allen Proxies: Port 22/80/443 öffentlich, Admin API (:2019) und Registration API (:9876) nur aus dem Private Network. VRRP-Traffic erlaubt.

🔑

Authentication

Registration API: Bearer Token (Shared Secret). Forward Auth auf dem Proxy für Enduser-Zugang. Gateway Token pro Backend-Instanz. Kein öffentlicher Zugang zu Admin APIs.

⚠️ Sicherheitshinweis

Die Registration API akzeptiert Requests nur aus dem Private Network (10.0.0.0/16). Öffentliche Requests auf Port 9876 und 2019 werden per iptables gedropt bevor sie den Service erreichen.

Backend Server Stack

Jeder Backend-Server läuft schlank ohne eigenen Reverse Proxy — SSL und Auth werden zentral übernommen.

ContainerPort (Private IP)Funktion
openclaw-gateway 10.0.1.x:18789 AI Gateway — WebSocket + REST API
startlobster-chat 10.0.1.x:8888 Chat UI (nginx + Static Files)
startlobster-auth 10.0.1.x:3000 Auth Container (Token-basiert)
🚀 Vergleich: Legacy vs. Proxy-Modus

Legacy: Jeder Server hatte eigenes Caddy + Let's Encrypt + DNS-Records → 50 Certs/Woche Rate Limit, langsame Provisionierung.
Proxy-Modus: Ein Wildcard-Cert, kein Caddy auf Backends, Instant-Registration. Provisioning ~80% schneller.

Failover-Mechanismus

Normalzustand

proxy-1 (Master, Priority 101) hält die Floating IP. proxy-2 (Backup, Priority 100) steht bereit. Keepalived prüft alle 5 Sekunden ob Caddy antwortet.

🔴

Master fällt aus

Keepalived auf proxy-2 erkennt fehlende VRRP-Advertisements. Nach 3 fehlgeschlagenen Health Checks (15s) übernimmt proxy-2 die Master-Rolle.

🔄

Floating IP Migration

Keepalived triggert hetzner-failover.sh → Hetzner API reassignt die Floating IP auf proxy-2. DNS bleibt unverändert. Downtime: <15 Sekunden.

Recovery

Wenn proxy-1 wieder online kommt, übernimmt es automatisch die Master-Rolle zurück (höhere Priority). Floating IP migriert zurück.

Eingesetzte Technologien
KategorieTechnologieVersion / Details
Reverse ProxyCaddyv2.11.1 (Custom Build via xcaddy)
HA / FailoverKeepalivedVRRP auf Private Network Interface
SSL CertificatesLet's Encrypt + acme.shCustom DNS Hook für http.net API
DNShttp.net Partner APIWildcard A-Record
CloudHetzner CloudCX23, Debian 12 / Ubuntu 24.04
NetworkingHetzner Private Network10.0.0.0/16, Floating IP
Container RuntimeDocker + ComposeLatest stable
ProvisioningAnsible + Python PipelineIdempotent, Pool-basiert
Registration APIPython (stdlib)http.server, Port 9876
CRM IntegrationHubSpot APIForm Submissions + Contact Notes
NotificationsWhatsApp (OpenClaw)Auto-Notify bei Provisioning