Nachdem ich in meinen vorherigen Beiträgen gezeigt habe, wie ihr Ollama, Open WebUI, ComfyUI, LLaMA Factory, vLLM und LM Studio auf dem Gigabyte AI TOP ATOM installiert, kommt jetzt eine weitere interessante Alternative für alle, die eine professionelle Chat-Oberfläche mit erweiterten Features wie RAG (Retrieval-Augmented Generation), Multi-User-Support und Plugin-System suchen: LibreChat ist eine Open-Source-Alternative zu ChatGPT mit umfangreichen Konfigurationsmöglichkeiten und Unterstützung für lokale Ollama-Modelle.

In diesem Beitrag zeige ich euch, wie ich LibreChat auf meinem Gigabyte AI TOP ATOM installiert und so konfiguriert habe, dass es mit dem bereits laufenden Ollama-Server zusammenarbeitet. Da das System auf der gleichen Plattform wie die NVIDIA DGX Spark basiert und die ARM64-Architektur (aarch64) mit NVIDIA Grace CPU nutzt, funktionieren die offiziellen Container hervorragend sofern man ein paar spezifische Anpassungen für die ARM-Architektur vornimmt. Denn ganz so einfach klappte es nicht aber mit meiner Anleitung hier sollte ihr alles in ca. 30 Minuten aufgesetzt haben. Von diesen 30 Minuten entfällt der größte Anteil auf das Herunterladen der Container-Images. So war es zumindest bei mir da ich kein ganz so schneller Internet habe.

Hinweis: Für meine Erfahrungsberichte hier auf meinem Blog habe ich den Gigabyte AI TOP ATOM von der Firma MIFCOM ausgeliehen bekommen.

LibreChat Gigabyte AI TOP ATOM

LibreChat Gigabyte AI TOP ATOM

Die Grundidee: Professionelle Chat-Oberfläche mit erweiterten Features

LibreChat ist eine vollständig selbst gehostete Alternative zu ChatGPT mit Funktionen wie RAG für Dokumentenintegration und Multi-User-Support. Das System besteht aus mehreren Containern: einem API-Server, MongoDB für die Datenbank, Meilisearch für die Suche und PostgreSQL/pgvector für die RAG-Funktionalität.

Das Besondere beim AI TOP ATOM: Docker Compose erkennt automatisch die aarch64-Architektur. Da MongoDB in der neuesten Version jedoch oft spezielle CPU-Instruktionen (AVX) erwartet, die auf ARM-Clustern zu Problemen führen können, zeige ich euch hier den Weg über die stabilere Version 6.0 für die DGX Spark Architektur.

Was ihr dafür braucht:

  • Einen Gigabyte AI TOP ATOM (oder vergleichbares Grace-System mit ARM64/aarch64 Architektur)
  • Ollama bereits installiert (siehe meinen vorherigen Blogpost)
  • Docker und Docker Compose
  • Terminal-Zugriff (SSH oder direkt)
  • Git zum Klonen des Repositorys
  • Mehrere Ollama-Modelle bereits heruntergeladen (z.B. ministral-3:14b, qwen3:4b, qwen3:30b-thinking, qwen3-coder:30b, deepseek-ocr:latest, gpt-oss:20b)

Phase 1: System-Voraussetzungen prüfen

Zuerst prüfen wir im Terminal, ob die Architektur und Docker korrekt bereitstehen:

Architektur prüfen: uname -m (sollte aarch64 ausgeben)
Docker prüfen: docker compose version

Phase 2: LibreChat Repository klonen

Wir erstellen ein Verzeichnis und laden den aktuellen Code von GitHub:

Befehl: mkdir -p ~/librechat && cd ~/librechat

Befehl: git clone https://github.com/danny-avila/LibreChat.git .

Phase 3: Verzeichnisse vorbereiten und Berechtigungen setzen (Wichtig!)

Dieser Schritt ist kritisch, um Permission-Fehler auf ARM-Systemen zu vermeiden!

Erstellt die benötigten Verzeichnisse:

Befehl: mkdir -p data/db data/meili logs images uploads

Setzt die korrekten Besitzrechte und Berechtigungen:

Befehl: sudo chown -R 1000:1000 data logs images uploads

Befehl: sudo chmod -R 775 data logs images uploads

Warum das wichtig ist: Ohne diese Berechtigungen können die MongoDB- und Meilisearch-Container nicht in die Datenverzeichnisse auf ARM-Systemen schreiben.

Phase 4: Umgebungsvariablen konfigurieren (.env)

Kopiert die Beispiel-Umgebungsdatei:

Befehl: cp .env.example .env

Sicherheitsschlüssel generieren:
Damit LibreChat startet, müssen wir die Keys in der .env füllen. Das geht am schnellsten so:

Befehl: sed -i "s/CREDS_KEY=.*/CREDS_KEY=$(openssl rand -hex 32)/" .env
Befehl: sed -i "s/CREDS_IV=.*/CREDS_IV=$(openssl rand -hex 16)/" .env
Befehl: sed -i "s/JWT_SECRET=.*/JWT_SECRET=$(openssl rand -hex 32)/" .env
Befehl: sed -i "s/JWT_REFRESH_SECRET=.*/JWT_REFRESH_SECRET=$(openssl rand -hex 32)/" .env

Tipp für den AI TOP ATOM: Setzt eure User-IDs in die .env, um Permission-Fehler zu vermeiden:
Befehl: echo "UID=$(id -u)" >> .env && echo "GID=$(id -g)" >> .env

Phase 5: Der ARM-Fix für MongoDB & Meilisearch

Hier kommt der wichtigste Teil für den AI TOP ATOM. Die Standard-Konfiguration von LibreChat nutzt MongoDB 8.0, was auf der Grace CPU (ARM64) oft zu Abstürzen führt. Wir stellen das System auf die stabilere Version 6.0 um.

Öffnet die docker-compose.yml:

Befehl: nano docker-compose.yml

Sucht den Abschnitt mongodb: und passt das Image sowie den User-Tag an:

  mongodb:
    container_name: chat-mongodb
    image: mongo:6.0  # WICHTIG: Version 6.0 für ARM-Stabilität
    restart: always
    user: "1000:1000" # Verhindert Permission-Errors
    volumes:
      - ./data/db:/data/db
    command: mongod --noauth

Gleiches gilt für Meilisearch. Stellt sicher, dass auch hier ein fester User definiert ist, damit die Suchindizes geschrieben werden können:

  meilisearch:
    container_name: chat-meilisearch
    image: getmeili/meilisearch:v1.12.3
    user: "1000:1000"
    environment:
      - MEILI_HOST=http://0.0.0.0:7700
      - MEILI_MASTER_KEY=${MEILI_MASTER_KEY}
    volumes:
      - ./data/meili:/meili_data

Wichtige Änderungen:

  • MongoDB Image von Standard (8.0) auf mongo:6.0 geändert
  • user: "1000:1000" zu beiden Services (MongoDB und Meilisearch) hinzugefügt
  • Dies stellt sicher, dass Container mit korrekten Berechtigungen auf ARM-Systemen laufen

Phase 6: Konfiguration für Ollama (librechat.yaml)

Wir kopieren die Beispiel-Konfiguration und passen sie an:

Befehl: cp librechat.example.yaml librechat.yaml
Befehl: nano librechat.yaml

Fügt unter endpoints: custom: eure Ollama-Modelle hinzu. Wichtig ist die baseURL:

endpoints:
  custom:
    # Ollama Local Models
    - name: 'Ollama'
      apiKey: 'ollama'
      baseURL: 'http://host.docker.internal:11434/v1/'
      models:
        default:
          - 'ministral-3:14b'
          - 'qwen3:4b'
          - 'qwen3:30b-thinking'
          - 'qwen3-coder:30b'
          - 'deepseek-ocr:latest'
          - 'gpt-oss:20b'
        fetch: true
      titleConvo: true
      titleModel: 'current_model'
      summarize: false
      summaryModel: 'current_model'
      forcePrompt: false
      modelDisplayLabel: 'Ollama'

Hinweis: host.docker.internal ist zwingend erforderlich, damit der Container den Ollama-Dienst auf dem Host erreicht.

Wichtige Konfigurationshinweise:

  • baseURL: Muss host.docker.internal statt localhost verwenden, wenn LibreChat in Docker läuft
  • apiKey: Auf ‚ollama‘ gesetzt (erforderlich, wird aber von Ollama ignoriert)
  • fetch: true: Entdeckt automatisch neue Modelle, die zu Ollama hinzugefügt wurden
  • titleModel: 'current_model': Verhindert, dass mehrere Modelle gleichzeitig geladen werden

Phase 7: Docker Compose Override-Datei erstellen

Die Standard-docker-compose.yml von LibreChat mountet die librechat.yaml nicht standardmäßig. Wir erstellen eine Override-Datei, um sie einzubinden:

Datei erstellen: docker-compose.override.yaml

# Docker Compose override file to mount librechat.yaml configuration
services:
  api:
    volumes:
      # Mount the librechat.yaml configuration file
      - ./librechat.yaml:/app/librechat.yaml

Warum das nötig war: Ohne diesen Mount konnte LibreChat die Konfigurationsdatei nicht lesen und zeigte den Fehler: ENOENT: no such file or directory, open '/app/librechat.yaml'

Phase 8: Ollama-Service verifizieren

Prüft, ob Ollama läuft und erreichbar ist:
Befehl: systemctl status ollama
Befehl: ollama list
Befehl: curl http://localhost:11434/api/tags

Phase 9: LibreChat starten

Nachdem wir die Pfade und Versionen korrigiert haben, starten wir die Container-Struktur neu. Docker Compose lädt nun automatisch die passenden ARM64-Images für die gewählten Versionen herunter:

Befehl: docker compose up -d

Prüft den Status nach ca. 20 Sekunden:

Befehl: docker compose ps

Wenn in der Spalte STATUS bei allen Containern (api, mongodb, meilisearch, rag_api, vectordb) ein freundliches Up steht, war die Installation erfolgreich.

Falls der Start anfangs fehlgeschlagen ist:
Falls die librechat.yaml nicht gemountet war, startet nach dem Erstellen der Override-Datei neu:
docker compose down
docker compose up -d

Phase 10: Unerwünschte Endpoints entfernen (Optional)

Falls ihr andere Provider (Groq, Mistral, OpenRouter, Helicone, Portkey) nicht benötigt, entfernt diese aus der librechat.yaml:

Datei bearbeiten:

Befehl:  nano librechat.yaml

Entfernt alle Custom-Endpoint-Konfigurationen außer Ollama aus dem endpoints.custom Abschnitt.

Neustart, um die Änderungen anzuwenden:
Befehl: docker compose restart api

Phase 11: Zugriff und erster Test

Öffnet im Browser: http://<IP-ADRESSE-ATOM>:3080 (oder http://localhost:3080). Erstellt den ersten Account (dieser wird automatisch Admin). Unter den Modellen findet ihr nun eure Ollama-Instanzen. Ein kurzer Test wie „Warum ist der Himmel blau?“ zeigt euch sofort die Power der lokalen GPU-Beschleunigung.

Troubleshooting Tipps

  • Permission Denied: Prüft, ob die Ordner data und logs wirklich dem User 1000 gehören (sudo chown -R 1000:1000 data logs images uploads).
  • MongoDB Loop: Falls MongoDB ständig neu startet, stellt sicher, dass ihr Version 6.0 in der YAML nutzt und keine alten Datenreste im data Ordner liegen.
  • Ollama Endpoint erscheint nicht: Prüft, ob die librechat.yaml korrekt gemountet ist. Logs prüfen mit docker compose logs api | grep -i ollama.
  • Container starten nicht: Prüft, ob alle Verzeichnisse existieren und die Berechtigungen korrekt sind. Löscht bei Bedarf alte Container und Volumes: docker compose down -v (Vorsicht: löscht Daten!)

Zusammenfassung & Fazit

LibreChat auf dem Gigabyte AI TOP ATOM ist eine extrem mächtige Kombination. Dank der 256GB Unified Memory der Grace Hopper Architektur (oder dem massiven VRAM eurer AI TOP Setups) könnt ihr auch riesige Modelle mit professioneller Oberfläche im Team nutzen. Die RAG-Funktionalität macht das System zudem zum idealen lokalen Wissensspeicher für sensible Dokumente.

Die wichtigsten Erfolgsfaktoren auf ARM-Systemen:

  1. MongoDB Version 6.0 statt 8.0 verwenden
  2. Verzeichnisberechtigungen vor dem Start korrekt setzen
  3. User-Tags in docker-compose.yml zu den Services hinzufügen
  4. Sicherstellen, dass alle benötigten Verzeichnisse mit korrekten Besitzrechten existieren

Geänderte/Erstellte Dateien:

  • librechat.yaml – Ollama-Endpoint-Konfiguration hinzugefügt, andere Provider entfernt
  • docker-compose.override.yaml – Erstellt, um Config-Datei zu mounten
  • docker-compose.yml – MongoDB auf Version 6.0 geändert und User-Tags für ARM-Stabilität hinzugefügt
  • .env – Sicherheitsschlüssel generiert und UID/GID hinzugefügt

Laufende Docker-Container:

  • LibreChat (api container) – Port 3080
  • MongoDB 6.0 (chat-mongodb) – ARM-stabile Version
  • Meilisearch (chat-meilisearch) – Mit korrekten User-Berechtigungen
  • PostgreSQL mit pgvector (vectordb)
  • RAG API (rag_api)

Viel Erfolg beim Experimentieren! Habt ihr LibreChat schon für RAG mit euren eigenen PDFs genutzt? Schreibt es mir in die Kommentare!