### **Anforderungsdokument (Version 2): Docker-Migration von Synology nach Ubuntu VM (`docker1`)** **Zweck:** Dieses Dokument listet alle notwendigen Port-Freigaben und Netzwerk-Anforderungen für den Umzug des internen Docker-Anwendungsstacks auf die neue VM `docker1` (IP: `10.10.81.2`). Diese Version basiert auf der Analyse aller aktiven Docker-Container vom Quellsystem. #### **Teil 1: Externe Port-Freigaben (Firewall)** Die folgenden Ports müssen auf der Firewall für den eingehenden Verkehr zur VM `10.10.81.2` geöffnet werden. | Host-Port | Ziel-Dienst (Container) | Zweck / Beschreibung | Kritikalität | | :--- | :--- | :--- | :--- | | **3000** | `gitea` | **Gitea Web UI.** Zugriff auf die Weboberfläche des Git-Servers. | **Hoch** | | **2222** | `gitea` | **Gitea Git via SSH.** Ermöglicht `git clone`, `push`, `pull` über SSH. (Auf dem Altsystem Port `32768`, wird hier auf einen Standard-Port gelegt). | **Hoch** | | **8090** | `gateway_proxy` (Nginx) | **Zentraler App-Hub.** Reverse-Proxy, der den Zugriff auf alle Web-Anwendungen (Dashboard, B2B, Market-Intel etc.) steuert und mit Passwort schützt. | **Hoch** | | **8003** | `connector-superoffice` | **SuperOffice Webhook-Empfänger.** Muss aus dem Internet (von SuperOffice-Servern) erreichbar sein. | **Hoch** | | **8501** | `lead-engine` | **Lead Engine UI.** Web-Interface der Lead Engine (Streamlit). | **Mittel** | | **8004** | `lead-engine` (API) | **Lead Engine API.** Für externe Integrationen wie Kalender/Buchungs-Links. | **Mittel** | | **8002** | `heatmap-tool-backend` | **Heatmap Tool Backend.** API für das Heatmap-Visualisierungs-Tool. | **Niedrig** | | **5173** | `heatmap-tool-frontend` | **Heatmap Tool Frontend.** Direktzugriff auf die UI des Heatmap-Tools (typ. für Entwicklung). | **Niedrig** | **Empfehlung:** Der gesamte externe Zugriff sollte idealerweise über einen vorgeschalteten, von der IT verwalteten Reverse-Proxy mit SSL-Terminierung (HTTPS) laufen, um die Sicherheit zu erhöhen. --- #### **Teil 2: Interne Port-Nutzung (Host-System)** Die folgenden Ports werden von den Docker-Containern auf dem Host-System (`docker1`) belegt. Sie müssen **nicht extern** freigegeben werden, aber sie dürfen auf dem Host nicht von anderen Diensten belegt sein. | Host-Port | Ziel-Dienst (Container) | Zweck | | :--- | :--- | :--- | | `8000` | `company-explorer` | Haupt-API für Unternehmensdaten, wird vom App-Hub (`gateway_proxy`) genutzt. | | `8001` | `transcription-app` | API und UI für das Transkriptions-Tool, wird vom App-Hub genutzt. | --- #### **Teil 3: Externe Service-Abhängigkeiten (Ausgehender Verkehr)** Die VM muss in der Lage sein, ausgehende Verbindungen zu den folgenden externen Diensten aufzubauen. | Dienst | Zweck | Protokoll/Port | | :--- | :--- | :--- | | **SuperOffice API** | CRM-Synchronisation | HTTPS / 443 | | **Google APIs** | SerpAPI, Gemini AI | HTTPS / 443 | | **Notion API** | Wissensdatenbank-Sync | HTTPS / 443 | | **DuckDNS** | Dynamisches DNS | HTTPS / 443 | | **GitHub / Docker Hub / etc.** | Herunterladen von Docker-Images, Software-Paketen | HTTPS / 443 | | **Öffentliche DNS-Server** | Namensauflösung (z.B. 8.8.8.8) | DNS / 53 (UDP/TCP) | --- #### **Teil 4: Netzwerk-Architektur & Kommunikation (Intern)** * **Inter-Container-Kommunikation:** Alle Container sind über ein internes Docker-Bridge-Netzwerk verbunden. Sie können sich gegenseitig über ihre Dienstnamen erreichen (z.B. `connector-superoffice` kann `company-explorer` über `http://company-explorer:8000` erreichen). * **Keine speziellen Netzwerkregeln:** Es sind keine komplexen internen Firewall-Regeln zwischen den Containern erforderlich. Die Kommunikation innerhalb des Docker-Netzwerks sollte uneingeschränkt möglich sein. --- **Zusammenfassende Handlungsempfehlung für die IT:** 1. **Firewall-Regeln (eingehend):** Bitte öffnen Sie die Ports `3000`, `2222`, `8090`, `8003`, `8501`, `8004`, `8002` und `5173` für die Ziel-IP `10.10.81.2`. 2. **Firewall-Regeln (ausgehend):** Stellen Sie sicher, dass die VM ausgehende HTTPS-Verbindungen (Port 443) zu beliebigen Zielen im Internet aufbauen kann. 3. **Reverse Proxy (Optional, aber empfohlen):** Planen Sie die Einrichtung eines Reverse Proxys (z.B. Nginx, Traefik) mit SSL-Zertifikaten für den Zugriff auf die Web-Anwendungen, insbesondere für den Haupt-Port `8090`. --- ### **Anhang: Migrationsvorschlag der IT** Das Folgende ist der initial vorgeschlagene Migrationsprozess seitens der IT. ```bash # Auf dem Quellsystem (Synology) cd /volume1/homes/Floke/python tar czf lead-engine-app.tgz brancheneinstufung/ docker images docker save : > lead-engine-image.tar # Manuelle Übertragung via USB-Stick # Auf dem Zielsystem (docker1) docker load < lead-engine-image.tar mkdir -p /srv/lead-engine tar xzf lead-engine-app.tgz -C /srv/lead-engine # Und starten ``` --- ### **Empfohlener Migrationsplan (Sicherer Ansatz)** Der Vorschlag der IT ist für einen einzelnen, einfachen Container geeignet, birgt jedoch für diesen komplexen Anwendungs-Stack erhebliche Risiken (Datenverlust, Konfigurationsfehler). Ein sicherer Umzug muss zwingend **Code, Konfiguration UND persistente Daten** umfassen. **Analyse der Risiken des IT-Vorschlags:** 1. **Fokus auf nur einen Container:** Der Plan berücksichtigt nur die `lead-engine`, ignoriert aber die ca. 20 anderen, voneinander abhängigen Dienste (Gitea, Datenbanken, Proxy etc.). 2. **Fehlende persistente Daten (Größtes Risiko):** Der Plan sichert nur den Anwendungs-Code. Er ignoriert die Daten-Volumes, was zum **Totalverlust aller Git-Repositories, Datenbankinhalte und anderer kritischer Daten** führen würde. 3. **Fehlende Orchestrierung:** Die `docker-compose.yml`, das "Gehirn" des Systems, wird ignoriert. Ohne sie ist ein Starten des komplexen Stacks nicht möglich, da alle Netzwerk-Verbindungen, Port-Mappings und Volume-Zuweisungen fehlen. **Der empfohlene, sichere Prozess:** Der korrekte Ansatz ist, das gesamte Projektverzeichnis zu archivieren, welches alle drei Säulen (Code, Konfiguration, Daten) enthält. **Schritt 1: Ein vollständiges Archiv auf dem Quellsystem erstellen** Anstatt nur einen Dienst zu sichern, wird das gesamte Projekt-Stammverzeichnis, das alle Docker-Konfigurationen und Daten-Volumes enthält, als einzelnes Archiv (`.tar.gz`) zusammengefasst. ```bash # Beispielhafter Befehl im übergeordneten Verzeichnis # Der genaue Pfad und Name muss vor der Ausführung verifiziert werden. tar czf GTM_ENGINE_MIGRATION_ARCHIVE.tar.gz ./DEIN_PROJEKT_ORDNER/ ``` Dieses Archiv enthält: - Den gesamten Quellcode aller Dienste. - Die zentrale `docker-compose.yml`. - Alle `.env`-Dateien mit API-Schlüsseln und Secrets. - **Alle lokalen Daten-Volumes** (z.B. `./postgres:/var/lib/postgresql/data`, `./gitea:/data`, etc.), die in der `docker-compose.yml` definiert sind. **Schritt 2: Archiv auf das Zielsystem übertragen** Die erstellte Archivdatei (`GTM_ENGINE_MIGRATION_ARCHIVE.tar.gz`) wird auf die neue VM `docker1` übertragen (z.B. via `scp` oder `rsync`). **Schritt 3: Auf dem Zielsystem wiederherstellen und starten** Auf der neuen VM sind nur zwei Befehle nötig: ```bash # 1. Archiv entpacken tar xzf GTM_ENGINE_MIGRATION_ARCHIVE.tar.gz # 2. Den kompletten Stack starten cd DEIN_PROJEKT_ORDNER/ docker compose up -d ``` Docker Compose wird die Konfiguration lesen, alle Dienste mit ihren Daten und Netzwerk-Verbindungen korrekt starten und den Zustand des Quellsystems exakt replizieren.