docs: update architecture to reflect Proxmox migration and correct network configurations
Revised multiple documents to align with the migration from Incus to Proxmox VE 8.4.10. Updated hypervisor, IP ranges, subnet details, and NAT configurations across all relevant files. Marked Incus sections as historical for clarity. Added AI-Stack setup guide for Proxmox LXC.
This commit is contained in:
@@ -6,44 +6,112 @@ owner: DevOps Engineer
|
||||
# SSoT Konfigurations-Masterplan für Zora (ARM64)
|
||||
|
||||
## 1. System-Umgebung (Infrastruktur)
|
||||
| Parameter | Wert | Erklärung |
|
||||
|:-------------------|:--------------|:-------------------------------------------------|
|
||||
| **Architektur** | `linux/arm64` | Native Architektur von Zora (Host). |
|
||||
| **Host-IP (Zora)** | `10.0.6.1` | Gateway für alle Container (Bridge `incusbr0`). |
|
||||
| **Projekt-IP** | `10.0.6.50` | Feste IP für den Docker-Host `prod-meldestelle`. |
|
||||
| **DNS-Server** | `10.0.6.1` | Zora übernimmt die Namensauflösung. |
|
||||
|
||||
| Parameter | Wert | Erklärung |
|
||||
|:-----------------------|:----------------|:-------------------------------------------------------------|
|
||||
| **Architektur** | `linux/arm64` | Native Architektur von Zora (CIX P1 / CP8180). |
|
||||
| **Hypervisor** | Proxmox VE 8.4.10 | `pve.mo-code.at` — Web-UI: `https://pve.mo-code.at:8006` |
|
||||
| **Proxmox-Node-IP** | `10.0.0.20` | SSH: `ssh root@10.0.0.20` |
|
||||
| **Netz-Bridge** | `vmbr0` | Alle VMs und Container im Subnetz `10.0.0.0/24` |
|
||||
| **Gateway (Router)** | `10.0.0.138` | Standard-Gateway für alle VMs/Container |
|
||||
|
||||
### VM & Container Übersicht
|
||||
|
||||
| ID | Name | Typ | IP | Start-Reihenfolge | Zweck |
|
||||
|:----|:------------------|:-----|:--------------|:------------------|:-----------------------------|
|
||||
| 100 | pangolin-client | LXC | `10.0.0.21` | order=1, up=30 | Pangolin Tunnel Client |
|
||||
| 101 | gitea | LXC | `10.0.0.22` | order=2, up=30 | Gitea Server |
|
||||
| 102 | gitea-runner | VM | `10.0.0.23` | — | Gitea CI/CD Runner (aarch64) |
|
||||
| 103 | immich | LXC | `10.0.0.24` | order=3, up=30 | Immich Foto-Server |
|
||||
| 110 | meldestelle-host | VM | `10.0.0.50` | — | Docker App-Stack |
|
||||
| 111 | ai-stack | LXC | `10.0.0.60` | — | Ollama + Open WebUI (geplant)|
|
||||
|
||||
|
||||
### Detaillierte Ressourcen-Konfiguration
|
||||
|
||||
#### CT 100 — pangolin-client (LXC)
|
||||
| Parameter | Wert |
|
||||
|:-----------------|:---------------------------------------|
|
||||
| **OS** | Ubuntu, arm64 |
|
||||
| **CPU** | 4 Cores (cpulimit=4) |
|
||||
| **RAM** | 512 MiB + 512 MiB Swap |
|
||||
| **Disk** | 8 GB (`local:100/vm-100-disk-0.raw`) |
|
||||
| **Netzwerk** | eth0 → vmbr0, IP `10.0.0.21/24`, GW `10.0.0.138`, Firewall: Yes |
|
||||
| **Typ** | Unprivileged, nesting=1 |
|
||||
| **Autostart** | Ja — order=1, up=30 |
|
||||
|
||||
#### CT 101 — gitea (LXC)
|
||||
| Parameter | Wert |
|
||||
|:-----------------|:---------------------------------------|
|
||||
| **OS** | Ubuntu, arm64 |
|
||||
| **CPU** | 4 Cores |
|
||||
| **RAM** | 1.00 GiB + 512 MiB Swap |
|
||||
| **Disk** | 20 GB (`local:101/vm-101-disk-0.raw`) |
|
||||
| **Netzwerk** | eth0 → vmbr0, IP `10.0.0.22/24`, GW `10.0.0.138`, Firewall: Yes |
|
||||
| **Typ** | Unprivileged, nesting=1 |
|
||||
| **Autostart** | Ja — order=2, up=30 |
|
||||
|
||||
#### CT 103 — immich (LXC)
|
||||
| Parameter | Wert |
|
||||
|:-----------------|:---------------------------------------|
|
||||
| **OS** | Ubuntu, arm64 |
|
||||
| **CPU** | 8 Cores |
|
||||
| **RAM** | 10.00 GiB + 512 MiB Swap |
|
||||
| **Root Disk** | 200 GB (`local:103/vm-103-disk-0.raw`) |
|
||||
| **Mount Point** | mp0: `/mnt/immich_gross` → `/mnt/fotos` (Foto-Bibliothek) |
|
||||
| **Netzwerk** | eth0 → vmbr0, IP `10.0.0.24/24`, GW `10.0.0.138`, Firewall: Yes |
|
||||
| **Typ** | Unprivileged, nesting=1, keyctl=1, fuse=1 |
|
||||
| **Autostart** | Ja — order=3, up=30 |
|
||||
|
||||
#### VM 102 — gitea-runner (QEMU/KVM)
|
||||
| Parameter | Wert |
|
||||
|:-----------------|:-----------------------------------------------------------------|
|
||||
| **BIOS** | OVMF (UEFI) |
|
||||
| **Machine** | virt (ARM64) |
|
||||
| **CPU** | 8 Cores (1 Socket, host-type, numa=1) |
|
||||
| **RAM** | 16.00 GiB (balloon=0, kein Dynamic Memory) |
|
||||
| **Disk** | 50 GB SSD (`local:102/vm-102-disk-1.qcow2`, aio=io_uring, iothread=1) |
|
||||
| **EFI Disk** | `local:102/vm-102-disk-0.qcow2`, efitype=4m, 64 MB |
|
||||
| **Netzwerk** | virtio, bridge=vmbr0, Firewall: Yes |
|
||||
| **SCSI** | VirtIO SCSI single |
|
||||
|
||||
## 2. Mail-Relay (SSoT Identity)
|
||||
|
||||
Diese Daten müssen in der Spring Boot `application.yml` oder `.env` abgeglichen werden.
|
||||
* **SMTP-Host:** `10.0.6.1` (Zora Host Relay)
|
||||
|
||||
* **SMTP-Host:** `10.0.0.20` (Zora Proxmox-Node als Mail-Relay)
|
||||
* **SMTP-Port:** `25` (Passwortloser interner Zugriff via `mynetworks`)
|
||||
* **Absender:** `zora@mo-code.at` (Verifizierte World4You Identität)
|
||||
|
||||
## 3. Docker-Image Checkliste (ARM64 Kompatibilität)
|
||||
Bitte prüfe in deinen `docker-compose.yaml` Dateien, ob diese Images genutzt werden (alle unterstützen offiziell ARM64):
|
||||
|
||||
| Dienst | Empfohlenes Image | Status |
|
||||
|:---------------|:---------------------------------|:-----------------------------------------------|
|
||||
| **Datenbank** | `postgres:15-alpine` | ARM64 Support: Ja |
|
||||
| **Cache** | `valkey/valkey:8-alpine` | ARM64 Support: Ja (Besserer Support als Redis) |
|
||||
| **Identity** | `quay.io/keycloak/keycloak:24.0` | ARM64 Support: Ja (Offiziell) |
|
||||
| **Monitoring** | `prom/prometheus:latest` | ARM64 Support: Ja |
|
||||
| **Dashboards** | `grafana/grafana:latest` | ARM64 Support: Ja |
|
||||
| Dienst | Empfohlenes Image | Status |
|
||||
|:---------------|:-------------------------------------------|:-----------------------------------------------|
|
||||
| **Datenbank** | `postgres:16-alpine` | ARM64 Support: Ja |
|
||||
| **Cache** | `valkey/valkey:9-alpine` | ARM64 Support: Ja (Besserer Support als Redis) |
|
||||
| **Identity** | `quay.io/keycloak/keycloak:26.4` | ARM64 Support: Ja (Offiziell) |
|
||||
| **Monitoring** | `prom/prometheus:v3.7.3` | ARM64 Support: Ja |
|
||||
| **Dashboards** | `grafana/grafana:12.3` | ARM64 Support: Ja |
|
||||
|
||||
## 4. Backend & Gateway (Spring Boot)
|
||||
Da du diese selbst baust, ist die Dockerfile-Konfiguration entscheidend:
|
||||
|
||||
* **Base Image:** Nutze `eclipse-temurin:17-jre-alpine` oder `21-jre-alpine`. Diese sind für ARM64 optimiert.
|
||||
* **Build-Prozess:** Dein Gitea-Runner auf Zora baut automatisch für ARM64, da er auf der gleichen Hardware läuft.
|
||||
* **Base Image:** `eclipse-temurin:25-jre-alpine` (ARM64-native, via Gitea-Pipeline gebaut)
|
||||
* **Build-Prozess:** Gitea-Runner (VM 102, `10.0.0.23`) baut nativ für `linux/arm64`
|
||||
|
||||
## 5. Keycloak SSoT Integration
|
||||
Wichtige Endpunkte für deine Microservices in der IDEA:
|
||||
* **External Issuer:** `https://auth.mo-code.at/realms/mocode-realm`
|
||||
* **Internal Issuer:** `http://infra-keycloak:8080/realms/mocode-realm` (Für die Kommunikation innerhalb des Docker-Netzwerks)
|
||||
* **Client-ID:** `meldestelle-client`
|
||||
|
||||
## 6. Cloudflare Tunnel Routing
|
||||
Stelle sicher, dass deine Ingress-Rules auf die IP der Meldestelle zeigen:
|
||||
* `api.mo-code.at` -> `http://10.0.6.50:8080` (Gateway)
|
||||
* `auth.mo-code.at` -> `http://10.0.6.50:8180` (Keycloak)
|
||||
* `git.mo-code.at` -> `http://10.0.6.100:3000` (Gitea LXC - bereits aktiv)
|
||||
* **External Issuer:** `http://10.0.0.50:8180/realms/meldestelle`
|
||||
* **Internal Issuer:** `http://keycloak:8080/realms/meldestelle` (Docker-intern)
|
||||
* **Client-IDs:** `api-gateway`, `web-app`
|
||||
|
||||
## 6. Pangolin Tunnel Routing
|
||||
|
||||
> Pangolin läuft auf CT 100 (pangolin-client, `10.0.0.21`) als Tunnel-Client zu `pangolin.mo-code.at`.
|
||||
|
||||
| Route | Ziel (intern) | Port | Sichtbarkeit |
|
||||
|:-----------------------|:---------------|:-------|:---------------------|
|
||||
| `api.mo-code.at` | `10.0.0.50` | `8081` | Öffentlich |
|
||||
| `auth.mo-code.at` | `10.0.0.50` | `8180` | Öffentlich |
|
||||
| `git.mo-code.at` | `10.0.0.22` | `3000` | Öffentlich |
|
||||
| `photos.mo-code.at` | `10.0.0.24` | `2283` | Nur intern / VPN |
|
||||
| `ai.mo-code.at` | `10.0.0.60` | `3001` | Nur intern / VPN |
|
||||
|
||||
Reference in New Issue
Block a user