1. Ziel

Ein Container („RAG-API“) stellt eine Weboberfläche bereit, über die:

  • Dokumente hochgeladen werden (PDF/DOCX/TXT/HTML),

  • die Inhalte gechunked + embedded werden,

  • die Vektoren in Qdrant gespeichert werden,

  • Nutzer anschließend Fragen stellen können (RAG-Antwort mit Quellenangaben).

2. Überlegung zur  Architektur

Container/Services:

  • rag-api (FastAPI): Web-UI + REST-API (/upload, /ask, /evaluate/*, /health)

  • qdrant: Vektor-Datenbank

  • reranker: optionaler Re-Ranker für bessere Trefferqualität

  • ollama: LLM-Runtime (läuft separat im ai-chat Stack, aber via Netzwerk erreichbar)

Exponierte Ports (intern):

  • rag-api: 8080

  • reranker: 8090 (nur localhost)

  • qdrant: intern (keine externe Exposition nötig)

Externer Zugriff: über NGINX Reverse Proxy (z.B. https://homecpt/rag/…), nicht direkt auf Containerports.

3. Installation (Docker Compose)

  • /opt/RAG-Datenschutz/docker-compose.yml

  • /opt/RAG-Datenschutz/rag-api/ (FastAPI Code + Dockerfile)

  • /opt/RAG-Datenschutz/reranker/ (Reranker Code + Dockerfile)

  • /opt/RAG-Datenschutz/data/ (persistente Daten: Qdrant + State + Uploads/PDFs)

Die Compose-Datei definiert die Services und Volumes. Relevant für das Playbook sind v.a.:

  • build: ./rag-api (eigener API-Container)

  • volumes: für Persistenz (State/Uploads/Qdrant Storage)

  • ports: nur dort, wo benötigt

  • networks: Verbindung ins gemeinsame llm-net, damit rag-api Ollama per http://ollama:11434 erreicht

Warum so gewählt:

  • Persistenz: Index, Uploads, State müssen Reboots/Updates überleben.

  • Netz-Isolation: Qdrant nicht öffentlich, nur rag-api erreichbar.

  • Service-Kopplung: rag-api hängt im llm-net, um Ollama via Servicename zu erreichen.

4. Installation der Docker - Vorüberlegungen

4.1 Start eines Docker (Beispiel RAG-Datenschutz)

cd /opt/RAG-Datenschutz

docker compose up -d

docker compose ps

4.2 Nach Codeänderung

cd /opt/RAG-Datenschutz

docker compose build rag-api

docker compose up -d --force-recreate rag-api

4.3 Internes Dockernetzwerk

Damit alle Docker intern schnell und sauber kommunizieren können, habe ich ein Docker-Netz (llm-net) geschaffen

rag-api hängt im llm-net, damit OLLAMA_BASE_URL=http://ollama:11434 per DNS/Service-Name funktioniert.

Warum: kein Hardcoding von IPs, sauberer interner Service-Lookup.

5. Installation

5.1 Wenn noch alte Versionen bestehen dann:

sudo apt remove docker docker-engine docker.io containerd runc

5.2 Neue Docker einrichten

sudo apt update

sudo apt install ca-certificates curl gnupg -y

sudo install -m 0755 -d /etc/apt/keyrings

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \

  sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

echo \

  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \

  https://download.docker.com/linux/ubuntu \

  $(lsb_release -cs) stable" | \

  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

und installieren: Repository hinzufügen:

echo \

  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \

  https://download.docker.com/linux/ubuntu \

  $(lsb_release -cs) stable" | \

  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

und installieren 

sudo apt update

sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y

5.3 Starten und Autostart

sudo systemctl start docker

sudo systemctl enable docker

Ist alles da?

sudo systemctl status docker

5.4 NVIDIA GPU Runtime für LLM 

War bei mir schon vorhanden, wenn nicht, dann folgendes durchführen

5.4.1 Toolkit installieren

sudo apt install nvidia-container-toolkit -y

5.4.2 Docker konfigurieren

sudo nvidia-ctk runtime configure --runtime=docker

sudo systemctl restart docker

und Test:

docker run --rm --gpus all nvidia/cuda:12.2.0-base-ubuntu22.04 nvidia-smi

Achtung: Versionsnummer von cuda kann sich ändern.

5.4.3 Dockernetzerk aufziehen

Dazu habe in der Datei docker-composer.yml in jedem Docker ergänzt:

networks:

  llm-net:

    external: true

und Testen:

docker network ls

Sollte das Netzwerk nicht auftauchen, dann:

docker network create llm-net

Sollte es immer noch nicht vorhanden sein, dann:

docker network create llm-net

docker compose up -d

5.5 Prüfen ob GPU erkannt wird

nvidia-smi

Wenn nicht, dann:

sudo apt install nvidia-container-toolkit -y

sudo nvidia-ctk runtime configure --runtime=docker

sudo systemctl restart docker

und testen:

docker run --rm --gpus all nvidia/cuda:12.2.0-base-ubuntu22.04 nvidia-smi

6 Zusammenfassung

Docker wurde als Container-Orchestrierungsplattform installiert, um eine reproduzierbare, isolierte und versionierte Bereitstellung der KI- und RAG-Dienste zu ermöglichen. Das dedizierte Docker-Netzwerk llm-net wurde erstellt, um eine interne, dienstbasierte Kommunikation zwischen LLM (Ollama), RAG-API und Vektor-Datenbank (Qdrant) sicherzustellen, ohne direkte Exposition dieser Dienste auf Host-Ebene. Anfänglich vergaß ich die Datei x.yml abzuspeichern und neu zu erstellen. Dann zieht er das interne Netzwerk nicht ordentlich durch und es kommt zu Fehlern, die ich anfänglich nicht erkannte, da eigentlich kein Fehler vorlag. Es kommt immer wieder vor, dass die Docker die Verbindung zu cuda verlieren. Einfach Neustarten und es geht in der Regel wieder. Warum das so ist, habe ich bisher noch nicht herausgefunden.
without
https://digitaleserbe.net/wp-content/themes/hazel/
https://digitaleserbe.net/
#c1c1c1
style2
scroll
Laden...
/homepages/44/d18949504/htdocs/clickandbuilds/DigitalesErbeFimberger/
#
on
none
loading
#
Sort Gallery
on
no
off
off
off