Files

3.4 KiB

Architektur & Infrastruktur

Übersicht der beteiligten Systeme und Netzwerk-Topologie.

Komponenten

System Rolle Adresse
Hermes-Server Assistent + Webhook-Receiver + Download-Hub 192.168.0.80
Dokploy-Host PaaS (Docker Swarm) 192.168.0.184
Gitea Git-Server git.kgessner.de (K8s/Talos)
Proxmox Hypervisor (Dokploy-VM + K8s-Cluster) —
Netcup-Gateway Reverse-Proxy (öffentliche IP) 192.168.0.222

Netzwerk-Topologie

                          Internet
                             │
                    152.53.197.186 (öffentliche IP)
                             │
                    ┌────────┴────────┐
                    │  Netcup-Gateway  │  (192.168.0.222)
                    │  Reverse-Proxy   │
                    └────────┬────────┘
                             │
        ┌────────────────────┼────────────────────┐
        │                    │                    │
  git.kgessner.de    dokploy.kgessner.de    (weitere Dienste)
        │                    │
        ▼                    ▼
  K8s/Talos-Cluster    Docker-Swarm-Host
  (auf Proxmox)        (192.168.0.184)
  - Gitea              - Dokploy UI (:3000)
                       - Traefik (:80/443)
                       - App-Services

Wichtige Erkenntnisse

  1. git.kgessner.de und dokploy.kgessner.de teilen sich die öffentliche IP 152.53.197.186. Ein Reverse-Proxy routet anhand des Host-Headers.

  2. Gitea läuft in Kubernetes (Talos), Dokploy in Docker Swarm — zwei unterschiedliche Orchestrierungswelten auf demselben Proxmox-Host.

  3. Netzwerk-Isolation: Der K8s-Cluster (Gitea) kann interne 192.168.0.x-Adressen (Hermes, Dokploy) nicht zuverlässig erreichen. Das ist der Grund, warum der Gitea-Webhook unzuverlässig ist und ein Cron-Polling-Fallback nötig wurde.

  4. Öffentlicher Zugriff via Reverse-Proxy: todo.kgessner.de wird über den Reverse-Proxy (öffentliche IP 152.53.197.186) auf 192.168.0.184:80 geleitet. Traefik routet dann anhand des Host-Headers auf die App. Dafür muss todo.kgessner.de in der Traefik-Routing-Regel (Host(...)) stehen. Der sslip.io-Trick (techno-todo.152.53.197.186.sslip.io) funktioniert nicht, weil sslip.io direkt auf die IP zeigt (ohne den Reverse-Proxy-Host-Header-Kontext).

Docker-Swarm auf Dokploy

docker service ls
# dokploy              (PaaS-UI)
# dokploy-postgres     (interne DB)
# dokploy-traefik      (Reverse-Proxy, Ports 80/443)
# techno-todo-v2-...   (diese App)

Traefik-Konfiguration

Dokploy schreibt die Routing-Regeln nach /etc/dokploy/traefik/dynamic/<app>.yml (Bind-Mount in den Traefik-Container).

# Reload nach Config-Änderung
docker kill -s HUP dokploy-traefik

Dokploy-interne DB

PostgreSQL im Container dokploy-postgres. Nützliche Tabellen: application, gitea, apikey, project, domain, deployment.

docker exec dokploy-postgres.1.<id> psql -U dokploy -d dokploy -c "\dt"

sslip.io — der Magic-DNS-Trick

<name>.192.168.0.184.sslip.io löst automatisch zu 192.168.0.184 auf. So braucht jede App keine eigene DNS-Config — einfach Subdomain vor die IP setzen.