RAGFlow mit Docker installieren: Enterprise-RAG-Engine für eigene Wissensdatenbanken
RAGFlow per Docker Compose auf einem eigenen Linux-Server betreiben: Dokumente mit OCR und Chunking erschließen, Passwörter und Ports absichern, Wissensdatenbanken anlegen, Updates und Backups durchführen.
Werbung Mit * markierte Links sind Werbelinks: Bei einem Kauf erhalten wir eine Provision, der Preis bleibt gleich. Als Amazon-Partner verdiene ich an qualifizierten Verkäufen. Mehr dazu

Wer eigene Dokumente datenschutzkonform mit einem KI-Sprachmodell durchsuchbar machen möchte, braucht mehr als ein einfaches Chat-Interface. RAGFlow von Infiniflow geht hier deutlich weiter: Die Plattform kombiniert Deep-Document-Understanding (PDF, Word, Excel, Bilder mit OCR), template-basiertes Chunking, Hybrid-Search über Elasticsearch und einen grafischen Agenten-Workflow-Editor zu einer vollständigen RAG-Pipeline. RAG (Retrieval-Augmented Generation) bedeutet: Das Sprachmodell beantwortet Fragen auf Basis passender Textabschnitte aus Ihren Dokumenten. RAGFlow läuft per Docker Compose auf einem eigenen Linux-Server, die Daten bleiben im Haus, und die Web-Oberfläche ist auch für Nicht-Entwickler bedienbar.
Voraussetzungen
- Betriebssystem: Linux x86_64 (AMD64) – empfohlen Ubuntu 22.04/24.04 LTS oder Debian 12. ARM64 (Apple Silicon, Raspberry Pi) wird offiziell nicht unterstützt.
- Docker Engine >= 24.0.0 und Docker Compose >= v2.26.1 – Installationsanleitung: Docker und Docker Compose auf Linux installieren.
- RAM: mindestens 16 GB, empfohlen 32 GB für den produktiven Betrieb.
- CPU: mindestens 4 Kerne, empfohlen 8+ Kerne.
- Speicher: mindestens 50 GB frei (SSD empfohlen); Elasticsearch und MinIO wachsen je nach Datenmenge erheblich.
- Internet: stabiler Zugang für den initialen Download (RAGFlow-Image allein rund 3,8 GB komprimiert, dazu Elasticsearch, MySQL, MinIO und Valkey).
- LLM-API-Key: z. B. von OpenAI, DeepSeek oder ein lokaler Ollama-Server – wird erst nach der Installation benötigt.
- Optional: einen Reverse Proxy (z. B. Traefik oder Nginx Proxy Manager) für HTTPS und eine eigene Domain.
Schritt 1: Kernel-Parameter setzen (Linux)
Elasticsearch benötigt einen erhöhten Wert für virtuelle Speicherbereiche. Ohne diese Anpassung bricht der Container beim Start sofort ab.
# Sofort wirksam (bis zum nächsten Reboot):
sudo sysctl -w vm.max_map_count=262144
# Dauerhaft persistent machen:
echo 'vm.max_map_count=262144' | sudo tee -a /etc/sysctl.confsysctl vm.max_map_count muss vm.max_map_count = 262144 zurückgeben. Auf Windows-Hosts mit Docker Desktop ist dieser Schritt nicht nötig – Docker Desktop setzt den Wert automatisch in der internen VM.
Schritt 2: Repo klonen und Projektordner vorbereiten
Die Compose-Konfiguration besteht aus zwei verknüpften Dateien (docker-compose.yml + docker-compose-base.yml), daher muss das vollständige Repo geklont werden – einzelne Dateien aus Drittquellen führen zu Konfigurationsdrift. Das Release-Tag sorgt dafür, dass entrypoint.sh und Compose-Dateien zur Image-Version passen.
# Repo klonen (ca. 50 MB, ohne Images):
git clone https://github.com/infiniflow/ragflow.git
# In das Docker-Verzeichnis wechseln und auf das Release-Tag festlegen:
cd ragflow/docker
git checkout v0.27.2
# .env-Vorlage kopieren:
cp .env .env.backupls ragflow/docker/ zeigt docker-compose.yml, docker-compose-base.yml, .env und weitere Konfigurationsdateien. Fehlen diese, den Clone wiederholen.
Schritt 3: Umgebungsvariablen in der .env anpassen
Die .env steuert alle sicherheitsrelevanten Einstellungen. Die Standard-Passwörter lauten infini_rag_flow, das Passwort des Systemadministrators admin@ragflow.io (ADMIN_DEFAULT_PASSWORD) lautet admin. Die Compose-Dateien veröffentlichen Elasticsearch (1200), MySQL (3306), MinIO (9000/9001) und Valkey (6379) auf allen Netzwerkschnittstellen; mit Standardwerten sind diese Dienste für jeden im Netzwerk offen. Passwörter vor dem ersten Start ändern und diese Ports per Firewall nach außen sperren.
# --- RAGFlow Version (stabil: v0.27.2) ---
RAGFLOW_IMAGE=infiniflow/ragflow:v0.27.2
# --- Dokumenten-Engine (Standard: Elasticsearch) ---
DOC_ENGINE=elasticsearch
STACK_VERSION=8.11.3
# --- Recheneinheit: cpu | gpu ---
DEVICE=cpu
# --- Sichere Passwörter setzen (PFLICHT!) ---
ELASTIC_PASSWORD=MeinSicheresESPasswort2026!
MYSQL_PASSWORD=MeinSicheresMySQL2026!
MINIO_USER=ragflow_admin
MINIO_PASSWORD=MeinSicheresMinIO2026!
REDIS_PASSWORD=MeinSicheresRedis2026!
ADMIN_DEFAULT_PASSWORD=MeinSicheresAdmin2026!
# --- Zeitzone (DACH) ---
TZ=Europe/Berlin
# --- Ports (Standardwerte beibehalten oder anpassen) ---
SVR_WEB_HTTP_PORT=80
SVR_HTTP_PORT=9380
ES_PORT=1200
MINIO_PORT=9000
MINIO_CONSOLE_PORT=9001
# --- RAM-Limit pro Container (Standard 8 GB) ---
# Bei Parsing-Abbrüchen auf 16 GB erhöhen:
MEM_LIMIT=8073741824
# --- Upload-Limit (Standard 1 GB) ---
MAX_CONTENT_LENGTH=1073741824
# --- Nutzerregistrierung (nach Admin-Setup auf 0 setzen) ---
REGISTER_ENABLED=1
# --- HuggingFace Mirror (bei eingeschränktem Internetzugang) ---
# HF_ENDPOINT=https://hf-mirror.comDie Beispielpasswörter oben sind Platzhalter: Setzen Sie eigene, zufällige Werte (z. B. openssl rand -base64 24).
grep -E '^[A-Z_]*PASSWORD=' .env darf keinen Wert infini_rag_flow oder admin mehr anzeigen. Der Befehl sollte nur die selbst gesetzten Passwörter ausgeben.
Schritt 4: Eckdaten im Überblick
| Parameter | Wert | Hinweis |
|---|---|---|
| Image | infiniflow/ragflow:v0.27.2 | Nur x86_64; GPU über DEVICE=gpu |
| Port 80 | Web-UI + nginx-Proxy | Hauptzugang Browser (SVR_WEB_HTTP_PORT), Admin-Oberfläche unter /admin |
| Port 9380 | REST-API (direkt) | Ohne nginx-Proxy |
| Port 9382 | MCP-Protokoll | KI-Agenten-Integration |
| Port 1200 | Elasticsearch HTTP | Extern 1200 → intern 9200 |
| Port 9000/9001 | MinIO S3-API / Konsole | Objektspeicher |
| Volume mysql_data | /var/lib/mysql | Named volume, PFLICHT persistieren |
| Volume es_data | /usr/share/elasticsearch/data | Kann sehr groß werden |
| Volume minio_data | /data | Alle hochgeladenen Dokumente |
| MEM_LIMIT | 8073741824 (8 GB) | Bei Parsing-Abbrüchen erhöhen |
| DOC_ENGINE | elasticsearch (Standard) | Alternativ: infinity, opensearch |
grep -E '^(RAGFLOW_IMAGE|SVR_WEB_HTTP_PORT|SVR_HTTP_PORT|DOC_ENGINE)=' .env zeigt die Werte aus der Tabelle bzw. Ihre bewusst geänderten Ports.
Schritt 5: Stack starten
Die Compose-Konfiguration bringt MySQL, Elasticsearch, MinIO und Valkey mit. Der erste Start dauert länger, weil alle Images heruntergeladen werden.
# Im Verzeichnis ragflow/docker/ ausführen:
docker compose up -d
# Echtzeit-Logs des RAGFlow-Kerns beobachten:
docker compose logs -f ragflow-cpuDie Initialisierung dauert typischerweise 2–5 Minuten. Der Stack ist betriebsbereit, wenn in den Logs Running on all addresses (0.0.0.0) erscheint.
docker compose psErwartete Ausgabe (gekürzt; der Projektname docker ergibt sich aus dem Verzeichnisnamen) – alle Container im Status Up, Elasticsearch, MySQL, MinIO und Valkey zusätzlich (healthy):
NAME IMAGE STATUS
docker-ragflow-cpu-1 infiniflow/ragflow:v0.27.2 Up
docker-es01-1 elasticsearch:8.11.3 Up (healthy)
docker-mysql-1 mysql:8.0.40 Up (healthy)
docker-minio-1 pgsty/silo:RELEASE.2026-08-06T00-00-00Z Up (healthy)
docker-redis-1 valkey/valkey:8 Up (healthy)API-Erreichbarkeit prüfen:
curl -s http://localhost:9380/api/v1/system/ping
# Erwartete Ausgabe: pongSchritt 6: Erst-Einrichtung im Browser
Für die tägliche Arbeit registrieren Sie ein normales Benutzerkonto. Die Systemverwaltung (Benutzer, Registrierung, Dienststatus) liegt in der Admin-Oberfläche unter /admin; dort melden Sie sich mit admin@ragflow.io und dem Wert aus ADMIN_DEFAULT_PASSWORD an.
- Browser öffnen:
http://<SERVER-IP>(Port 80 ist Standard) - Registrierungsformular ausfüllen: E-Mail, Passwort (normales Benutzerkonto)
- Nach dem Login: Settings › Model Providers aufrufen
- LLM-Anbieter wählen (z. B. OpenAI, DeepSeek) und API-Key eingeben
- Für lokale Modelle (Ollama, LM Studio): Basis-URL
http://host.docker.internal:<PORT>eintragen - Nach der Einrichtung in der
.envREGISTER_ENABLED=0setzen und Stack neu starten - Admin-Oberfläche
http://<SERVER-IP>/adminmitadmin@ragflow.ioaufrufen und prüfen, ob die Anmeldung mit Ihrem Passwort funktioniert
Nach dem Login ist das RAGFlow-Dashboard sichtbar. Unter Settings › Model Providers sollte der konfigurierte Anbieter mit grünem Status erscheinen. Eine Test-Abfrage in einem leeren Workspace bestätigt die LLM-Verbindung.
Schritt 7: Wissensdatenbank anlegen und Dokumente hochladen
Jede Wissensdatenbank (Knowledge Base) hat eine eigene Chunking-Strategie, also eine Regel, wie Dokumente in Abschnitte zerlegt werden.
- Im Dashboard Knowledge Base aufrufen und „Create Knowledge Base“ klicken
- Name, Beschreibung und Chunk Method wählen (z. B. „General“, „Q&A“, „Paper“, „Manual“ je nach Dokumenttyp)
- Dokumente hochladen (PDF, Word, Excel, PowerPoint, TXT, HTML, Markdown, Bilder mit OCR) – bis zu 1 GB pro Datei, 32 Dateien pro Batch
- Parsing starten – RAGFlow verarbeitet die Dokumente mit Deep-Document-Understanding (OCR, Tabellen- und Bildanalyse)
- Nach Abschluss des Parsings steht die Wissensdatenbank für Chat und Agenten-Workflows bereit
Im Dokument-Status wechselt die Anzeige von „Parsing“ auf „Done“. In den Logs ist kein Fehler zu sehen: docker compose logs ragflow-cpu | grep -i error sollte leer bleiben. Eine Testfrage im Chat über die Wissensdatenbank liefert eine Antwort mit Quellangaben.
Schritt 8: Updates und Backup
RAGFlow entwickelt sich schnell. Vor jedem Update eine Datensicherung anlegen – alle kritischen Daten liegen in den Named Volumes.
# Stack stoppen (ohne -v!), damit die MySQL-Dateien konsistent sind:
docker compose down
# Backup der Named Volumes (Präfix = Projektname, Standard docker_):
docker run --rm \
-v docker_mysql_data:/source:ro \
-v $(pwd)/backup:/backup \
alpine tar czf /backup/mysql_data_$(date +%Y%m%d).tar.gz -C /source .
# Update: Repo aktualisieren, neues Release-Tag auschecken,
# RAGFLOW_IMAGE in .env anpassen, dann:
git pull && git checkout -f v0.27.2
docker compose pull
docker compose up -d
# Logs nach Update prüfen:
docker compose logs -f ragflow-cpuEine systematische Backup-Strategie für Docker-Volumes: Docker Compose absichern: Secrets, Healthchecks und Non-Root.
Sichern Sie auf die gleiche Weise docker_minio_data (hochgeladene Dokumente) und docker_esdata01 (Suchindex).
Nach dem Update docker compose ps prüfen – alle Container im Status Up, die Datendienste (healthy). Die Web-Oberfläche unter Port 80 muss erreichbar sein und die neue Version unter Settings › System anzeigen.
Troubleshooting / Typische Fehler
- „max virtual memory areas vm.max_map_count [65530] is too low“
(Elasticsearch startet nicht):
vm.max_map_countnicht gesetzt oder Reboot hat ihn zurückgesetzt. Fix:sudo sysctl -w vm.max_map_count=262144– dauerhaft in/etc/sysctl.confeintragen.- Browser zeigt „network abnormal“ direkt nach dem Start
RAGFlow ist noch nicht vollständig initialisiert. Fix:
docker compose logs -f ragflow-cpubeobachten, bisRunning on all addresses (0.0.0.0)erscheint – erst dann den Browser öffnen.- Parsing bleibt bei ~90% stehen oder bricht ab
MEM_LIMITin der.envist zu niedrig. Fix: auf16073741824(16 GB) erhöhen, danndocker compose stop && docker compose up -d.- Elasticsearch-Container Status „unhealthy“ trotz laufendem Container
Häufig falsches
ELASTIC_PASSWORDoder fehlendesvm.max_map_count. Diagnose:docker compose logs es01.- „exec format error“ beim Starten (ARM64/Apple Silicon)
Es gibt keine offiziellen ARM64-Images. Das Image muss aus dem Quellcode selbst gebaut werden (
ragflow/docs/dev/build_docker_image).- „address already in use“ für Port 80
Ein anderer Webserver belegt Port 80. Fix:
SVR_WEB_HTTP_PORT=8080in der.envsetzen unddocker compose up -dneu starten.SVR_HTTP_PORTist der API-Port 9380 und bleibt unverändert.- HuggingFace-Embedding-Modelle werden nicht geladen
Eingeschränkter Internetzugang. Fix:
HF_ENDPOINT=https://hf-mirror.comin der.envsetzen, Dienste neu starten.- nginx-Fehler „ragflow.conf.python not found“
Einzelne Dateien wurden kopiert statt das komplette Repo zu klonen. Fix: vollständigen
git clonedurchführen.- GPU wird nicht erkannt (DEVICE=gpu)
nvidia-container-toolkitmuss auf dem Host installiert sein und Docker für GPU-Zugriff konfiguriert werden:nvidia-ctk runtime configure --runtime=docker.
Häufige Fragen
Wie lautet das Standard-Login nach der Installation?
Für die Admin-Oberfläche unter /admin gibt es das Konto admin@ragflow.io; das Passwort stammt aus ADMIN_DEFAULT_PASSWORD (Vorgabe admin, vor dem ersten Start ändern). Normale Benutzer registrieren sich beim ersten Aufruf von http://<HOST-IP>. Danach empfiehlt sich REGISTER_ENABLED=0 in der .env, um weitere Selbst-Registrierungen zu verhindern.
Wie ändere ich den Web-Port von 80 auf einen anderen Port?
In docker/.env den Wert SVR_WEB_HTTP_PORT=8080 (oder einen anderen freien Port) setzen. Anschließend docker compose stop && docker compose up -d. Der Zugriff erfolgt dann über http://<HOST-IP>:8080.
Wie verbinde ich RAGFlow mit einem lokalen Ollama-Modell?
Im Web-UI unter Settings › Model Providers den Anbieter „Ollama“ auswählen und die Basis-URL http://host.docker.internal:11434 eintragen (host.docker.internal zeigt auf den Docker-Host). Für LM Studio den Port anpassen. Mehr zu lokalen Modellen: Ollama und Open WebUI mit Docker – eigenes lokales KI-Sprachmodell ohne Cloud.
Kann ich die Dokumenten-Engine von Elasticsearch auf Infinity wechseln?
Ja: DOC_ENGINE=infinity in der .env setzen, dann docker compose down && docker compose up -d. Achtung: Bestehende Elasticsearch-Dokumente werden dabei nicht migriert. Infinity ist ressourcenschonender, ein offizieller ARM64-Support fehlt aber auch dort.
Wie groß wird die Installation ungefähr?
Das RAGFlow-Image ist rund 3,8 GB groß (komprimiert). Mit Elasticsearch-Index und MinIO-Dokumenten sollten Sie mindestens 50 GB SSD-Speicher einplanen.
Welche Dokumentformate werden unterstützt?
PDF, Word (.docx), Excel (.xlsx), PowerPoint (.pptx), TXT, HTML, Markdown, sowie Bilder mit OCR-Analyse. Tabellen und Layout erkennt RAGFlow per Deep-Document-Understanding.
Was ist der MCP-Endpunkt auf Port 9382?
Über das Model Context Protocol (MCP) binden andere KI-Agenten die RAGFlow-Wissensdatenbanken als Werkzeug ein. Port 9382 sollte nur intern oder über einen gesicherten Tunnel erreichbar sein.
Fazit
RAGFlow deckt mit Pipeline-Editor, MCP-Unterstützung, Deep-Document-Understanding und breiter LLM-Kompatibilität den kompletten RAG-Ablauf im Eigenbetrieb ab. Die Installation gelingt zuverlässig, wenn die Voraussetzungen stimmen: x86_64-Linux, mindestens 16 GB RAM, vm.max_map_count korrekt gesetzt und eigene Passwörter in der .env. Wer ein schlankes RAG-System ohne eigenen Vektor-Index sucht, findet in AnythingLLM eine leichtgewichtigere Alternative. Grundlagen zu Chunking und Reranking: RAG produktiv betreiben: Chunking, Hybrid-Search, Reranking und Antwortqualität messen.
Weiterführende Anleitungen und Quellen
- Docker und Docker Compose auf Linux installieren (Ubuntu/Debian): die Self-Hosting-Grundlage
- Ollama und Open WebUI mit Docker: eigenes lokales KI-Sprachmodell ohne Cloud betreiben
- AnythingLLM installieren (Docker): Lokale KI-Zentrale mit RAG-Workspaces und Ollama
- RAG produktiv betreiben: Chunking, Hybrid-Search, Reranking und Antwortqualität messen
- Docker Compose absichern: Secrets, Healthchecks, Non-Root und Read-Only für den Produktivbetrieb
- Traefik als Docker-Reverse-Proxy mit automatischem HTTPS einrichten
Offizielle Quellen: RAGFlow GitHub Repository (infiniflow/ragflow) – README, docker-compose.yml, .env-Referenz. RAGFlow Offizielle Dokumentation – Quickstart, Konfiguration, FAQ. RAGFlow auf Docker Hub – Image-Tags und Versionsübersicht.


