Caddy Reverse Proxy, Docker-Compose, Systemd-Configs & Infrastructure-as-Code
Find a file
2026-07-21 08:50:40 +02:00
caddy Caddyfile: portal.ki-tools.business hinzugefügt 2026-07-21 08:12:25 +02:00
portainer README+portainer: SSH-Passwörter entfernt – Verweis auf SMB credentials.md 2026-07-21 08:50:40 +02:00
diagram.mmd README, NETWORK, diagram.mmd, portainer: Portal + nofx + Backup-Hinweise ergänzt 2026-07-21 08:18:17 +02:00
NETWORK.md README, NETWORK, diagram.mmd, portainer: Portal + nofx + Backup-Hinweise ergänzt 2026-07-21 08:18:17 +02:00
network.png feat: add Mermaid source + PNG export of network topology 2026-07-20 21:35:44 +02:00
README.md README+portainer: SSH-Passwörter entfernt – Verweis auf SMB credentials.md 2026-07-21 08:50:40 +02:00

Infrastructure

Infrastructure-as-Code für das ki-tools.business-Netzwerk.

Repo-Struktur

infrastructure/
├── README.md               # Diese Datei  Übersicht
├── NETWORK.md              # Netzwerk-Topologie mit Mermaid-Diagramm
├── diagram.mmd             # Mermaid-Quellcode
├── network.png             # Exportiertes Topologie-Diagramm
├── caddy/
│   └── Caddyfile           # Live-Reverse-Proxy-Config (alle Domains)
├── portainer/
│   └── README.md           # Portainer-Stacks und Docker-Setup
├── docker-compose/         # (geplant)
├── systemd/                # (geplant)
└── scripts/                # (geplant)

Host-Übersicht

Host IP Rolle(n) SSH Zugang Web
caddy-gate 10.200.200.1 Caddy Reverse Proxy SSL-Terminierung für 8 Domains
spark1 192.168.99.36 GPU-Node vLLM (JL-Spark / JL-Spark-2), 48GB VRAM
spark2 192.168.99.74 GPU-Node vLLM (Cluster mit spark1), 48GB VRAM
nofx 192.168.99.75 KlawTrade Dashboard, jltrade API (:8080), NATS, Postgres nofx.ki-tools.business
ac-host 192.168.99.76 Guacamole, Hermes-SaaS-Portal, ttyd, MCP-SearXNG (Node), socat-Proxys ac.ki-tools.business / portal.ki-tools.business
main-host 192.168.99.65 Portainer CE, Forgejo (Git), OpenCloud, Nextcloud Office portainer/git/files/office.ki-tools.business
searxng 192.168.99.8 SearXNG Private Search Engine suche.ki-tools.business
smb-vision 192.168.99.45 SMB-Share (Agent Hermes), Vision-Modell (LM Studio) SMB / HTTP :1234

SSH-Zugriff nur intern aus 192.168.99.0/24.
Caddy-Gate (10.200.200.1) ist reiner Reverse Proxy.
SSH-Passwörter stehen auf dem SMB-Share (/mnt/agent-hermes/docs/infrastructure/credentials.md), nicht im Repo.

Domain-Map

Domain Ziel-IP Port Dienst
portainer.ki-tools.business 192.168.99.65 9443 Portainer CE
git.ki-tools.business 192.168.99.65 3000 Forgejo
files.ki-tools.business 192.168.99.65 9200 OpenCloud
office.ki-tools.business 192.168.99.65 9900 Nextcloud Office
suche.ki-tools.business 192.168.99.8 8080 SearXNG
ac.ki-tools.business 192.168.99.76 8080 Guacamole (RDP/SSH)
portal.ki-tools.business 192.168.99.76 8000 Hermes-SaaS-Portal
nofx.ki-tools.business 192.168.99.75 8080 KlawTrade / jltrade-Dashboard

LLM-API-Endpoints

Endpoint Model Host Port
spark1:8888/v1 JL-Spark (Text) 192.168.99.36 8888
spark1:8888/v1 JL-Spark-2 (Text, 512K) 192.168.99.36 8888
192.168.99.45:1234/v1 Vision-Modell 192.168.99.45 1234

Subnetze

Netz Zweck
192.168.99.0/24 Interne Dienste inkl. SSH
10.200.200.0/24 Caddy-Gate (DMZ / WAN)
172.19.0.0/16 Docker-Bridge kollegen-net (ac-host)
192.168.177.0/24 RoCE Rail 1 (GPU-Cluster)
192.168.178.0/24 RoCE Rail 2 (GPU-Cluster)

Caddy-Management

Immer zuerst ein Backup erstellen, vor jeder Änderung:

cp /etc/caddy/Caddyfile /etc/caddy/Caddyfile.$(date +%Y%m%d_%H%M%S).bak

Dann editieren, validieren, laden:

caddy fmt --overwrite /etc/caddy/Caddyfile
caddy validate --config /etc/caddy/Caddyfile
systemctl reload caddy

# oder
caddy reload --config /etc/caddy/Caddyfile

Logs:

journalctl -u caddy -n 30 --no-pager

Portal-Management (ac-host)

Das Hermes-SaaS-Portal auf 192.168.99.76 (ac-host):

# Portal: portal.ki-tools.business (Admin: admin / ki-tools-2026)
ssh root@192.168.99.76

# Service
systemctl status hermes-saas
journalctl -u hermes-saas -n 50 --no-pager

# Binary + Templates
ls -la /opt/hermes-saas/
# DB: /root/.hermes-saas/portal.db

# SQLite DB-Check
sqlite3 /root/.hermes-saas/portal.db "SELECT id, username, role, last_login FROM users;"
sqlite3 /root/.hermes-saas/portal.db "SELECT id, user_id, docker_name, port, status FROM containers;"

Neuer Einladungstoken (von außen per Admin-Seite) oder manuell:

python3 -c "import uuid; print(uuid.uuid4())" | xargs -I TOKEN \
  sqlite3 /root/.hermes-saas/portal.db \
  "INSERT INTO invite_tokens (token, created_by, max_uses, use_count, active) VALUES ('TOKEN', 1, 1, 0, 1);"

Admin-Passwort zurücksetzen (Python mit bcrypt):

python3 -c "import bcrypt, sys; sys.stdout.write(bcrypt.hashpw(b'ki-tools-2026', bcrypt.gensalt()).decode())" | \
  xargs -I HASH sqlite3 /root/.hermes-saas/portal.db \
  "UPDATE users SET password = 'HASH' WHERE username = 'admin';"

Siehe NETWORK.md für das Topologie-Diagramm.