1 Architecture
Claude edited this page 2026-06-29 21:37:15 +00:00

Architecture

Datenfluss

Browser (:8080, intern/VPN)
   │  REST /api/* · /auth/*   ·   WebSocket /ws/terminal/*
   ▼
FastAPI Backend (:8765)
   ├─ REST API        server/routers/*
   ├─ WebSocket       server/websocket/agent_ws.py  (/ws/agent)
   ├─ Scheduler       server/scheduler.py  (asyncio, periodisch)
   ├─ Tunneling       server/tunneling/  (+ guaclite)
   └─ PostgreSQL      via SQLAlchemy async
   ▲
   │  WebSocket (Agent verbindet ausgehend zum Server)
Proxmox-Host: theprox-node-agent (Rust, root)
   ├─ pvesh / qm / pct  → Proxmox API
   ├─ PTY-Terminals direkt auf Host/VM
   └─ TCP :9100  ◄── VM-Guest-Agenten
   ▲
   │  TCP JSON-Lines (Guest verbindet ausgehend zum Host)
VM Guest-Agent (Rust, in der VM)
   └─ Metrics (15s) + Scans (5min)

Verbindungsrichtungen (wichtig)

  • Host-Agent → Backend: ausgehend. Proxmox-Host braucht keinen offenen Inbound-Port; nur Erreichbarkeit von :8765 am Server.
  • VM-Guest → Host-Agent: ausgehend (TCP :9100 am Host).
  • Browser → Backend: nur intern/VPN (:8080).

nginx (dual)

  • server/nginx/public.conf:8765, leitet nur /ws/agent (+ Install- Endpunkte) weiter. Minimale Angriffsfläche.
  • server/nginx/intern.conf:8080, WebUI + voll API.

Command-Pattern

server/websocket/manager.py (AgentManager) hält pro Node eine WS-Verbindung und nutzt ein Future-Pattern: REST-Handler ruft send_command(node, …), wartet auf das per Request-ID korrelierte Agent-Result. Agent-ausgelöste Aktionen werden in CommandLog protokolliert (sichtbar in Node-Logs/Audit).