This is an old revision of the document!
Table of Contents
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
- Basis-URL: http://host.docker.internal:1234/v1
- 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 |
