From 96cb1eaba384a852314f13b717f385c7ad604192 Mon Sep 17 00:00:00 2001 From: Jarvis Date: Mon, 2 Feb 2026 14:30:27 +0000 Subject: [PATCH] docs: add technical architecture diagram for IT workshop --- ARCHITEKTUR_GCP_SETUP.md | 79 ++++++++++++++++++++++++++++++++++++++++ dashboard/index.html | 2 +- nginx-proxy.conf | 16 ++++++++ 3 files changed, 96 insertions(+), 1 deletion(-) create mode 100644 ARCHITEKTUR_GCP_SETUP.md diff --git a/ARCHITEKTUR_GCP_SETUP.md b/ARCHITEKTUR_GCP_SETUP.md new file mode 100644 index 00000000..5fb3611b --- /dev/null +++ b/ARCHITEKTUR_GCP_SETUP.md @@ -0,0 +1,79 @@ +# Technisches Zielbild: GTM-Engine & Google Cloud Integration + +Dieses Diagramm visualisiert den geplanten Datenfluss und die Architektur für den sicheren Betrieb der GTM-Engine (Growth-Marketing) in der Unternehmensumgebung. + +## Kern-Prinzipien +1. **Trennung von Identität & Daten:** Nutzung von Unternehmens-Identitäten (Managed Google ID) statt privater Konten. +2. **Datensparsamkeit:** KI-Verarbeitung erfolgt primär auf anonymen Firmendaten (B2B), nicht auf Personendaten. +3. **Lokale Hoheit:** Die Business-Logik (Python/Docker) läuft kontrolliert lokal oder im Intranet, nicht "in der Cloud". + +## Architektur-Übersicht + +```mermaid +graph TD + %% Subgraph: Corporate Environment (Wackler/RoboPlanet) + subgraph Corporate_IT ["🏢 Wackler / RoboPlanet Umgebung"] + + subgraph User_Layer ["🧑‍💻 User & Identity"] + User[("Christian (User)")] + CorpID["Corporate Google ID
(@roboplanet.de / @wackler-group.de)"] + User --> CorpID + end + + subgraph Local_Execution ["⚙️ Execution Layer (Local/Server)"] + Docker["🐳 Docker Container
(GTM-Engine / Python)"] + + subgraph Data_Handling ["🛡️ Daten-Verarbeitung"] + RawData[("Rohdaten
(Websites, Listen)")] + Anonymizer["⚙️ Pre-Processing
(Filterung PII / Personendaten)"] + end + + ResultStorage[("Ergebnisse
(Notion / CRM / Excel)")] + end + end + + %% Subgraph: Google Cloud Platform (Managed) + subgraph Google_Cloud ["☁️ Google Cloud Platform (Enterprise Tenant)"] + + subgraph IAM_Security ["🔐 Security & Billing"] + GCP_Project["GCP Projekt
(z.B. 'gtm-engine-prod')"] + ServiceAccount["🤖 Service Account
(Technischer User für API)"] + Billing["💳 Corporate Billing
(Zentrale Abrechnung)"] + end + + subgraph AI_Services ["🧠 AI Services (Vertex AI / Gemini)"] + GeminiAPI["⚡ Gemini API
(Enterprise Mode: Zero Logging)"] + end + end + + %% Data Flow Connections + CorpID -.->|"Verwaltet"| GCP_Project + Docker -->|"Nutzt API Key"| ServiceAccount + ServiceAccount -->|"Authentifiziert"| GeminiAPI + + RawData --> Anonymizer + Anonymizer -->|"1. Anonymisierter Prompt
(Nur Firmendaten)"| Docker + Docker -->|"2. API Request (HTTPS/TLS)"| GeminiAPI + GeminiAPI -->|"3. JSON Response
(Strukturierte Daten)"| Docker + Docker -->|"4. Speicherung"| ResultStorage + + %% Styling + style Corporate_IT fill:#f9f9f9,stroke:#333,stroke-width:2px + style Google_Cloud fill:#e8f0fe,stroke:#4285f4,stroke-width:2px + style Anonymizer fill:#fff3e0,stroke:#f57c00,stroke-dasharray: 5 5 + style GeminiAPI fill:#e8f0fe,stroke:#4285f4,stroke-width:4px +``` + +## Erläuterung für die IT + +1. **Identity (IAM):** + * Es wird kein "Schatten-Account" genutzt. Christian authentifiziert sich mit seiner bestehenden Corporate Identity (`@roboplanet`). + * Für die automatisierte Ausführung (Skripte) wird später ein **Service Account** beantragt, dessen Schlüssel (JSON Key) sicher im lokalen Container verwaltet wird (Secrets Management). + +2. **Google Cloud Projekt:** + * Wir benötigen ein dediziertes GCP-Projekt (z.B. `rp-marketing-intel`), das im Rechnungskreis der Firma hängt. + * Vorteil: Volle Transparenz über Kosten und Nutzung im Admin-Dashboard der IT. + +3. **Datenschutz (DSGVO):** + * **Input:** Wir senden Webseiten-Texte und Firmennamen an die API. Wir senden *keine* Mitarbeiterlisten oder Kunden-Adressdaten zur Analyse. + * **Enterprise-Garantie:** Durch Nutzung der Enterprise-Verträge (via GCP) ist vertraglich geregelt, dass Google die Daten **nicht** zum Training eigener Modelle verwendet (anders als bei der kostenlosen ChatGPT/Gemini-Consumer-Version). diff --git a/dashboard/index.html b/dashboard/index.html index 8a581be6..f8be8b15 100644 --- a/dashboard/index.html +++ b/dashboard/index.html @@ -191,7 +191,7 @@

Zugriff auf die lokale Lead Engine.

- Starten → + Starten → diff --git a/nginx-proxy.conf b/nginx-proxy.conf index 792dddf5..572f4726 100644 --- a/nginx-proxy.conf +++ b/nginx-proxy.conf @@ -133,5 +133,21 @@ http { proxy_connect_timeout 1800s; proxy_send_timeout 1800s; } + + location /lead/ { + # Lead Engine (TradingTwins) + # Proxying external service on host + proxy_pass http://192.168.178.6:8501/; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + + # Websocket support for Streamlit + proxy_http_version 1.1; + + # Explicit timeouts + proxy_read_timeout 86400; # Long timeout for stream + } } }