Ein per Hand gestartetes ollama serve beendet sich, sobald die SSH-Session schließt, und überlebt keinen Reboot. Diese Anleitung installiert Ollama auf Ubuntu 24.04 LTS, konfiguriert den mitgelieferten systemd-Dienst über eine Drop-in-Datei und stellt die HTTP-API kontrolliert im Netz bereit.
Was ist Ollama?
Ollama ist ein lokaler Laufzeit-Server für große Sprachmodelle, der Modelle im GGUF-Format verwaltet, sie in RAM oder VRAM lädt und über eine HTTP-API auf Port 11434 für Clients bereitstellt.
Das Linux-Installationsskript legt neben der Binary auch einen Systembenutzer ollama und eine systemd-Unit an. Der Dauerbetrieb als Dienst unterscheidet sich damit deutlich vom manuellen Start im Terminal:
| Aspekt | ollama serve im Terminal |
systemd-Dienst |
|---|---|---|
| Start nach Reboot | Nein | Ja, über systemctl enable |
| Überlebt SSH-Logout | Nein | Ja |
| Logs | stdout im Terminal | journalctl -u ollama |
| Konfiguration | Shell-Variablen | Drop-in mit Environment= |
| Läuft als | dein Benutzer | Systembenutzer ollama |
Voraussetzungen
- Ubuntu 24.04 LTS (Server oder Desktop), systemd 255
- Ein Benutzerkonto mit
sudo-Rechten - Mindestens 8 GB RAM für 3B-Modelle, 16 GB für 7B- und 8B-Modelle in 4-Bit-Quantisierung
- Rund 20 GB freier Speicherplatz für die Modellgewichte
- Optional eine NVIDIA-GPU mit installiertem Treiber. Ohne GPU läuft die Inferenz auf der CPU, spürbar langsamer, aber funktional identisch
Als Testumgebung eignet sich eine skalierbare Cloud-VM mit dediziertem oder geteiltem CPU-Anteil, weil du RAM und Storage nachträglich erhöhen kannst, sobald ein größeres Modell dazukommt.
Prüfe vorab Architektur, Arbeitsspeicher und freien Platz:
$ uname -m
x86_64
$ free -g | awk '/Mem:/ {print $2" GB RAM"}'
$ df -h /varOllama unterstützt unter Linux x86_64 und arm64. Andere Architekturen bricht das Installationsskript mit einer Fehlermeldung ab.
Ollama installieren
Installationsskript prüfen
Das offizielle Skript unter https://ollama.com/install.sh schreibt nach /usr/local und legt einen Systembenutzer an. Lade es herunter und sieh es dir an, bevor du es ausführst:
$ curl -fsSL https://ollama.com/install.sh -o /tmp/ollama-install.sh
$ less /tmp/ollama-install.shRelevant sind drei Stellen: das Zielverzeichnis /usr/local/bin/ollama, die Funktion, die den Benutzer ollama anlegt, und der Block, der die Unit /etc/systemd/system/ollama.service schreibt.
Installation ausführen
$ sh /tmp/ollama-install.sh
>>> Installing ollama to /usr/local
>>> Creating ollama user...
>>> Adding ollama user to render group...
>>> Creating ollama systemd service...
>>> Enabling and starting ollama service...Das Skript ruft intern sudo auf und fragt bei Bedarf nach deinem Passwort. Anschließend prüfst du Version und Dienststatus:
$ ollama --version
ollama version is 0.12.3
$ systemctl is-active ollama
activeDie ausgegebene Versionsnummer richtet sich nach dem aktuellen Release und weicht bei dir ab. Wichtig ist nur, dass der Befehl ohne Fehler antwortet und der Dienst active meldet.
Wenn du kein Skript ausführen willst, funktioniert auch der manuelle Weg über das Release-Archiv. Die Unit-Datei musst du dann selbst anlegen:
$ curl -fsSL https://ollama.com/download/ollama-linux-amd64.tgz -o /tmp/ollama.tgz
$ sudo tar -C /usr -xzf /tmp/ollama.tgz
$ sudo useradd -r -s /bin/false -U -m -d /usr/share/ollama ollamaPassende Infrastruktur bei centron
Zum Mitmachen braucht es keine eigene Hardware: ccloud³ VMs mit vollem Root-Zugriff, stundengenau abgerechnet und in Sekunden startklar. Cloud-Server mieten →
Warum ist Ollama nach der Installation nur lokal erreichbar?
Ollama lauscht nach der Installation ausschließlich auf 127.0.0.1:11434, weil der Server keine Authentifizierung mitbringt: Jeder Client, der den Port erreicht, darf Modelle laden, löschen und beliebige Prompts ausführen.
Die Bindung an Localhost ist deshalb kein Versehen, sondern die einzige sichere Voreinstellung. Sobald du OLLAMA_HOST auf 0.0.0.0 änderst, brauchst du eine zweite Schutzschicht: eine Firewall-Regel auf Quell-IP-Ebene, ein privates Netz oder einen vorgelagerten Reverse-Proxy mit Basic Auth oder mTLS. Ein offener Port 11434 im Internet ist gleichbedeutend mit offenem Zugriff auf deine GPU.
Den systemd-Dienst konfigurieren
Die von Ollama ausgelieferte Unit wird bei jedem Update überschrieben. Konfiguriere den Dienst deshalb ausschließlich über eine Drop-in-Datei unter /etc/systemd/system/ollama.service.d/.
graph TD
A["systemd startet ollama.service"] --> B["Drop-in: override.conf"]
B --> C["ollama serve lauscht auf OLLAMA_HOST"]
D["Client-Anfrage an /api/generate"] --> C
C --> E{"Modell bereits im Speicher?"}
E -->|ja| F["Antwort direkt erzeugen"]
E -->|nein| G["Gewichte aus OLLAMA_MODELS lesen"]
G --> H{"GPU erkannt?"}
H -->|ja| I["Layer in den VRAM übertragen"]
H -->|nein| J["Berechnung über die CPU"]
I --> F
J --> F
F --> K{"OLLAMA_KEEP_ALIVE abgelaufen?"}
K -->|ja| L["Modell aus dem Speicher entfernen"]
K -->|nein| M["Modell bleibt geladen"]
Drop-in-Datei anlegen
$ sudo systemctl edit ollama.servicesystemctl edit öffnet einen Editor und legt beim Speichern /etc/systemd/system/ollama.service.d/override.conf an. Trage deine Werte zwischen den Kommentarmarkierungen ein:
[Service]
Environment="OLLAMA_HOST=0.0.0.0:11434"
Environment="OLLAMA_MODELS=/var/lib/ollama/models"
Environment="OLLAMA_KEEP_ALIVE=10m"
Environment="OLLAMA_MAX_LOADED_MODELS=2"
Environment="OLLAMA_NUM_PARALLEL=2"Die wichtigsten Variablen im Überblick:
| Variable | Standard | Wirkung |
|---|---|---|
OLLAMA_HOST |
127.0.0.1:11434 |
Bind-Adresse und Port des Servers |
OLLAMA_MODELS |
/usr/share/ollama/.ollama/models |
Ablageort der Modellgewichte |
OLLAMA_KEEP_ALIVE |
5m |
Verweildauer eines Modells im Speicher nach der letzten Anfrage |
OLLAMA_MAX_LOADED_MODELS |
3 pro GPU | Anzahl gleichzeitig geladener Modelle |
OLLAMA_NUM_PARALLEL |
automatisch | Gleichzeitige Anfragen pro Modell |
OLLAMA_KEEP_ALIVE=-1 hält ein Modell dauerhaft geladen. Das eliminiert die Ladezeit beim ersten Request, blockiert aber den belegten VRAM permanent.
Modellverzeichnis verschieben
Modelle sind groß: Ein 8B-Modell in Q4-Quantisierung belegt rund 4,7 GB, ein 70B-Modell über 40 GB. Wenn /usr auf einer knappen Root-Partition liegt, lege das Verzeichnis auf ein separates Volume und übergib den Pfad per OLLAMA_MODELS. Das Verzeichnis muss dem Dienstbenutzer gehören, sonst startet der Server mit einem Rechtefehler:
$ sudo mkdir -p /var/lib/ollama/models
$ sudo chown -R ollama:ollama /var/lib/ollama
$ sudo chmod 755 /var/lib/ollamaLiegt das Volume auf zusätzlichem Blockspeicher, prüfe vor dem Umzug, ob der Mount in /etc/fstab eingetragen ist. Fehlt der Eintrag, ist das Verzeichnis nach dem nächsten Reboot leer und Ollama lädt jedes Modell erneut herunter.
Zugriff begrenzen
Gib Port 11434 nur für die Quellen frei, die ihn tatsächlich brauchen:
$ sudo ufw allow from 10.0.0.0/24 to any port 11434 proto tcp
$ sudo ufw reload
$ sudo ufw status numberedDanach lädst du die Unit-Definitionen neu und startest den Dienst:
$ sudo systemctl daemon-reload
$ sudo systemctl restart ollama
$ systemctl show ollama --property=EnvironmentDer letzte Befehl gibt die effektiv gesetzten Variablen aus. Erscheint dort noch der alte Wert, wurde das Drop-in nicht eingelesen.
Modell laden und ausführen
ollama pull spricht die lokale API an. Den Download schreibt der Server-Prozess, also landen die Dateien automatisch unter dem in OLLAMA_MODELS gesetzten Pfad. Du brauchst dafür keine Root-Rechte:
$ ollama pull llama3.2:3b
$ ollama list
NAME ID SIZE MODIFIED
llama3.2:3b a80c4f17acd5 2.0 GB 9 seconds agoEin interaktiver Test im Terminal, beenden mit /bye:
$ ollama run llama3.2:3b "Nenne drei journalctl-Optionen für Live-Logs."Derselbe Aufruf über die HTTP-API, so wie ihn eine Anwendung absetzen würde:
$ curl -s http://localhost:11434/api/generate \
-d '{"model":"llama3.2:3b","prompt":"Was macht systemctl daemon-reload?","stream":false}' \
| jq -r '.response'Ollama stellt zusätzlich einen OpenAI-kompatiblen Endpunkt unter /v1/chat/completions bereit. Bestehende Clients funktionieren damit, wenn du die Base-URL auf http://<server-ip>:11434/v1 setzt und einen beliebigen API-Key-String mitgibst.
Verifikation
Vier Prüfungen zeigen, dass Setup und Dauerbetrieb stimmen:
$ systemctl is-enabled ollama
enabled
$ curl -s http://localhost:11434/api/tags | jq -r '.models[].name'
llama3.2:3b
$ ollama ps
NAME ID SIZE PROCESSOR UNTIL
llama3.2:3b a80c4f17acd5 3.5 GB 100% GPU 9 minutes from now
$ sudo rebootDie Spalte PROCESSOR in ollama ps ist der schnellste Hinweis auf die tatsächliche Ausführungsart. Steht dort 100% CPU, obwohl eine GPU verbaut ist, greift der Abschnitt Troubleshooting. Nach dem Reboot muss systemctl is-active ollama erneut active melden, ohne dass du etwas startest.
Troubleshooting
curl: (7) Failed to connect to port 11434
Der Dienst läuft nicht oder lauscht auf einer anderen Adresse. Prüfe beides:
$ systemctl status ollama --no-pager
$ sudo ss -tlnp | grep 11434
$ journalctl -u ollama -n 50 --no-pagerZeigt ss nur 127.0.0.1:11434, obwohl du 0.0.0.0 gesetzt hast, wurde das Drop-in nicht geladen. Kontrolliere den Dateinamen: Er muss auf .conf enden.
Error: llama runner process has terminated
Meist fehlt Arbeitsspeicher. Der Kernel beendet den Prozess über den OOM-Killer, sichtbar in dmesg:
$ sudo dmesg -T | grep -i "out of memory"Wähle ein kleiner quantisiertes Modell (:q4_K_M statt :q8_0) oder erhöhe den RAM der Instanz.
Modell läuft auf der CPU, obwohl eine NVIDIA-GPU vorhanden ist
Ollama erkennt die GPU nur, wenn der Treiber vor dem Dienststart geladen war:
$ nvidia-smi
$ sudo ubuntu-drivers install
$ sudo reboot
$ journalctl -u ollama | grep -i "inference compute"Die Zeile mit inference compute nennt das erkannte Gerät und dessen VRAM. Fehlt sie komplett, sieht Ollama keine kompatible GPU.
permission denied beim Schreiben der Modelle
Das über OLLAMA_MODELS gesetzte Verzeichnis gehört nicht dem Dienstbenutzer. Korrigiere Eigentümer und Rechte mit sudo chown -R ollama:ollama /var/lib/ollama und starte den Dienst neu.
Fazit
Ollama läuft auf Ubuntu 24.04 nach der Installation bereits als systemd-Dienst. Die eigentliche Arbeit steckt in der Drop-in-Datei: OLLAMA_HOST entscheidet über die Erreichbarkeit, OLLAMA_MODELS über den Speicherort und OLLAMA_KEEP_ALIVE über die Latenz der ersten Anfrage. Setze OLLAMA_HOST=0.0.0.0 nur zusammen mit einer Firewall-Regel oder einem authentifizierenden Reverse-Proxy, denn die API selbst prüft keine Zugangsdaten.
Weiterlesen
- Lokales Coding-Modell mit Ollama in der IDE nutzen
- Die Ollama-API aus eigenen Anwendungen ansprechen
- Ollama im Docker-Container betreiben
- Ollama im Netzwerk freigeben: Port, Bind-Adresse und Absicherung
- Ollama, LM Studio oder llama.cpp: Welches Werkzeug wofür?
- Ollama mit MCP-Servern verbinden: Werkzeuge für lokale Modelle
- Ollama-Modelle verwalten: aktualisieren, aufräumen, Speicher sparen
- Open WebUI als Oberfläche für Ollama einrichten
- Was ist Ollama? Funktionsweise, Modelle und Einsatzgebiete
Testen Sie Ihr Setup auf ccloud³
Registrieren Sie sich in der ccloud³ und erhalten Sie 200 € Startguthaben für Ihr Projekt – z. B. für eine PostgreSQL-VM mit automatischen Backups.