This commit updates the RELOCATION.md file to include a detailed, safer migration plan as a recommended alternative to the initial proposal. This provides a clear and secure strategy for the discussion with the IT department.
131 lines
7.3 KiB
Markdown
131 lines
7.3 KiB
Markdown
### **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 <image-name>:<tag> > 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.
|