Du brauchst Daten-Hoheit, DSGVO-Konformität und unbegrenzte Executions? Ein Self-Hosted Stack ist 15 Jahre alt (technisch stabil) und kostet weniger als Cloud monatlich.

Warum Self-Hosted?

Grund Nutzen
DSGVO Kundendaten niemals verlassen dein Netzwerk
Kosten >$5k/Mo Cloud → $300/Mo Hardware
Kontrolle Backups, Updates, Sicherheit selbst
Keine Limits Unbegrenzte Workflows, Requests, Speicher
Offline Läuft auch ohne Internet

Tradeoff: Wartung erforderlich (1-2h/Monat).


Der Stack: Komponenten

┌─────────────────────────────────────┐
│   Web-UI (Open WebUI, Chatbot)      │  Port 8080
├─────────────────────────────────────┤
│   LLM Inference (Ollama, vLLM)      │  Port 11434
├─────────────────────────────────────┤
│   Workflows (n8n, Activepieces)     │  Port 5678
├─────────────────────────────────────┤
│   Knowledge (open-notebook, RAG)    │  Port 8000
├─────────────────────────────────────┤
│   Vector DB (ChromaDB, Qdrant)      │  Port 6333
├─────────────────────────────────────┤
│   Monitoring (Grafana, Prometheus)  │  Port 3000
├─────────────────────────────────────┤
│   Database (PostgreSQL, SurrealDB)  │  Port 5432
├─────────────────────────────────────┤
│   Hardware (GPU, CPU, RAM)          │  Server
└─────────────────────────────────────┘

Du musst nicht alles deployen. Start: Ollama + Open WebUI + n8n. Das ist 80% der Nutzen.


1. LLM Inference Layer

Ollama (einfachste Option)

Aspekt Detail
Installation Homebrew, Windows, Linux (jeweils 5min)
Models 500+ Modelle downloadbar
API OpenAI-kompatibel (localhost:11434)
GPU-Support NVIDIA (CUDA), AMD (ROCm), Apple (Metal)
Speicher Modelle lokal gecacht
VRAM-Overhead ~500MB Basis + Model Size

Installation (MacOS):

brew install ollama
ollama run llama2  # Startet LLM Download + Chat

Installation (Linux mit NVIDIA):

curl https://ollama.ai/install.sh | sh
sudo systemctl start ollama

ollama run neural-chat  # Schnelleres Modell (7B)

API-Nutzung:

# Lokale Chat-API
curl http://localhost:11434/api/chat -d '{
  "model": "neural-chat",
  "messages": [{"role": "user", "content": "Hallo"}]
}'

# In n8n, Open WebUI, anderen Apps direkt verwenden

Vorinstallierte Modelle (nach Größe):

Modell Size VRAM Tokens/s (RTX 4070) Qualität
Phi-3.5 (3.8B) 2GB 4GB 100+ Gut für Edge
Neural-Chat (7B) 4GB 6GB 60+ Schnell
Llama 2 (7B) 4GB 6GB 50+ Solide
Mistral (7B) 4GB 6GB 65+ Beste Geschwindigkeit
Qwen 2.5 (14B) 9GB 12GB 40+ Beste Qualität (14B)
Llama 2 70B (Q4) 40GB 42GB 5+ Beste Qualität (70B)

Stärken:

  • Stupidly einfach zu installieren
  • Model-Switching trivial (Cmd+Backspace wechselt im Chat)
  • OpenAI-API kompatibel (works mit n8n, Open WebUI, etc.)
  • VRAM-optimiert (Q4_K_M default)

Schwächen:

  • Nicht für Produktion bei >100 Req/s
  • Kein Batching/Load-Balancing built-in
  • Single-GPU nur

Best for: Startups. Kleine Teams. DSGVO-Anforderung. First Prototype.


vLLM (Produktion, schnell)

Aspekt Detail
Spezialisierung High-Throughput Inference
Performance 10x schneller als Ollama (bei Scale)
API OpenAI-kompatibel (Port 8000)
GPU-Support NVIDIA (CUDA), optimiert
Batching ✅ Automatisch
Multi-GPU ✅ Ja (Tensor Parallel)
VRAM-Saving ✅ PagedAttention (25-30% weniger)

Installation (Linux + NVIDIA):

pip install vllm

vllm serve meta-llama/Llama-2-7b-hf \
  --max-model-len 4096 \
  --port 8000 \
  --tensor-parallel-size 2  # Auf 2 GPUs verteilt

Wann vLLM über Ollama:

  • 50 Requests/Sekunde

  • Multi-GPU Setup
  • Latenzy-SLA (<200ms p95)
  • Tokenizer-Komplex (lange Kontexte)

Wann Ollama:

  • <10 Req/s
  • Single GPU
  • Einfachheit > Performance
  • Non-NVIDIA (Apple Metal, AMD)

2. Web-UI Layer

Open WebUI (All-in-One Chattool)

Aspekt Detail
Installation Docker (2min)
UI Modern, ChatGPT-ähnlich
Features Chat, RAG, Web Browsing, Agents
Model-Backend Beliebig (Ollama, OpenAI, Anthropic)
Speicher Chats lokal (SQLite)
Authentifizierung Basic Auth oder OAuth

Docker Compose:

version: '3'
services:
  open-webui:
    image: ghcr.io/open-webui/open-webui:latest
    ports:
      - "8080:8080"
    volumes:
      - open-webui-data:/app/backend/data
    environment:
      OLLAMA_API_BASE_URL: http://ollama:11434
    depends_on:
      - ollama

  ollama:
    image: ollama/ollama:latest
    ports:
      - "11434:11434"
    volumes:
      - ollama-data:/root/.ollama
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: 1
              capabilities: [gpu]

volumes:
  open-webui-data:
  ollama-data:

Starten:

docker-compose up -d
# Offen in Browser: http://localhost:8080

Stärken:

  • Schöne UI, einsteigerfreundlich
  • RAG integriert (Knowledge Upload)
  • Web-Browsing (mit Ollama-Backend)
  • Multi-Model (kannst GPT-4, Claude dazuschalten)

Schwächen:

  • Weniger Developer-Features als Alternatives
  • RAG ist einfach (für Production: open-notebook verwenden)

Best for: Non-Technical Users. Chatbot UI. Knowledge Q&A.


SillyTavern (Rollenplay/Advanced)

Aspekt Detail
Spezialisierung Character-driven Chat, Memory
Features Character Cards, Multi-turn Memory, Editing
Wann Wenn du Character-Roleplay oder Long-Memory brauchst

Nicht Standard für Business — mehr für Privacy-Focused Enthusiasts.


3. Workflow Automation

n8n Self-Hosted (siehe auch: Workflow-Automation Wiki)

Docker Compose (vollständig):

version: '3'
services:
  n8n:
    image: n8nio/n8n:latest
    ports:
      - "5678:5678"
    environment:
      N8N_HOST: localhost
      N8N_PORT: 5678
      N8N_PROTOCOL: http
      N8N_SECURE_COOKIE: "false"
      DB_TYPE: postgres
      DB_POSTGRESDB_HOST: postgres
      DB_POSTGRESDB_USER: n8n
      DB_POSTGRESDB_PASSWORD: n8n_password
      DB_POSTGRESDB_DATABASE: n8n
    volumes:
      - n8n-data:/home/node/.n8n
    depends_on:
      - postgres

  postgres:
    image: postgres:13
    environment:
      POSTGRES_USER: n8n
      POSTGRES_PASSWORD: n8n_password
      POSTGRES_DB: n8n
    volumes:
      - postgres-data:/var/lib/postgresql/data

volumes:
  n8n-data:
  postgres-data:

Start:

docker-compose up -d
# http://localhost:5678

Integrieren mit Ollama:

n8n Node: HTTP Request
  URL: http://ollama:11434/api/chat
  Method: POST
  Body: {
    "model": "neural-chat",
    "messages": [{"role": "user", "content": "{{ $json.input }}"}]
  }

Activepieces (Leichtere Alternative)

Docker:

docker run -d \
  -p 80:80 \
  -e FRONTEND_URL=http://localhost \
  -e BACKEND_URL=http://localhost/api \
  -v activepieces-data:/root/.activepieces \
  activepieces/activepieces:latest

Für: Einfache Workflows, weniger Feature-Rich als n8n, aber schneller zu deployen.


4. Knowledge Management (RAG)

open-notebook (ai-engineering proprietary)

Nicht Open Source, aber wenn verfügbar:

service:
  open-notebook:
    image: your-registry/open-notebook:latest
    ports:
      - "8000:8000"
    environment:
      OLLAMA_API_BASE: http://ollama:11434
      SURREALDB_URL: surreal://surrealdb:8000
    depends_on:
      - ollama
      - surrealdb

Features: Semantische Suche, Embeddings lokal, ähnlich Notion aber mit KI.


ChromaDB (einfache Alternative)

import chromadb

client = chromadb.Client()
collection = client.create_collection("documents")

# Add documents
collection.add(
    documents=["Kundenvertrag von 2024", "Budget Excel"],
    metadatas=[{"source": "legal"}, {"source": "finance"}],
    ids=["doc1", "doc2"]
)

# Search
results = collection.query(
    query_texts=["Zahlungsbedingungen"],
    n_results=2
)

Deployment:

docker run -p 8000:8000 chromadb/chroma:latest

Stärken:

  • Einfach (in-memory oder persistent)
  • Python-native
  • Ollama-kompatibel für Embeddings

Qdrant (Enterprise RAG)

qdrant:
  image: qdrant/qdrant:latest
  ports:
    - "6333:6333"
  volumes:
    - qdrant-data:/qdrant/storage

Wann: >1M Documents, komplexe Metadaten-Filter.


5. Datenbanken

PostgreSQL (Standard)

docker run -d \
  -e POSTGRES_PASSWORD=password \
  -p 5432:5432 \
  postgres:15

Für: n8n State, User Credentials, strukturierte Daten.

SurrealDB (Graph + KI-freundlich)

docker run -d \
  -p 8000:8000 \
  surrealdb/surrealdb:latest start

Für: Knowledge Graphs, Relationships, embeddings.


6. Monitoring

Siehe: Monitoring Wiki

Minimum:

docker run -d -p 9090:9090 prom/prometheus
docker run -d -p 3000:3000 grafana/grafana
docker run -d -p 3001:3001 louislam/uptime-kuma

Hardware-Anforderungen (Budget-Breakdown)

Tier 1: Budget (€500-1000, für kleine Projekte)

Hardware:

  • Laptop/Desktop mit RTX 4060 (8GB VRAM) oder Apple Silicon MacBook Pro
  • 32GB RAM
  • 500GB SSD

Was läuft:

  • Ollama (Qwen 2.5 7B oder Mistral 7B)
  • Open WebUI
  • n8n (kleine Workflows)
  • Nicht: vLLM, Multi-GPU, High-Throughput

Kosten/Monat: €0 (Hardware amortisiert sich in 4-6 Monaten vs. Cloud).


Tier 2: Standard (€2000-4000, für 5-30 Person Teams)

Hardware:

  • Dedicated Server: RTX 4070 Super (12GB) oder RTX 4090 (24GB)
  • 64GB RAM
  • 1TB SSD
  • 1Gbps Internet

Services:

  • Ollama (Multi-GPU möglich)
  • Open WebUI + RAG
  • n8n (100+ Workflows)
  • PostgreSQL + SurrealDB
  • Monitoring (Grafana)
  • Backup-Automation

Provider: Contabo, Hetzner, DigitalOcean

Kosten/Monat: €50-150 Hardware. ROI vs. Cloud: 1-2 Monate bei moderatem Volumen.


Tier 3: Production (€5000+, für Unternehmen)

Hardware:

  • RTX 6000 Ada (48GB) oder H100 (80GB)
  • 256GB+ RAM
  • NVMe RAID
  • Redundant Internet

Services:

  • vLLM (Multi-GPU, Batching)
  • n8n (unbegrenzte Scale)
  • Qdrant (Millionen Documents)
  • Kubernetes (wenn 5+ Services)
  • PagerDuty Alerting
  • 24/7 Monitoring

Kosten/Monat: €200-500 Hardware. ROI vs. GPT-API: 1 Monat bei >$5k/Mo Cloud Spend.


Deployment-Architektur (für Scale)

Internet ← Cloudflare Tunnel ← Reverse Proxy (Nginx)
                                      ↓
         ┌────────────────┬───────────┼───────────┐
         ↓                ↓           ↓           ↓
     n8n:5678    Open WebUI:8080  Ollama:11434  Monitoring:3000
         ↓                ↓           ↓           ↓
         └────────────────┴─────────┬─────────────┘
                                   ↓
                        PostgreSQL 5432
                        SurrealDB 8000
                        ChromaDB 8100

Monitoring Endpoints:

  • Prometheus scrapes jeden Service alle 60s
  • Grafana visualisiert
  • Uptime Kuma checkt HTTP 200 response

Backup-Strategie (PFLICHT!)

Tägliche Backups

#!/bin/bash
# backup.sh

BACKUP_DIR="/backups/$(date +%Y-%m-%d)"
mkdir -p $BACKUP_DIR

# n8n Workflows (JSON)
docker exec n8n npm --prefix . run build 2>&1 | grep -i workflow > $BACKUP_DIR/n8n-workflows.json

# PostgreSQL
docker exec postgres pg_dump -U n8n n8n > $BACKUP_DIR/n8n-db.sql

# SurrealDB
docker exec surrealdb surreal export 'surreal://localhost:8000' > $BACKUP_DIR/surreal.sql

# Open WebUI Chats
docker cp open-webui:/app/backend/data/webui.db $BACKUP_DIR/

# Compress
tar -czf $BACKUP_DIR.tar.gz $BACKUP_DIR/
aws s3 cp $BACKUP_DIR.tar.gz s3://your-bucket/backups/

Cron (täglich 2am):

0 2 * * * /root/backup.sh >> /root/backup.log 2>&1

Retention: 30 Tage lokal, 90 Tage in S3.


Full Stack Docker Compose (Production-ready)

version: '3.8'

services:
  ollama:
    image: ollama/ollama:latest
    ports:
      - "11434:11434"
    volumes:
      - ollama-data:/root/.ollama
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: 1
              capabilities: [gpu]
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:11434/api/tags"]
      interval: 30s
      timeout: 10s
      retries: 3

  open-webui:
    image: ghcr.io/open-webui/open-webui:latest
    ports:
      - "8080:8080"
    volumes:
      - open-webui-data:/app/backend/data
    environment:
      OLLAMA_API_BASE_URL: http://ollama:11434
    depends_on:
      ollama:
        condition: service_healthy

  n8n:
    image: n8nio/n8n:latest
    ports:
      - "5678:5678"
    volumes:
      - n8n-data:/home/node/.n8n
    environment:
      N8N_HOST: localhost
      N8N_PORT: 5678
      DB_TYPE: postgres
      DB_POSTGRESDB_HOST: postgres
      DB_POSTGRESDB_USER: n8n
      DB_POSTGRESDB_PASSWORD: ${DB_PASSWORD}
      DB_POSTGRESDB_DATABASE: n8n
    depends_on:
      - postgres

  postgres:
    image: postgres:15
    volumes:
      - postgres-data:/var/lib/postgresql/data
    environment:
      POSTGRES_USER: n8n
      POSTGRES_PASSWORD: ${DB_PASSWORD}
      POSTGRES_DB: n8n
    ports:
      - "5432:5432"

  prometheus:
    image: prom/prometheus:latest
    ports:
      - "9090:9090"
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml
      - prometheus-data:/prometheus

  grafana:
    image: grafana/grafana:latest
    ports:
      - "3000:3000"
    volumes:
      - grafana-data:/var/lib/grafana
    environment:
      GF_SECURITY_ADMIN_PASSWORD: ${GRAFANA_PASSWORD}

  uptime-kuma:
    image: louislam/uptime-kuma:latest
    ports:
      - "3001:3001"
    volumes:
      - uptime-kuma-data:/app/data

volumes:
  ollama-data:
  open-webui-data:
  n8n-data:
  postgres-data:
  prometheus-data:
  grafana-data:
  uptime-kuma-data:

Start:

export DB_PASSWORD=secure_password_here
export GRAFANA_PASSWORD=another_secure_password
docker-compose up -d

First Steps Checklist

  • Hardware entschieden (Tier 1-3)
  • Server gemietet oder gekauft
  • Docker + Docker Compose installiert
  • Ollama + Open WebUI läuft
  • n8n deployt (mit PostgreSQL)
  • Monitoring aktiviert (Prometheus + Grafana)
  • Backup-Script geschrieben + Cron aktiviert
  • Cloudflare Tunnel (optional, für externe Zugriffe)
  • Dokumentation: Config Backups, Recovery-Runbook

Sources: