Ein LLM mit Docker in Produktion bereitstellen Compose
Ein LLM lokal auf dem eigenen Rechner zum Laufen zu bringen, dauert zehn Minuten. Ein LLM mit Docker Compose für ein Team in den Produktionsbetrieb zu bringen — mit einer HTTPS-URL, Monitoring, Backups und echter Sicherheit — ist eine andere Aufgabe. Dieser Leitfaden stellt einen vollständigen Stack (Ollama, Open WebUI, Qdrant, n8n, Traefik) in einer einzigen kommentierten Datei docker-compose.yml zusammen, die auf einem VPS oder einem On-Premises-Server eingesetzt werden kann.
#Warum dieser Stack
Ziel ist es, die vier konkreten Anforderungen eines kleinen oder mittleren Unternehmens oder eines technischen Teams abzudecken, das lokale KI einsetzt: eine Inferenz-Engine (Ollama), eine webbasierte Benutzeroberfläche (Open WebUI), eine Vektordatenbank für RAG (Qdrant) und eine No-Code-Automatisierungsschicht (n8n). Traefik wird dem gesamten System als Reverse-Proxy vorgeschaltet und übernimmt HTTPS über Let's Encrypt sowie das Routing.
Jeder Dienst läuft in seinem eigenen isolierten Container mit persistenten Volumes. Sie können einen Dienst deaktivieren, ohne die anderen zu beeinträchtigen, eine einzelne Komponente aktualisieren oder den Stack mit einem einzigen Befehl in einer Staging-Umgebung replizieren.
#Zielarchitektur
Agenten, die auf Ihrem Rechner handeln: agentisches Cline, MCP, n8n + Ollama und lokale Automatisierungen.
- Lebenslanger Online-Zugang
- PDF + Dateien
- Lebenslange Updates
- Traefik (Port 80/443)
- Reverse-Proxy mit automatischer TLS-Terminierung über Let's Encrypt. Der gesamte externe Datenverkehr läuft über ihn.
- Open WebUI (intern)
- Chat-Interface vom Typ ChatGPT, verfügbar unter chat.votre-domaine.fr. Lokale Authentifizierung oder OIDC.
- Ollama (intern)
- Inferenz-Daemon. NICHT öffentlich zugänglich, ausschließlich über das Docker-Netzwerk erreichbar.
- Qdrant (intern)
- Vektordatenbank für RAG. Speicherung der Embeddings Ihrer Dokumente.
- n8n
- No-Code-Automatisierung, erreichbar unter n8n.votre-domaine.fr.
- Prometheus + Grafana
- Optional, intern für die Überwachung von GPU/CPU/RAM bereitgestellt.
#Voraussetzungen
- Ein Linux-Server
- Ubuntu 22.04 LTS oder Debian 12, SSH-Zugriff als root, mindestens 16 GB RAM, 200 GB Festplattenspeicher.
- Eine NVIDIA-GPU wird empfohlen
- RTX 3090 mit 24 GB oder RTX 4090 für einen komfortablen Betrieb von 14B–32B-Modellen, oder RTX 4070 mit 12 GB für 7B-Modelle. Ohne GPU bleiben Sie bei 3B-Modellen, die auf der CPU laufen.
- Ein Domainname
- Mit DNS-Zugriff zum Erstellen von Subdomains. Für Let's Encrypt unverzichtbar.
- Docker Engine + Compose v2
- Installation über das offizielle Skript get.docker.com. Das Compose-Plugin ist seit 2022 enthalten.
- NVIDIA Container Toolkit
- Wenn Sie eine GPU haben, ermöglicht dies Docker, sie den Containern zugänglich zu machen.
#1. Den Server vorbereiten
Ausgangspunkt ist eine frisch installierte Ubuntu-22.04-Umgebung. Drei Dinge sind zu installieren: Docker, das NVIDIA Container Toolkit (bei GPU-Nutzung) und eine sauber konfigurierte Firewall.
#2. Die kommentierte Datei docker-compose.yml
Erstellen Sie einen Arbeitsordner und die Hauptdatei. Das ist das Herzstück der Bereitstellung — jeder Abschnitt ist kommentiert, damit Sie Anpassungen vornehmen können, ohne alles kaputtzumachen.
#3. Traefik und DNS konfigurieren
Bevor Sie docker compose up zum ersten Mal ausführen, erstellen Sie drei DNS-Einträge vom Typ A, die auf die öffentliche IP-Adresse Ihres Servers zeigen:
- chat.votre-domaine.fr
- Die Benutzeroberfläche Open WebUI.
- n8n.votre-domaine.fr
- Der Workflow-Editor n8n.
- traefik.votre-domaine.fr
- Das Traefik-Panel (geschützt durch Basic-Auth).
Erzeugen Sie den Hash für die Basic-Auth-Authentifizierung des Traefik-Dashboards. Achtung: Verdoppeln Sie in der .env-Datei die $-Zeichen (Escaping für docker-compose).
#4. Erster Start und Prüfungen
- 01Stack startenFühren Sie im Verzeichnis /opt/llm-stack docker compose up -d aus. Traefik wird die Let's-Encrypt-Zertifikate innerhalb weniger Sekunden beziehen — verfolgen Sie die Logs.
- 02Den Zustand der Dienste überprüfendocker compose ps doit afficher tous les services en running. Aucun ne doit redémarrer en boucle.
- 03Ein erstes Modell herunterladendocker compose exec ollama ollama pull qwen3.5:9b (6,6 GB, 256k Kontext, der vielseitige Referenztyp mit 8 GB im Jahr 2026). Für ein leistungsstärkeres Modell auf einer 24-GB-GPU: qwen3.8:27b (≈18 GB VRAM, 262k Kontext, Apache-2.0-Lizenz).
- 04Die Benutzeroberfläche testenÖffnen Sie https://chat.votre-domaine.fr. Das zuerst erstellte Konto ist das Administratorkonto. ENABLE_SIGNUP=false blockiert danach alle öffentlichen Registrierungen.
- 05Prüfen, ob die GPU genutzt wirddocker compose exec ollama ollama ps : la colonne PROCESSOR doit afficher 100% GPU.
#5. Sicherheit verstärken
Ein öffentlich zugänglicher, falsch konfigurierter Stack wird innerhalb einer Stunde gescannt. Hier sind die sechs nicht verhandelbaren Regeln für den produktiven Betrieb eines LLM mit Docker Compose, damit Ihre Bereitstellung nicht in jemandes Suchergebnissen auf shodan.io landet.
- Starke und einzigartige Passwörter
- Generieren Sie Ihre Secrets mit openssl rand -base64 32. Verwenden Sie niemals das Beispielpasswort aus der .env-Datei.
- Öffentliche Registrierung deaktivieren
- ENABLE_SIGNUP=false in Open WebUI. Andernfalls kann jeder ein Konto erstellen und Ihre GPU-Ressourcen verbrauchen.
- Sicherheitsheader über Traefik-Middleware
- Fügen Sie eine Middleware namens secureHeaders mit HSTS, frame-deny und content-type-nosniff hinzu. Drei Zeilen, enorme Wirkung.
- Ressourcen pro Container begrenzen
- Legen Sie unter deploy.resources.limits die Werte für memory und cpus fest. Das verhindert, dass ein abgestürzter Dienst den gesamten Server lahmlegt.
- Container sofern möglich schreibgeschützt
- Setzen Sie read_only: true bei Traefik und Qdrant. Tmpfs für die temporären Schreibverzeichnisse.
- Monatliche Updates
- watchtower automatisiert die Pulls, aber bevorzugen Sie ein Cron-Script mit explizitem Git-Tag, um die Versionen in der Produktion unter Kontrolle zu behalten.
#6. Monitoring Prometheus + Grafana
Drei Kennzahlen, die in der Produktion unbedingt überwacht werden müssen: der verwendete VRAM von Ollama, die Anfragerate Open WebUI und der Zustand der Let's Encrypt-Zertifikate (Traefik zeigt alle Metriken über /metrics an).
Importieren Sie in Grafana die Dashboards mit den IDs 14574 (NVIDIA GPU Exporter) und 17346 (Traefik v3). In 5 Minuten erhalten Sie einen vollständigen Überblick: VRAM, GPU-Temperaturen, HTTP-Anfrageraten pro Subdomain und P95-Latenzen.
#7. Sicherungen und Aktualisierungen
Fünf Volumes enthalten alle Ihre kritischen Daten: ollama_data (Modelle), open_webui_data (Konten + Gespräche + RAG), qdrant_data (Vektoren), n8n_data (Workflows), traefik_certs (Zertifikate).
Gehen Sie bei Updates auf Nummer sicher: Legen Sie die Versionen fest (image: ollama/ollama:0.5.4 statt :latest), erstellen Sie vor jedem Update einen Snapshot des VPS und testen Sie zuerst in einer Staging-Umgebung.
#Fehlerbehebung
- Traefik erzeugt kein Zertifikat
- Stellen Sie sicher, dass die Ports 80 und 443 offen sind UND dass der DNS korrekt auf den Server zeigt. docker compose logs traefik | grep -i error zeigt 90 % der Fälle (DNS nicht propagiert, Rate Limit, Challenge fehlgeschlagen).
- Open WebUI zeigt 'No models found'
- Sie haben in Ollama noch kein Modell heruntergeladen. docker compose exec ollama ollama pull qwen3.5:9b. Prüfen Sie auch OLLAMA_BASE_URL=http://ollama:11434 (Name des Dienstes, nicht localhost).
- GPU wird im Container nicht erkannt
- nvidia-container-toolkit ist nicht installiert oder Docker wurde nach der Konfiguration nicht neu gestartet. Testen Sie mit docker run --rm --gpus all nvidia/cuda:12.4.0-base-ubuntu22.04 nvidia-smi.
- n8n leitet in einer Schleife auf HTTP um
- WEBHOOK_URL und N8N_PROTOCOL=https müssen gesetzt sein. Andernfalls geht n8n davon aus, dass es über HTTP läuft, und der Browser kommt durcheinander.
- Grafana ist hinter Traefik nicht erreichbar
- Fügen Sie GF_SERVER_ROOT_URL=https://grafana.${DOMAIN} und GF_SERVER_SERVE_FROM_SUB_PATH=false zu seinem environment-Abschnitt hinzu.
- Stark steigende Latenz bei mehreren Benutzern
- OLLAMA_NUM_PARALLEL ist für den verfügbaren VRAM zu hoch eingestellt. Senken Sie den Wert je nach Grafikkarte auf 1 oder 2. Beobachten Sie ollama ps unter Last.
#Weiterführende Informationen
Ihr Stack läuft, wird überwacht und durch Backups gesichert. Drei naheliegende Wege, ihn weiter zu professionalisieren:
- Das RAG mit Ihren Dokumenten verbinden
- Der Leitfaden zu RAG mit ChromaDB und Mistral lässt sich problemlos auf Qdrant übertragen – dieselbe Logik für Embeddings und Chunking, eine andere Vektordatenbank.
- Geschäftliche Workflows automatisieren
- Der Leitfaden „Automatisieren mit n8n und Ollama“ beschreibt zehn konkrete Rezepte (E-Mail-Übersetzung, Lead-Klassifizierung, RSS-Zusammenfassung), die direkt Ihren Software-Stack nutzen.
- Compliance-Anforderungen abdecken
- Der Leitfaden zu lokalen LLMs und der DSGVO erläutert die gesetzlichen Pflichten (Verzeichnis, Aufbewahrungsdauer, Rechte der Nutzer), die für einen Einsatz im Unternehmen zu dokumentieren sind.
Haben Sie Feedback, einen Fehler entdeckt oder möchten Sie etwas präzisieren? Geben Sie uns Bescheid – so wird der Guide für alle besser.