User Tools

Site Tools


ai-deployment-deutsch

This is an old revision of the document!


Lokaler AI-Stack - Teil 1: Basis-Einrichtung (LM Studio + Open WebUI + ComfyUI)

Ziel: Die drei Kernkomponenten auf dem Nobara-System installieren und verbinden. Alles laeuft lokal, ohne Cloud-Zugang.

Komponenten und ihre Rollen:

Komponente Rolle Port Ausfuehrungsort
LM Studio laedt und serviert das LLM, stellt die lms-Kommandozeile zur Verfuegung 1234 AppImage auf dem Host
Open WebUI Chat-Oberflaeche, Benutzerkonten, Wissensdatenbank (RAG) 3000 Podman-Container
ComfyUI Bildgenerierung mit Z-Image 8188 Python-Virtualenv auf dem Host
Qwen3 27B (GGUF) die LLM-Modelldatei, ca. 16 GB - gespeichert in ~/.lmstudio

Wichtiges Prinzip: LM Studio und das Modell laufen auf dem Host. Open WebUI spricht nur ueber das Netzwerk (Port 1234) mit LM Studio. Das bedeutet: Beim Aktualisieren oder Ersetzen des LM-Studio-AppImages bricht die WebUI-Verbindung nicht ab - relevant sind nur die Modelldateien in ~/.lmstudio, und die sind kein Teil des AppImages.

1. Voraussetzungen

Voraussetzung Details Pruef-Befehl
GPU NVIDIA-Grafikkarte mit 16 bis 19 GB VRAM (fuer Qwen3 27B erforderlich) nvidia-smi
NVIDIA-Treiber aktueller, funktionierender Treiber nvidia-smi zeigt Karte, Treiber und CUDA-Version
RAM 32 GB empfehlenswert, 16 GB Minimum free -h
Festplattenspeicher ca. 25 GB frei fuer Modell, Container und Dokumente df -h /home
Podman installiert, wird fuer Open WebUI verwendet podman –version
Benutzerkonto rootai, Home-Verzeichnis /home/rootai whoami
Ports 1234, 3000 und 8188 muessen frei sein sudo lsof -i :1234 -i :3000 -i :8188

Falls nvidia-smi nicht gefunden wird, muss zuerst der Grafikkarten-Treiber installiert werden.

2. LM Studio installieren (AppImage)

Warum AppImage: Es ist eine einzige, in sich geschlossene Datei. Ein spaeteres Update bedeutet nur, die Datei zu ersetzen - Modelle, Einstellungen und Skripte sind nicht darin enthalten.

Schritt 2.1 - Herunterladen:

Das aktuellste LM-Studio-AppImage herunterladen und in /home/rootai/Downloads ablegen.

Schritt 2.2 - Ausfuehrbar machen:

  chmod +x /home/rootai/Downloads/lm-studio-*.AppImage

Schritt 2.3 - Starten (FUSE-Workaround fuer Nobara/Fedora):

Fedora-basierte Systeme aktivieren FUSE fuer normale Benutzer nicht standardmaessig. Daher kann das AppImage mit einem FUSE- oder Mount-Fehler scheitern. Falls das passiert:

  cd /home/rootai/Downloads
  ./lm-studio-*.AppImage --appimage-extract
  ./lm-studio-*/AppRun

Dies entpackt das AppImage in einen Ordner und startet es ueber AppRun. Das Verhalten ist exakt wie beim normalen AppImage.

Schritt 2.4 - Modell laden:

In LM Studio, Bereich “Modelle”: nach Qwen3 27B suchen und die GGUF-Variante (ca. 16 GB) herunterladen. Die Modelle werden in ~/.lmstudio abgelegt - dieses Verzeichnis ueberlebt jedes AppImage-Update.

Schritt 2.5 - lms global verlinken:

LM Studio stellt das lms-Kommando bereit (wird vom Skript start-ai.sh genutzt). Ein stabiler Symlink verhindert, dass Skripte vom exakten AppImage-Dateinamen abhaengen:

  sudo ln -sf /home/rootai/Downloads/lm-studio-*.AppImage /usr/local/bin/lms

Hinweis: Nach einem LM-Studio-Update (neue Versionsnummer im Dateinamen) diesen Symlink neu erstellen, sonst funktioniert lms nicht mehr. Das ist der einzige Teil des Stacks, der nach einem Update angepasst werden muss.

Schritt 2.6 - Pruefen:

  lms ls

Erwartet: Der Befehl laeuft und listet das Modell.

3. LM-Studio-Server starten und API testen

Schritt 3.1 - Server starten:

In LM Studio, Bereich “Developer”: Port 1234 setzen und “Start Server” klicken. (Das lms-Kommando laedt unten das Modell und startet den Server automatisch.)

Schritt 3.2 - Modell laden:

  lms load qwen/qwen3.8-27b

Warten, bis der Ladevorgang abgeschlossen ist (ca. 16 GB in den VRAM, dauert wenige Sekunden).

Schritt 3.3 - OpenAI-kompatible API testen:

  curl -s http://127.0.0.1:1234/v1/models

Erwartet: JSON-Ausgabe, die qwen3.8-27b enthaelt. Wenn das funktioniert, ist die LLM-Seite fertig.

4. Open WebUI (Podman-Container)

Schritt 4.1 - Image ziehen:

  podman pull ghcr.io/open-webui/open-webui

Schritt 4.2 - Container anlegen und starten:

  podman run -d --name open-webui -p 3000:8080 -v open-webui-data:/app/backend/data --restart unless-stopped ghcr.io/open-webui/open-webui

Erklaerung der Parameter:

* –name open-webui: fester Name, wird von start-ai.sh verwendet (podman restart open-webui) * -p 3000:8080: Host-Port 3000 wird auf Container-Port 8080 gemappt * -v open-webui-data:/app/backend/data: alle Einstellungen, Benutzer und die Wissensdatenbank liegen in diesem Volume und ueberleben Container-Updates * –restart unless-stopped: automatischer Neustart nach einem Reboot

Schritt 4.3 - Pruefen, ob er laeuft:

  podman ps | grep open-webui
  curl -sI http://127.0.0.1:3000 | head -1

Erwartet: eine HTTP-Zeile mit 200 oder 302.

Schritt 4.4 - Im Browser einrichten:

http://<server-ip>:3000 oeffnen und als Admin anmelden, dann:

1. Einstellungen, Verbindungen: OpenAI-API hinzufuegen

  • API-Schluessel: ein beliebiger, nicht leerer Wert (LM Studio ignoriert ihn)
  • Test: qwen3.8-27b muss in der Modellliste erscheinen
  • Warum host.docker.internal: Im Inneren des Containers zeigt localhost auf den Container selbst, nicht auf den Host

2. Einstellungen, Modelle: nomic-embed-text-v1.5 als Embedding-Modell setzen (Voraussetzung fuer RAG, Details in Teil 2)

Hinweis: Das Kunden-Benutzerkonto (artz) und die Modell-Einstellungen werden in Teil 2 eingerichtet.

5. ComfyUI (Z-Image)

Schritt 5.1 - Im Hintergrund starten mit Logfile:

  nohup ~/comfyui-env/bin/python ~/comfyui/main.py --listen --port 8188 >> ~/comfyui.log 2>&1 &

Schritt 5.2 - Pruefen:

  curl -s http://127.0.0.1:8188/system_stats

Erwartet: JSON mit System-Statistiken. Bei Problemen:

  tail -f ~/comfyui.log

Schritt 5.3 - In Open WebUI verbinden:

Einstellungen, Verbindungen: ComfyUI hinzufuegen.

* URL: http://host.docker.internal:8188 (gleicher Grund wie oben - Open WebUI laeuft im Container) * Modell: Z-Image

6. Autostart nach dem Neustart

Datei: /home/rootai/start-ai.sh (das vorhandene Skript, unveraendert)

  #!/bin/bash
  # warten, bis Systemdienste und der LM-Studio-Server hochgefahren sind
  sleep 15
  # das Qwen-Modell in LM Studio laden (startet auch den Server)
  lms load qwen/qwen3.8-27b
  # dem Modell ein paar Sekunden zur voelllaendigen Initialisierung geben
  sleep 10
  # Open WebUI neu starten, damit es sich wieder mit der LM-Studio-API verbindet
  podman restart open-webui

Ausfuehrbar machen:

  chmod +x /home/rootai/start-ai.sh

Die Reihenfolge ist wichtig: zuerst LM Studio, dann das Modell, dann Open WebUI.

Nach einem LM-Studio-Update: Nur Schritt 2.5 (lms-Symlink neu erstellen) ist noetig. Das Skript, der Container und die WebUI-Konfiguration bleiben unberuehrt.

7. Funktionstest

Alle drei Pruefungen ausfuehren:

  # 1. LM-Studio-API
  curl -s http://127.0.0.1:1234/v1/models
  # 2. Open WebUI erreichbar
  curl -sI http://127.0.0.1:3000 | head -1
  # 3. ComfyUI erreichbar
  curl -s http://127.0.0.1:8188/system_stats | head -c 100

Danach im Browser:

1. http://<server-ip>:3000 oeffnen und anmelden (als Admin) 2. Ein Chat mit qwen3.8-27b starten und eine einfache Frage stellen, ohne Wissensdatenbank 3. Erwartet: eine normale Antwort ohne Quellenangaben (Quellenangaben kommen mit RAG, siehe Teil 2)

8. Fehlerbehebung

Symptom Wahrscheinliche Ursache Loesung
AppImage startet nicht FUSE fuer den Benutzer nicht aktiviert (Fedora-Standard) –appimage-extract und AppRun verwenden (Schritt 2.3)
lms: command not found Symlink zeigt auf einen alten AppImage-Namen Schritt 2.5 mit dem neuen Pfad wiederholen
WebUI findet das Modell nicht falsche Basis-URL aus dem Container heraus http://host.docker.internal:1234/v1 verwenden, nicht localhost
podman restart schlaegt fehl falscher Container-Name echten Namen mit podman ps -a pruefen
Port bereits belegt ein alter Prozess haelt den Port sudo lsof -i :1234 (ebenso fuer 3000 und 8188), den Prozess beenden
Erste Antwort nach dem Neustart langsam Modell wird noch geladen auf den voelllaendigen Ladevorgang warten, Statusanzeige in LM Studio beobachten
ai-deployment-deutsch.1789568291.txt.gz · Last modified: by misa