Zum Inhalt

Diagrammübersicht

Stand: 2026-05-26

Die folgenden Diagramme beschreiben den produktiven Stand der Lanstyle AI Suite nach dem VLAN70-Canary. Alte IPs bleiben für Rollback aktiv; die AI-relevanten NPM-Backends nutzen Direct-IP-Upstreams in VLAN70.

High-Level Architecture

flowchart TB
  subgraph EXT["Externe und Benutzer-Frontends"]
    OC["OpenCode\nlokal/extern"]
    OWUI["Open WebUI\nhttps://ai.lanstyle.de"]
    USER["Browser / Mitarbeiter"]
  end

  subgraph EDGE["Edge und Control Plane"]
    NPM["Nginx Proxy Manager\n10.0.0.5"]
    UDNS["UniFi DNS Authority\nUDM Pro"]
    VW["Vaultwarden\nSecrets Source of Truth"]
  end

  subgraph VLAN70["VLAN70 LS_AI_Services\n10.222.70.0/24"]
    OWUI70["Open WebUI\n10.222.70.10:8080"]
    OLLAMA["Ollama / GB10\n10.222.70.11:11434"]
    SEARX["SearXNG\n10.222.70.12:8888"]
    OT["Open Terminal\n10.222.70.13:8001-8004"]
    subgraph AR["Agent Runtime LXC 259\n10.222.70.20"]
      LLM["LiteLLM\n:4000"]
      MCPH["MCPHub\n:3000"]
      TOOLS["Lanstyle Tools API\n:3010"]
      QDRANT["Qdrant\n:6333"]
      PG["PostgreSQL\ninternal"]
      REDIS["Redis\ninternal"]
      RAGD["RAG Collections\nlanstyle_docs\nlanstyle_inventory"]
    end
  end

  subgraph INFRA["Interne Infrastrukturquellen"]
    NB["NetBox\nIPAM/DCIM"]
    GITEA["Gitea\nGit/Docs/Prompts"]
    MKDOCS["MkDocs Wiki"]
  end

  USER --> NPM
  OC --> NPM
  NPM --> OWUI70
  NPM --> LLM
  NPM --> MCPH
  NPM --> SEARX
  NPM --> OLLAMA
  OWUI --> NPM
  OWUI70 --> LLM
  OWUI70 --> MCPH
  OWUI70 --> OT
  OWUI70 --> SEARX
  LLM --> OLLAMA
  LLM --> PG
  LLM --> REDIS
  MCPH --> TOOLS
  TOOLS --> NB
  QDRANT --- RAGD
  LLM --> QDRANT
  TOOLS --> QDRANT
  GITEA --> MKDOCS
  UDNS -. "DNS Authority" .-> NPM
  VW -. "Secrets nur aus Vaultwarden" .-> AR

Runtime / Request Flow

flowchart LR
  subgraph CLIENTS["Clients"]
    OC["OpenCode"]
    OW["Open WebUI"]
  end

  subgraph PROXY["Reverse Proxy"]
    NPM["NPM\nDirect-IP Upstreams"]
  end

  subgraph RUNTIME["Agent Runtime"]
    LIT["LiteLLM\nModel Router"]
    MCP["MCPHub"]
    API["Lanstyle Tools API\nOpenAPI facade"]
    QD["Qdrant"]
    PG["PostgreSQL"]
    RS["Redis"]
  end

  subgraph TOOLS["Tooling"]
    ROT["Read-only MCPs\nNetBox/NPM/Proxmox/Gitea"]
    POT["Plan-only MCPs\nChange proposals"]
    TERM["Open Terminal\nUser containers"]
    SEARCH["SearXNG"]
  end

  subgraph INFER["Inference"]
    OLL["Ollama / GB10"]
    MODELS["gpt-oss:120b\nqwen3-coder-next\nqwen3.6:35b-a3b\nnomic-embed-text"]
  end

  OC -- "OpenAI API / streaming" --> NPM --> LIT
  OW -- "OpenAI-compatible provider" --> NPM
  OW -- "Toolserver / UI tools" --> MCP
  OW -- "Terminal sessions" --> TERM
  OW -- "Web search" --> SEARCH
  NPM --> LIT
  LIT -- "chat completions / streaming" --> OLL --> MODELS
  LIT -- "embeddings" --> OLL
  LIT --> PG
  LIT --> RS
  MCP --> ROT
  MCP --> POT
  MCP --> API
  API -- "inventory/docs context" --> QD
  ROT -- "read-only discovery" --> QD

Security / Trust Boundaries

flowchart TB
  subgraph INTERNET["Internet / externe Clients"]
    EXTUSER["OpenCode extern\nBrowser Clients"]
  end

  subgraph EDGE["Edge Trust Boundary"]
    NPM["NPM\nTLS + Access Lists"]
  end

  subgraph INTERNAL["Interne Vertrauenszone"]
    VW["Vaultwarden\nSecrets"]
    UDNS["UniFi DNS\nAuthoritative"]
    MGMT["Admin/Management\nSSH/API mit Freigabe"]
  end

  subgraph VLAN70["AI Services Boundary VLAN70"]
    OW["Open WebUI"]
    LIT["LiteLLM"]
    MCP["MCPHub"]
    API["Tools API"]
    TERM["Open Terminal"]
    QD["Qdrant"]
    OLL["Ollama/GB10"]
  end

  subgraph CAP["Tool Capability Boundary"]
    RO["Read-only MCPs\nDiscovery only"]
    PO["Plan-only MCPs\nNo live writes"]
    NEVER["No autonomous writes\nAD/Exchange/Intune/Proxmox/NetBox/NPM"]
  end

  EXTUSER --> NPM
  NPM -- "nur freigegebene FQDNs" --> OW
  NPM -- "API-Key / Access List" --> LIT
  NPM -- "Access List / Auth" --> MCP
  OW --> LIT
  OW --> TERM
  LIT --> OLL
  MCP --> RO
  MCP --> PO
  PO -. "requires approval_id schema before live writes" .-> NEVER
  API --> RO
  VW -. "keine Secrets in Git/Wiki" .-> LIT
  VW -.-> MCP
  UDNS -. "DNS writes only here" .-> NPM
  MGMT -. "Changeplan + Backup" .-> VLAN70
  QD -. "interne RAG-Daten" .-> API

VLAN70 Migration State

flowchart TB
  subgraph OLD["Historische Altpfade / Rollback-Kontext"]
    OWOLD["Open WebUI\n10.0.0.250:8080"]
    OLLOLD["Ollama\n10.222.70.11:11434\n10.0.14.43:11434"]
    SXOLD["SearXNG\n10.0.1.240:8888"]
    OTOLD["Open Terminal historisch\n10.0.1.253:8001-8004"]
    AROLD["Agent Runtime\n10.0.1.243"]
  end

  subgraph NEW["Aktive VLAN70-Ziele"]
    OWNEW["Open WebUI\n10.222.70.10:8080"]
    OLLNEW["Ollama/GB10\n10.222.70.11:11434"]
    SXNEW["SearXNG\n10.222.70.12:8888"]
    OTNEW["Open Terminal\n10.222.70.13:8001-8004"]
    ARNEW["Agent Runtime\n10.222.70.20\n3000/3010/4000/6333"]
  end

  subgraph NPMUP["Aktive NPM Direct-IP-Upstreams"]
    AI["ai.lanstyle.de\n-> 10.222.70.10:8080"]
    OLLD["ollama.lanstyle.de\n-> 10.222.70.11:11434"]
    SEARCH["search.lanstyle.de\n-> 10.222.70.12:8888"]
    LLM["litellm.lanstyle.de\n-> 10.222.70.20:4000"]
    HUB["mcphub.lanstyle.de\n-> 10.222.70.20:3000"]
  end

  AI --> OWNEW
  OLLD --> OLLNEW
  SEARCH --> SXNEW
  LLM --> ARNEW
  HUB --> ARNEW

  OWNEW -. "dual-homed rollback" .-> OWOLD
  OLLNEW -. "dual-homed rollback" .-> OLLOLD
  SXNEW -. "dual-homed rollback" .-> SXOLD
  OTNEW -. "dual-homed rollback" .-> OTOLD
  ARNEW -. "dual-homed rollback" .-> AROLD

  OBS["Beobachtungsphase\nkeine Alt-IP-Entfernung\nkeine Deny-Regeln"] --> NPMUP

LiteLLM / Modellrouting

flowchart LR
  subgraph FRONT["Frontends"]
    OC["OpenCode"]
    OW["Open WebUI"]
  end

  subgraph LIT["LiteLLM Aliase"]
    STABLE["lanstyle/agent-stable\nProduktiv-Default"]
    FAST["lanstyle/fast\nschnelle Aufgaben"]
    ARCH["lanstyle/architect\nPlanung/Review"]
    AGENT["lanstyle/agent\nexperimental"]
    EMB["lanstyle/embed\nEmbeddings"]
  end

  subgraph OLL["Ollama / GB10 Modelle"]
    QCN["qwen3-coder-next:latest"]
    Q35["qwen3.5:latest"]
    GPT["gpt-oss:120b"]
    Q36["qwen3.6:35b-a3b"]
    NOMIC["nomic-embed-text:latest"]
  end

  OC --> STABLE
  OW --> STABLE
  OC --> ARCH
  OW --> FAST
  STABLE --> QCN
  FAST --> QCN
  ARCH --> GPT
  AGENT --> Q36
  EMB --> NOMIC

  NOTE["Empfehlung:\nagent-stable als Default\nagent experimentell wegen finish=length/Leercontent beobachten"] -.-> AGENT