Der Chat läuft komplett auf diesem Mac mini, nicht in der Cloud. Jedes Gerät im Schul-WLAN kann ihn im Browser öffnen, solange in Open WebUI keine Cloud-API eingetragen ist.
Diese drei Regeln gelten immer
Das Sprachmodell rechnet auf dem MacOllama oder llama.cpp läuft nativ mit Metal (Apples GPU-Beschleunigung). Nie in Docker auf diesem Rechner, sonst fehlt die GPU.
Nur die Oberfläche darf ins WLANOpen WebUI ist über Port 8080 (uv) oder 3000 (Docker) erreichbar. Ollama bleibt auf 127.0.0.1, also nur für diesen Mac selbst.
Immer nur eine Engine zur ZeitOllama und llama.cpp nie gleichzeitig mit demselben großen Modell laden, sonst wird der Arbeitsspeicher knapp.
So läuft eine Anfrage durchs System
1. Schul-WLANEin Laptop oder Tablet im Schulnetz öffnet die Chat-Adresse im Browser.
2. Open WebUIÜbernimmt Anmeldung, Chatverlauf und Modellwahl. Rechnet selbst nichts, sondern reicht die Frage weiter.
3. Ollama auf diesem MacLädt das Sprachmodell, erzeugt die Antwort und schickt sie zurück. Nur über localhost erreichbar, nie direkt aus dem WLAN.
i
Wenn unklar ist, welcher Weg passt: zwei Fragen unter Weg wählen. Der Alltagspfad ohne Docker steht unter Einfacher Chat.
Was wir bewusst nicht nutzen
Image open-webui:ollamaPackt Ollama in ein Linux-Image. Auf dem Mac läuft es dann auf der CPU statt auf der GPU, also deutlich langsamer.
llama.cpp in DockerGleiches Problem: Der Container kommt nicht an Metal heran, die GPU bleibt ungenutzt.
LM Studio als SchulserverGut zum Ausprobieren am eigenen Rechner, aber keine App für Dauerbetrieb ohne Aufsicht.
Stand 17. September 2026. Inhalt aus den Anleitungen und der Abwägung im Repo „Lokales RAG System“.
Entscheidung
Welcher Weg?
Zwei Fragen. Danach steht Inferenz und Oberfläche fest. Du richtest nur einen UI-Weg und eine Engine ein.
Dokumente in Open WebUI hochladen braucht kein Docker und kein Qdrant. Qdrant lohnt bei viel Material. Authentik lohnt bei zentralen Schul-Accounts, nicht bei drei lokalen Logins.
Hardware
Was der M4 trägt
Unified Memory ist nicht nachrüstbar. Sobald Modell plus Kontext den RAM sprengen, schreibt macOS auf die SSD. Unterrichtstauglich ist das nicht.
Du brauchst einen Mac mit Apple Silicon, Admin-Rechte, eine feste IPv4-Adresse im Schulnetz und einen Passwortmanager oder eine andere sichere Ablage für den Geheimschlüssel. Keine Passwörter ins Git.
1
Programme → Dienstprogramme → Terminal. Den $ vor Befehlen nicht mitkopieren.
2
uname -m
Erwartet: arm64. x86_64 ist Intel, diese Anleitung gilt dann nicht.
3
Empfohlen: ollama.com/download, App nach Programme ziehen, einmal starten. Oder:
curl -fsSL https://ollama.com/install.sh | sh
Nur ausführen, wenn du ollama.com vertraust. Der Dienst lauscht auf Port 11434.
4
curl http://127.0.0.1:11434/api/tags
JSON ist gut, oft {"models":[]}. „connection refused“: App Ollama starten.
5
Geräte im WLAN sollen Open WebUI sehen, nicht Ollama. In der App prüfen, dass der Dienst nicht im Netz hängt.
launchctl setenv OLLAMA_HOST 127.0.0.1:11434
Ollama vollständig beenden (Quit) und neu starten. Von einem anderen Gerät darf http://<MAC-IP>:11434 nicht gehen.
In der Ollama-App „Launch at Login“ einschalten. Erwartet bei plutil: OK.
16
IP unter Systemeinstellungen → Netzwerk, dann auf dem Lehrer-Laptop http://10.0.0.40:8080 (deine Adresse). Zweiten Account nutzen, nicht den Admin-Alltagschat. Firewall darf Open WebUI, nicht Port 11434.
Wenn alles läuft
Auf dem Mac: http://127.0.0.1:8080
Im WLAN: http://<IP>:8080
http://<IP>:11434 von außen schlägt fehl
Nach Ab- und Anmelden läuft der Chat ohne Terminal
Kein Image-Tag ollama und kein open-webui:ollama. Das packt die Engine in die Linux-VM, Metal fällt aus.
Browser → Mac Port 3000landet im Container auf Port 8080 (Open WebUI)
Open WebUI → host.docker.internal:11434das ist Ollama auf dem Mac, nicht im Container
1
Apple-Silicon-Build von docker.com. Warten auf „Engine running“.
docker version
2
Schritte 3–6 der einfachen Anleitung müssen stehen.
curl http://127.0.0.1:11434/api/tags
Ollama möglichst auf 127.0.0.1 lassen. Schlägt die Container-Verbindung fehl: Ollama kurz auf 0.0.0.0, Firewall so, dass nur dieser Mac Port 11434 sieht.
3
openssl rand -hex 32
4
cd "/Users/DEIN_USER/Projekte/Lokales RAG System"
mkdir -p data/m4/open-webui
Anführungszeichen wegen des Leerzeichens im Pfad. Ohne Repo: beliebiger Ordner, Volume in Compose anpassen.
5
Datei infra/compose/m4/phase-01/compose.yaml. Schlüssel nicht committen.
Warten auf „Application startup complete“. Ctrl+C beendet nur die Log-Ansicht.
7
http://127.0.0.1:3000, Schulnetz http://<IP>:3000. Nicht 8080, der Port existiert nur im Container. Erster Nutzer ist Admin.
8
Falls keine Modelle: Admin → Connections → http://host.docker.internal:11434. Nicht 127.0.0.1 im Container, das wäre der Container selbst.
9
Docker Desktop: Start when you log in. Ollama: Start bei Anmeldung. Compose per LaunchAgent, der kurz wartet und dann docker compose … up -d ruft (siehe Phase-1-Autostart im Repo).
Wechsel von uv zu Docker
Läuft Open WebUI schon per uv und soll auf diesen Docker-Weg umziehen: zuerst Open WebUI stoppen, dann die Daten in den neuen Ordner kopieren. Denselben WEBUI_SECRET_KEY auch in der Compose-Datei setzen.
rsync -a "$HOME/.open-webui/" "/Users/DEIN_USER/Projekte/Lokales RAG System/data/m4/open-webui/"
llama-server spricht dieselbe Schnittstelle wie die OpenAI-API, deshalb kommt der Eintrag unter „OpenAI“, nicht unter „Ollama“. Der API-Key wird oft ignoriert, das Feld muss aber trotzdem gefüllt sein.
5
Datei z. B. local.schule.llamaserver.plist. Argumente einzeln: Pfad zu llama-server, -m, GGUF-Pfad, --host, 127.0.0.1, --port, 8081, --n-gpu-layers, 999.
Eingebaute Mini-UI von llama-server nicht ins LAN hängen. --host 127.0.0.1 belassen.
Zurück zu Ollama
llama-server beenden (Ctrl+C oder LaunchAgentbootout). Ollama-App starten. In Open WebUI wieder http://127.0.0.1:11434 (Docker: host.docker.internal:11434).
Nach der Einrichtung
Alltag
Update bewusst, Daten sichern, Dienst stoppen. Lehrer bekommen die Chat-URL, nicht Port 11434.
Sehr langsamOllama versehentlich im Container, kein Metal bei llama.cpp, oder Modell zu groß (Swap).
Fehler 500 (Docker)Oft Rechte am Datenordner.
Leere llama.cpp-ListeURL ohne /v1, oder im Container localhost statt host.docker.internal.
Wirre Antworten (llama.cpp)Falsches Chat-Template. Anderes GGUF oder --chat-template der Version.
✓
Kontrolle Inferenz: auf dem Mac ollama ps zeigt das Modell, nicht nur der Container. llama-server-Log erwähnt Metal. Port 8081 bzw. 11434 vom Lehrer-Laptop aus zu.
Nachschlagen
Glossar
Kurzerklärungen zu den Fachbegriffen aus diesem Handbuch. Jeder Eintrag sagt, was der Begriff bedeutet und warum er hier überhaupt vorkommt.
Ausbau-Themen
SSO (Single Sign-on)
Einmal anmelden und danach automatisch bei mehreren Diensten eingeloggt sein, statt für jeden Dienst ein eigenes Passwort zu brauchen. Kommt hier ins Spiel, wenn neben dem Chat weitere Schul-Dienste dieselbe Anmeldung nutzen sollen.
Authentik
Ein Open-Source-Programm, das zentrale Logins (SSO) für mehrere Dienste verwaltet. Lohnt sich erst, wenn mehr als der reine Chat über gemeinsame Schul-Accounts laufen soll.
Proxy / Reverse Proxy
Ein Server, der Anfragen aus dem Netz entgegennimmt und an den passenden Dienst dahinter weiterleitet. Wird interessant, sobald Chat, Authentik und weitere Dienste über eine gemeinsame Adresse erreichbar sein sollen.
Qdrant
Eine Vektordatenbank, die Textabschnitte durchsuchbar macht, etwa um eigene Dokumente im Chat wiederzufinden. Lohnt sich erst bei größeren Materialmengen, für den reinen Chat nicht nötig.
RAG (Retrieval-Augmented Generation)
Der Chat durchsucht vorher eigene Dokumente und lässt die Fundstellen in die Antwort einfließen, statt nur aus dem trainierten Wissen zu antworten. Namensgeber dieses Projekt-Repos, für den Grundchat aber kein Muss.
Programme und Werkzeuge
Ollama
Eine App, die Sprachmodelle auf dem Mac lädt und Chat-Anfragen beantwortet. Der Standardweg in diesem Handbuch, läuft nativ mit Metal statt in Docker.
Open WebUI
Die Chat-Oberfläche im Browser mit Anmeldung, Verlauf und Modellwahl. Rechnet selbst nichts, sondern reicht Fragen an Ollama oder llama-server weiter.
llama.cpp / llama-server
Eine Alternative zu Ollama zum Ausführen von Sprachmodellen, gestartet über das Programm llama-server. Sinnvoll bei einer bestimmten GGUF-Datei oder Start-Flags, die Ollama nicht bietet.
uv
Ein schnelles Python-Werkzeug, mit dem sich Open WebUI ohne Docker installieren und starten lässt. Der einfachere der beiden Einrichtungswege in diesem Handbuch.
Docker
Ein Programm, das Anwendungen in abgeschlossenen Containern laufen lässt. Hier nur für die Oberfläche Open WebUI gedacht, nie für die Inferenz, weil ein Container in diesem Setup nicht an Metal herankommt.
Homebrew
Ein Paketmanager für macOS, mit dem sich Programme wie llama.cpp per Terminal installieren lassen. Manche vorgebauten Pakete (Bottles) fehlt dabei die Metal-Unterstützung.
LaunchAgent
Eine macOS-Konfigurationsdatei (.plist), die einen Dienst beim Login automatisch startet und am Laufen hält. Sorgt dafür, dass Open WebUI oder llama-server einen Neustart des Mac übersteht.
Compose (Docker Compose)
Eine Konfigurationsdatei, mit der mehrere Docker-Container zusammen gestartet werden. Beschreibt hier zum Beispiel Open WebUI mit Port, Umgebungsvariablen und Datenordner.
Netzwerk und Technik
localhost / 127.0.0.1
Die Adresse, unter der ein Dienst nur für den eigenen Rechner erreichbar ist, nicht für andere Geräte im Netz. Ollama bleibt hier absichtlich, damit niemand im Schul-WLAN direkt darauf zugreift.
Port
Eine Art Zimmernummer für Dienste auf demselben Rechner, zum Beispiel 8080 für Open WebUI oder 11434 für Ollama. Über den Port weiß der Rechner, welches Programm eine Anfrage bekommen soll.
host.docker.internal
Eine besondere Adresse, über die ein Docker-Container den Mac erreicht, auf dem er läuft. Nötig, damit Open WebUI im Container die Ollama-App auf dem Mac findet.
Volume
Ein Ordner auf dem Mac, den Docker in einen Container einblendet, damit Daten den Container-Neustart überleben. Hier liegen zum Beispiel die Open-WebUI-Daten außerhalb des Containers.
WEBUI_SECRET_KEY
Ein selbst erzeugter Geheimwert, mit dem Open WebUI Sitzungen verschlüsselt. Ohne festen Wert wären nach jedem Neustart alle Nutzer abgemeldet.
Rund ums Sprachmodell
Inferenz
Der Rechenschritt, bei dem ein geladenes Sprachmodell aus einer Eingabe eine Antwort erzeugt. Läuft in diesem Setup immer nativ auf dem Mac, nie in Docker.
Engine
Das Programm, das die Inferenz übernimmt, hier entweder Ollama oder llama.cpp. Immer nur eine Engine gleichzeitig mit einem großen Modell laden, sonst wird der Arbeitsspeicher knapp.
Metal
Apples Schnittstelle, über die Sprachmodelle die GPU des Mac nutzen. Funktioniert nur nativ auf macOS, nicht innerhalb eines Docker-Containers.
GGUF
Ein Dateiformat für Sprachmodelle, das llama.cpp lädt. Wichtig, wenn eine bestimmte Modelldatei oder Quantisierung außerhalb des Ollama-Katalogs gebraucht wird.
Quantisierung (z. B. Q4_K_M)
Ein Verfahren, das ein Sprachmodell verkleinert, indem es Zahlenwerte gröber speichert. Q4_K_M ist in diesem Handbuch der übliche Kompromiss zwischen Speicherbedarf und Antwortqualität.
Kontext / Kontextlänge
Wie viel Text aus Frage und Verlauf ein Sprachmodell auf einmal berücksichtigen kann. Eine längere Kontextlänge braucht spürbar mehr Arbeitsspeicher.
KV-Cache
Zwischengespeicherte Rechendaten, die ein Sprachmodell während des Antwortens wiederverwendet. Wächst mit der Kontextlänge und lässt sich bei llama-server gezielt einstellen.
tok/s (Tokens pro Sekunde)
Ein grobes Tempo-Maß dafür, wie schnell ein Modell Text erzeugt, ein Token ist ungefähr ein Wortstück. Wenige tok/s fühlen sich im Chat spürbar zäh an.
GPU-Offload (--n-gpu-layers)
Wie viele Schichten des Modells auf die GPU statt auf die CPU ausgelagert werden. Der Wert 999 in diesem Handbuch bedeutet: möglichst alles auf die GPU legen.
Chat-Template
Das Format, in dem Fragen und Antworten an ein Sprachmodell übergeben werden. Passt es nicht zum Modell, wirken Antworten wirr oder abgehackt.
Unified Memory
Der gemeinsame Arbeitsspeicher, den sich CPU und GPU im Mac mini M4 teilen. Er ist fest verbaut und lässt sich nachträglich nicht aufrüsten.
Swap (Auslagerung)
Wenn der Arbeitsspeicher voll ist, lagert macOS Daten auf die SSD aus. Für ein Sprachmodell bedeutet das einen deutlichen Tempoverlust.