Kapitel 18/Free Rohtext.md hinzugefügt
This commit is contained in:
844
Kapitel 18/Free Rohtext.md
Normal file
844
Kapitel 18/Free Rohtext.md
Normal file
@@ -0,0 +1,844 @@
|
|||||||
|
# Kapitel 18 – Ollama (Lokale KI-Inferenz)
|
||||||
|
|
||||||
|
## Einleitung
|
||||||
|
|
||||||
|
Künstliche Intelligenz ist längst kein Zukunftsthema mehr – sie ist ein Werkzeug.
|
||||||
|
Für viele Aufgaben im Homelab, in der Automatisierung oder Content-Produktion kann eine lokal laufende KI enorme Vorteile bringen:
|
||||||
|
Antworten in Echtzeit, volle Kontrolle über Daten und keine Abhängigkeit von Cloud-Diensten.
|
||||||
|
|
||||||
|
**Ollama** ist eine Open-Source-Plattform, die genau das ermöglicht.
|
||||||
|
Sie erlaubt es, Sprachmodelle (z. B. Llama 3, Mistral, Phi oder Gemma) direkt auf deinem eigenen System auszuführen –
|
||||||
|
entweder CPU-basiert oder mit GPU-Beschleunigung.
|
||||||
|
|
||||||
|
Damit erhältst du eine **lokale Chat- und Inferenz-Engine**, die du in Tools wie n8n, Affine, deinem Kontrollzentrum oder eigenen Apps einsetzen kannst.
|
||||||
|
Kein API-Key, keine Kosten, kein Tracking – volle Datensouveränität.
|
||||||
|
|
||||||
|
👉 **Screenshot geeignet:** UCC-Dashboard mit markiertem „Ollama“-Container, sichtbar neben n8n und Nextcloud
|
||||||
|
|
||||||
|
> [!NOTE]
|
||||||
|
> Ollama ist kein einzelnes KI-Modell, sondern eine Laufzeitumgebung.
|
||||||
|
> Sie stellt einen lokalen API-Server bereit, über den du beliebige Modelle laden, verwalten und abfragen kannst.
|
||||||
|
> Die Modelle selbst sind eigenständige Dateien und können unabhängig voneinander installiert oder entfernt werden.
|
||||||
|
|
||||||
|
Nach diesem Kapitel hast du eine vollständig funktionsfähige lokale KI-Umgebung,
|
||||||
|
die du direkt über die Kommandozeile, per HTTP-Request oder in anderen UCC-Diensten ansprechen kannst.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Voraussetzungen & Ressourcen
|
||||||
|
|
||||||
|
Ollama lässt sich auch auf schwächerer Hardware stabil betreiben – entscheidend ist die richtige Modellauswahl.
|
||||||
|
Da dein Host ein älterer Office-PC ist, liegt der Fokus auf effizientem Ressourceneinsatz statt maximaler Leistung.
|
||||||
|
|
||||||
|
### Container-Ressourcen
|
||||||
|
|
||||||
|
* **CPU:** 4 vCPU
|
||||||
|
Ollama nutzt Multithreading, daher sind vier virtuelle Kerne sinnvoll.
|
||||||
|
Weniger funktioniert, verlängert aber die Antwortzeiten.
|
||||||
|
|
||||||
|
* **RAM:** 8 GB
|
||||||
|
Für leichte Modelle wie Phi-3 Mini, Gemma 2B oder Mistral 7B in Q4-Quantisierung ausreichend.
|
||||||
|
Wichtig ist, dass nie mehrere große Modelle gleichzeitig geladen werden.
|
||||||
|
|
||||||
|
* **Speicherplatz:** 50 GB
|
||||||
|
Modelle liegen als `.gguf`-Dateien lokal im Container.
|
||||||
|
Plane je nach Modellgröße zwischen 4 und 15 GB ein, plus 10 GB Reserve für temporäre Daten.
|
||||||
|
|
||||||
|
* **Netzwerk:** Statische IP oder DHCP-Reservierung
|
||||||
|
Damit andere Container (z. B. n8n oder Affine) die API zuverlässig erreichen.
|
||||||
|
|
||||||
|
* **Betriebssystem:** Debian 12 (Bookworm)
|
||||||
|
Stabil, ressourcenschonend und optimal für den Einsatz auf älterer Hardware.
|
||||||
|
|
||||||
|
👉 **Screenshot geeignet:** Proxmox-Maske beim Erstellen des Ollama-Containers (4 vCPU | 8 GB RAM | 50 GB Storage | Debian 12)
|
||||||
|
|
||||||
|
### Technische Voraussetzungen
|
||||||
|
|
||||||
|
Vor der Einrichtung sollte dein UCC folgendes erfüllen:
|
||||||
|
|
||||||
|
* **Proxmox VE** ist betriebsbereit und kann Container erstellen.
|
||||||
|
* **Nginx Proxy Manager (NPM)** ist installiert und erreichbar.
|
||||||
|
* **DNS-Eintrag** für `ollama.deinedomain.tld` zeigt auf deinen Server.
|
||||||
|
* **Internetverbindung** ist stabil – Modelle werden online geladen.
|
||||||
|
* **SSH-Zugriff** auf den Container funktioniert:
|
||||||
|
```bash
|
||||||
|
ssh root@<IP-des-Containers>
|
||||||
|
```
|
||||||
|
Ersetze `<IP-des-Containers>` durch die tatsächliche Adresse des Ollama-LXC.
|
||||||
|
|
||||||
|
> [!IMPORTANT]
|
||||||
|
> GPU-Unterstützung ist hier nicht vorgesehen.
|
||||||
|
> Ollama läuft vollständig CPU-basiert und kann trotzdem stabile Ergebnisse liefern,
|
||||||
|
> solange Modelle mit moderater Parameterzahl (bis 7B) verwendet werden.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Schritt 1 – Container vorbereiten und System aktualisieren
|
||||||
|
|
||||||
|
Starte den frisch erstellten Ollama-Container in Proxmox und öffne die Konsole (Web-Shell oder SSH).
|
||||||
|
|
||||||
|
Systempakete aktualisieren:
|
||||||
|
```bash
|
||||||
|
apt update && apt upgrade -y
|
||||||
|
```
|
||||||
|
|
||||||
|
Container neu starten:
|
||||||
|
```bash
|
||||||
|
reboot
|
||||||
|
```
|
||||||
|
|
||||||
|
Danach wieder einloggen:
|
||||||
|
```bash
|
||||||
|
ssh root@<IP-des-Containers>
|
||||||
|
```
|
||||||
|
|
||||||
|
> [!NOTE]
|
||||||
|
> Ein aktuelles System verhindert Installationsfehler und Abbrüche beim Laden der Modelle.
|
||||||
|
|
||||||
|
👉 **Screenshot geeignet:** Proxmox-Konsole nach erfolgreichem `apt upgrade`
|
||||||
|
|
||||||
|
### Schritt 2 – Ollama installieren
|
||||||
|
|
||||||
|
Ollama stellt ein offizielles Installationsskript bereit, das automatisch alle Abhängigkeiten einrichtet und den Dienst als systemd-Service konfiguriert.
|
||||||
|
|
||||||
|
Führe im Container folgenden Befehl aus:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl -fsSL https://ollama.com/install.sh | sh
|
||||||
|
```
|
||||||
|
|
||||||
|
Nach Abschluss prüfe den Dienststatus:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
systemctl status ollama
|
||||||
|
```
|
||||||
|
|
||||||
|
Die Ausgabe sollte `active (running)` anzeigen.
|
||||||
|
|
||||||
|
> [!NOTE]
|
||||||
|
> Der Dienst startet automatisch beim Booten des Containers und lauscht auf Port `11434`.
|
||||||
|
> Sollte die Ausgabe `inactive` oder `failed` lauten, kontrolliere mit
|
||||||
|
> ```bash
|
||||||
|
> journalctl -u ollama -xe
|
||||||
|
> ```
|
||||||
|
> ob Pakete oder Abhängigkeiten fehlgeschlagen sind.
|
||||||
|
|
||||||
|
👉 **Screenshot geeignet:** Terminalausgabe von `systemctl status ollama` mit aktivem Dienst
|
||||||
|
|
||||||
|
### Schritt 3 – Erste Funktionsprüfung & Modelle installieren
|
||||||
|
|
||||||
|
Nach der erfolgreichen Installation läuft der Ollama-Dienst bereits im Hintergrund.
|
||||||
|
Jetzt prüfst du, ob die API reagiert und lädst anschließend die beiden benötigten Modelle.
|
||||||
|
|
||||||
|
#### Installation prüfen
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl http://localhost:11434/api/tags
|
||||||
|
```
|
||||||
|
|
||||||
|
Wenn eine leere JSON-Liste zurückkommt, ist der Server bereit:
|
||||||
|
|
||||||
|
```json
|
||||||
|
[]
|
||||||
|
```
|
||||||
|
|
||||||
|
👉 **Screenshot geeignet:** Terminalausgabe von `curl /api/tags` mit leerer JSON-Liste
|
||||||
|
|
||||||
|
#### Modell 1 – Mistral 7B
|
||||||
|
|
||||||
|
Dieses Modell übernimmt die strukturierten Aufgaben innerhalb deines UCC –
|
||||||
|
z. B. präzise Auswertungen, systemnahe Antworten oder die Verarbeitung von Nachrichten, die über WAHA eingehen.
|
||||||
|
|
||||||
|
Modell herunterladen:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ollama pull mistral
|
||||||
|
```
|
||||||
|
|
||||||
|
Nach dem Download prüfen, ob es korrekt installiert wurde:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ollama list
|
||||||
|
```
|
||||||
|
|
||||||
|
In der Ausgabe sollte `mistral` erscheinen.
|
||||||
|
|
||||||
|
👉 **Screenshot geeignet:** Terminalausgabe von `ollama list` mit sichtbarem Eintrag `mistral`
|
||||||
|
|
||||||
|
#### Modell 2 – Phi-3 Mini
|
||||||
|
|
||||||
|
Phi-3 ist kompakt und läuft stabil auch auf schwächerer Hardware.
|
||||||
|
Es eignet sich ideal für natürlich klingende, kreative Texte und ergänzt Mistral in allen inhaltlich offeneren Aufgaben.
|
||||||
|
|
||||||
|
Modell laden:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ollama pull phi3
|
||||||
|
```
|
||||||
|
|
||||||
|
Anschließend erneut prüfen:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ollama list
|
||||||
|
```
|
||||||
|
|
||||||
|
Beide Modelle sollten nun angezeigt werden: `mistral` und `phi3`.
|
||||||
|
|
||||||
|
👉 **Screenshot geeignet:** Terminalausgabe von `ollama list` mit sichtbaren Modellen `mistral` und `phi3`
|
||||||
|
|
||||||
|
### Schritt 4 – Funktionstest und erste Abfrage
|
||||||
|
|
||||||
|
Nach der Installation und dem Laden beider Modelle folgt nun der Praxistest.
|
||||||
|
Damit stellst du sicher, dass Ollama korrekt arbeitet und die Modelle einsatzbereit sind.
|
||||||
|
|
||||||
|
#### Test mit Mistral
|
||||||
|
|
||||||
|
Starte Mistral direkt über die Konsole:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ollama run mistral
|
||||||
|
```
|
||||||
|
|
||||||
|
Nach dem Start erscheint die Eingabeaufforderung (`>>>`).
|
||||||
|
Gib eine einfache Testfrage ein, die sich ohne Internetzugriff beantworten lässt:
|
||||||
|
|
||||||
|
```
|
||||||
|
Erkläre mir, was ein Container ist.
|
||||||
|
```
|
||||||
|
|
||||||
|
Mistral sollte in wenigen Sekunden eine sachliche und technisch korrekte Antwort liefern.
|
||||||
|
Beende den Lauf anschließend mit `CTRL + C`.
|
||||||
|
|
||||||
|
👉 **Screenshot geeignet:** Terminal mit sichtbarer Mistral-Antwort auf Testfrage
|
||||||
|
|
||||||
|
#### Test mit Phi-3
|
||||||
|
|
||||||
|
Starte danach das zweite Modell:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ollama run phi3
|
||||||
|
```
|
||||||
|
|
||||||
|
Diese Variante ist sprachlich freier und eignet sich besser für kreative Texte.
|
||||||
|
Verwende deshalb eine etwas erzählerische Testfrage:
|
||||||
|
|
||||||
|
```
|
||||||
|
Beschreibe eine Fantasiewelt mit einem eigenen Kontrollzentrum.
|
||||||
|
```
|
||||||
|
|
||||||
|
Phi-3 reagiert meist mit lebendigen, bildhaften Formulierungen.
|
||||||
|
Auch hier die Sitzung mit `CTRL + C` beenden.
|
||||||
|
|
||||||
|
👉 **Screenshot geeignet:** Terminal mit Phi-3-Antwort auf Testfrage
|
||||||
|
|
||||||
|
> [!NOTE]
|
||||||
|
> Ollama-Modelle haben **keinen Internetzugriff** und kennen weder „Bratonien“ noch dein reales System.
|
||||||
|
> Sie antworten ausschließlich auf Basis des Prompt-Inhalts.
|
||||||
|
> Damit sie künftig deine eigene Welt verstehen, werden wir im Premium-Kapitel zeigen,
|
||||||
|
> wie du Kontextwissen und interne Dokumente lokal einbindest.
|
||||||
|
|
||||||
|
### Schritt 5 – API-Zugriff aktivieren
|
||||||
|
|
||||||
|
Ollama stellt lokal eine HTTP-API bereit, über die du Anfragen aus anderen Systemen senden kannst – etwa von n8n, Affine oder deinem Kontrollzentrum.
|
||||||
|
Die API läuft standardmäßig auf Port `11434`.
|
||||||
|
|
||||||
|
#### Erreichbarkeit prüfen
|
||||||
|
|
||||||
|
Führe im Container folgenden Befehl aus:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl http://localhost:11434/api/tags
|
||||||
|
```
|
||||||
|
|
||||||
|
Wenn eine JSON-Antwort erscheint, z. B.:
|
||||||
|
|
||||||
|
```json
|
||||||
|
[{"name": "mistral"}, {"name": "phi3"}]
|
||||||
|
```
|
||||||
|
|
||||||
|
dann ist die API aktiv und betriebsbereit.
|
||||||
|
|
||||||
|
👉 **Screenshot geeignet:** Terminalausgabe von `curl /api/tags` mit sichtbaren Modellen
|
||||||
|
|
||||||
|
#### Zugriff über das Netzwerk
|
||||||
|
|
||||||
|
Damit andere Container im UCC (z. B. n8n oder Affine) auf die API zugreifen können,
|
||||||
|
muss der Nginx Proxy Manager (NPM) den internen Port **11434** weiterleiten.
|
||||||
|
Dazu braucht Ollama **keine öffentliche Bindung** – der Dienst bleibt intern und sicher.
|
||||||
|
|
||||||
|
Prüfe zunächst, ob der Dienst korrekt läuft:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
systemctl status ollama
|
||||||
|
```
|
||||||
|
|
||||||
|
Wenn der Status `active (running)` lautet,
|
||||||
|
kannst du mit `ss` kontrollieren, ob der Port intern aktiv ist:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ss -tulpen | grep 11434
|
||||||
|
```
|
||||||
|
|
||||||
|
Wird hier `127.0.0.1:11434` angezeigt, ist alles korrekt –
|
||||||
|
Ollama lauscht lokal, und NPM greift intern über die Container-IP zu.
|
||||||
|
|
||||||
|
> [!NOTE]
|
||||||
|
> Du musst **keine** Änderung in der Ollama-Konfiguration vornehmen
|
||||||
|
> (z. B. `--host 0.0.0.0`).
|
||||||
|
> Der Dienst bleibt bewusst auf `localhost` beschränkt,
|
||||||
|
> um keine ungeschützten Ports ins interne Netz zu öffnen.
|
||||||
|
|
||||||
|
#### Proxy-Host in NPM anlegen
|
||||||
|
|
||||||
|
1. Öffne das **Nginx Proxy Manager Dashboard**.
|
||||||
|
2. Wähle **Add Proxy Host**.
|
||||||
|
3. Trage folgende Werte ein:
|
||||||
|
|
||||||
|
| Feld | Wert |
|
||||||
|
|------|------|
|
||||||
|
| **Domain Names** | `ollama.deinedomain.tld` |
|
||||||
|
| **Scheme** | `http` |
|
||||||
|
| **Forward Hostname / IP** | `<IP-des-Ollama-Containers>` |
|
||||||
|
| **Forward Port** | `11434` |
|
||||||
|
| **Block Common Exploits** | aktivieren |
|
||||||
|
| **Websockets Support** | aktivieren |
|
||||||
|
|
||||||
|
Wechsle anschließend in den Reiter **SSL** und aktiviere:
|
||||||
|
|
||||||
|
- **Request a new SSL Certificate**
|
||||||
|
- **Force SSL**
|
||||||
|
- **HTTP/2 Support**
|
||||||
|
- **HSTS Enabled**
|
||||||
|
|
||||||
|
> [!NOTE]
|
||||||
|
> Achte darauf, dass `ollama.deinedomain.tld` bereits im DNS
|
||||||
|
> auf deinen Server zeigt und dass interne Firewalls (z. B. Proxmox oder UFW)
|
||||||
|
> Verbindungen zwischen NPM und Ollama zulassen.
|
||||||
|
> Eine Freigabe des Ports **11434** nach außen ist nicht erforderlich.
|
||||||
|
|
||||||
|
👉 **Screenshot geeignet:** NPM-Dashboard mit geöffnetem Proxy-Host `ollama.deinedomain.tld`
|
||||||
|
|
||||||
|
#### Verbindung testen
|
||||||
|
|
||||||
|
Öffne im Browser:
|
||||||
|
|
||||||
|
```
|
||||||
|
https://ollama.deinedomain.tld/api/tags
|
||||||
|
```
|
||||||
|
|
||||||
|
Wenn du dieselbe JSON-Ausgabe erhältst wie zuvor, ist die API über HTTPS erreichbar.
|
||||||
|
Ab diesem Punkt können n8n, Affine oder andere UCC-Dienste Ollama direkt über Requests ansprechen.
|
||||||
|
|
||||||
|
> [!TIP]
|
||||||
|
> Im Premium-Kapitel lernst du, wie Ollama über **llm-axe** zusätzlich aktuelle Webdaten beziehen kann,
|
||||||
|
> um Antworten mit externen Informationen zu erweitern – bei weiterhin vollständiger lokaler Kontrolle.
|
||||||
|
|
||||||
|
### Schritt 6 – API-Nutzung aus einem anderen Container
|
||||||
|
|
||||||
|
Nachdem die Ollama-API über den Nginx Proxy Manager eingerichtet wurde,
|
||||||
|
kann sie jetzt von jedem anderen Container im UCC-Netzwerk angesprochen werden.
|
||||||
|
Dieser Schritt zeigt, wie du die Verbindung praktisch nutzt – ohne zusätzliche Tools oder Oberflächen.
|
||||||
|
|
||||||
|
#### Zugriff aus einem anderen LXC prüfen
|
||||||
|
|
||||||
|
Wechsle in die Konsole eines anderen Containers,
|
||||||
|
z. B. deines n8n-LXC oder eines beliebigen Debian-Containers im selben Netz,
|
||||||
|
und führe folgenden Befehl aus:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl -k https://ollama.deinedomain.tld/api/tags
|
||||||
|
```
|
||||||
|
|
||||||
|
Wenn du eine JSON-Antwort erhältst, z. B.:
|
||||||
|
|
||||||
|
```json
|
||||||
|
[{"name":"mistral"},{"name":"phi3"}]
|
||||||
|
```
|
||||||
|
|
||||||
|
dann ist die Verbindung erfolgreich und die API von außen erreichbar.
|
||||||
|
|
||||||
|
👉 **Screenshot geeignet:** Terminalausgabe im anderen Container mit erfolgreicher JSON-Antwort
|
||||||
|
|
||||||
|
> [!NOTE]
|
||||||
|
> Die Option `-k` ignoriert Zertifikatswarnungen.
|
||||||
|
> Bei gültigem Let’s-Encrypt-Zertifikat kann sie entfallen.
|
||||||
|
|
||||||
|
#### Erste API-Abfrage an ein Modell
|
||||||
|
|
||||||
|
Um die API praktisch zu testen, sende eine kurze Anfrage an das Mistral-Modell:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl -X POST https://ollama.deinedomain.tld/api/generate \
|
||||||
|
-H "Content-Type: application/json" \
|
||||||
|
-d '{
|
||||||
|
"model": "mistral",
|
||||||
|
"prompt": "Erkläre in einem Satz, was ein Homelab ist."
|
||||||
|
}'
|
||||||
|
```
|
||||||
|
|
||||||
|
Wenn alles funktioniert, antwortet Ollama mit einem JSON-Block,
|
||||||
|
der den generierten Text enthält:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"model": "mistral",
|
||||||
|
"created_at": "2025-10-22T17:32:00Z",
|
||||||
|
"response": "Ein Homelab ist eine private IT-Umgebung zum Lernen, Testen und Automatisieren."
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
👉 **Screenshot geeignet:** Terminalausgabe mit erfolgreicher API-Antwort
|
||||||
|
|
||||||
|
#### Verwendung im Alltag
|
||||||
|
|
||||||
|
Über diese Schnittstelle kannst du Ollama ab jetzt
|
||||||
|
aus beliebigen Skripten, Shell-Befehlen oder Tools im UCC aufrufen –
|
||||||
|
z. B. zur Textgenerierung, Zusammenfassung von Logs oder automatisierten Statusmeldungen.
|
||||||
|
Der Aufruf bleibt dabei vollständig lokal und erfordert keine Cloud-Verbindung.
|
||||||
|
|
||||||
|
> [!TIP]
|
||||||
|
> Diese API bildet die technische Grundlage für spätere Erweiterungen –
|
||||||
|
> etwa automatisierte Workflows oder grafische Oberflächen.
|
||||||
|
> Für den Moment genügt sie, um Ollama sicher aus jedem Container im UCC zu steuern.
|
||||||
|
|
||||||
|
### Schritt 7 – Zugriff absichern
|
||||||
|
|
||||||
|
Damit die Ollama-API nicht von außen erreichbar ist,
|
||||||
|
muss der Zugriff konsequent über den Nginx Proxy Manager (NPM) und die interne Firewall geschützt werden.
|
||||||
|
Dieser Schritt ist zwingend erforderlich, um unbefugten Zugriff auf dein System zu verhindern.
|
||||||
|
|
||||||
|
#### Zugriff über NPM absichern
|
||||||
|
|
||||||
|
Öffne das Dashboard des **Nginx Proxy Manager**
|
||||||
|
und bearbeite den Proxy-Host `ollama.deinedomain.tld`.
|
||||||
|
|
||||||
|
Wechsle in den Reiter **Access List**
|
||||||
|
und lege eine neue Zugriffsregel an:
|
||||||
|
|
||||||
|
1. **Add Access List** → Name: `ollama-intern`
|
||||||
|
2. Unter *Access* aktiviere
|
||||||
|
- **Authorization:** „HTTP Basic Authentication“
|
||||||
|
- Lege einen sicheren Benutzernamen und ein starkes Passwort fest.
|
||||||
|
3. Unter *Access Control* wähle
|
||||||
|
- **Allow IP Addresses:** den internen Adressbereich deines UCC (z. B. `192.168.100.0/24`)
|
||||||
|
- Alle anderen Zugriffe werden automatisch blockiert.
|
||||||
|
|
||||||
|
Speichern und im Proxy-Host diese Access-List aktivieren.
|
||||||
|
|
||||||
|
> [!NOTE]
|
||||||
|
> Damit ist Ollama ausschließlich intern erreichbar
|
||||||
|
> und erfordert bei jedem Aufruf Benutzername und Passwort.
|
||||||
|
|
||||||
|
👉 **Screenshot geeignet:** NPM-Dashboard mit aktivierter Access-List „ollama-intern“
|
||||||
|
|
||||||
|
#### Zugriff testen
|
||||||
|
|
||||||
|
Von einem erlaubten Container (z. B. n8n-LXC):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl -u benutzername:passwort -k https://ollama.deinedomain.tld/api/tags
|
||||||
|
```
|
||||||
|
|
||||||
|
Wenn du die korrekten Zugangsdaten angibst,
|
||||||
|
antwortet die API wie gewohnt mit der Modellliste.
|
||||||
|
Ohne Authentifizierung oder von einer nicht freigegebenen IP
|
||||||
|
erscheint die Meldung `403 Forbidden`.
|
||||||
|
|
||||||
|
👉 **Screenshot geeignet:** Terminalausgabe mit erfolgreicher Authentifizierung
|
||||||
|
|
||||||
|
#### Firewall-Regeln im Ollama-LXC setzen
|
||||||
|
|
||||||
|
Der API-Port 11434 muss zusätzlich auf Systemebene abgesichert werden.
|
||||||
|
Erlaubt wird ausschließlich der Zugriff vom NPM-Container.
|
||||||
|
Führe im Ollama-LXC folgende Befehle aus:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ufw allow from <IP-des-NPM-Containers> to any port 11434
|
||||||
|
ufw deny 11434
|
||||||
|
ufw enable
|
||||||
|
```
|
||||||
|
|
||||||
|
Anschließend den Status prüfen:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ufw status numbered
|
||||||
|
```
|
||||||
|
|
||||||
|
Die Ausgabe sollte zeigen, dass **nur die NPM-IP** Zugriff auf Port 11434 hat.
|
||||||
|
|
||||||
|
👉 **Screenshot geeignet:** Terminalausgabe von `ufw status numbered` mit aktiver Regel
|
||||||
|
|
||||||
|
> [!IMPORTANT]
|
||||||
|
> Ohne diese Firewall-Regeln bleibt der Port im internen Netz offen.
|
||||||
|
> Das wäre ein kritisches Sicherheitsrisiko – führe diesen Schritt daher immer durch.
|
||||||
|
|
||||||
|
#### Ergebnis
|
||||||
|
|
||||||
|
Die Ollama-API ist jetzt:
|
||||||
|
- nur über den internen Proxy erreichbar,
|
||||||
|
- durch HTTP-Authentifizierung geschützt,
|
||||||
|
- über die Firewall auf NPM-IP beschränkt,
|
||||||
|
- und damit vollständig abgeschottet gegen direkten Zugriff.
|
||||||
|
|
||||||
|
Das System ist damit sicher, stabil und bereit
|
||||||
|
für alle weiteren Integrationen innerhalb deines UCC.
|
||||||
|
|
||||||
|
### Schritt 8 – Nutzung über die lokale CLI
|
||||||
|
|
||||||
|
Neben der API kannst du Ollama auch direkt im Container verwenden.
|
||||||
|
Das ist der schnellste Weg, um Modelle zu testen, einfache Texte zu generieren oder Systemfunktionen zu prüfen –
|
||||||
|
ohne dass eine Netzwerkverbindung oder Proxy nötig ist.
|
||||||
|
|
||||||
|
Alle Befehle in diesem Schritt führst du **innerhalb des Ollama-Containers** aus,
|
||||||
|
entweder über die Proxmox-Konsole oder per SSH:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ssh root@<IP-des-Ollama-Containers>
|
||||||
|
```
|
||||||
|
|
||||||
|
Nach dem Login steht dir die Ollama-CLI zur Verfügung.
|
||||||
|
|
||||||
|
#### Verfügbare Modelle anzeigen
|
||||||
|
|
||||||
|
Um zu prüfen, welche Modelle auf deinem System vorhanden sind:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ollama list
|
||||||
|
```
|
||||||
|
|
||||||
|
Beispielausgabe:
|
||||||
|
|
||||||
|
```
|
||||||
|
NAME ID SIZE MODIFIED
|
||||||
|
mistral 5d43f1d3bdfd 4.1GB 3 days ago
|
||||||
|
phi3 e2412cd927a8 2.8GB 2 days ago
|
||||||
|
```
|
||||||
|
|
||||||
|
👉 **Screenshot geeignet:** Terminalausgabe mit sichtbaren Modellen
|
||||||
|
|
||||||
|
#### Interaktive Sitzung starten
|
||||||
|
|
||||||
|
Um direkt mit einem Modell zu interagieren, starte es über:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ollama run mistral
|
||||||
|
```
|
||||||
|
|
||||||
|
Sobald die Eingabeaufforderung (`>>>`) erscheint, kannst du Fragen stellen:
|
||||||
|
|
||||||
|
```
|
||||||
|
>>> Was ist ein Homelab?
|
||||||
|
Ein Homelab ist eine private IT-Umgebung, in der Systeme, Server und Netzwerke
|
||||||
|
zu Lern- oder Testzwecken betrieben werden.
|
||||||
|
```
|
||||||
|
|
||||||
|
Beende die Sitzung mit `CTRL + C`.
|
||||||
|
|
||||||
|
👉 **Screenshot geeignet:** Terminal mit laufender Mistral-Sitzung und Antwort
|
||||||
|
|
||||||
|
#### Einmalige Abfrage (non-interaktiv)
|
||||||
|
|
||||||
|
Für einfache Einzelfragen kannst du den Prompt direkt mitgeben:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ollama run mistral "Erkläre kurz den Unterschied zwischen Container und virtueller Maschine."
|
||||||
|
```
|
||||||
|
|
||||||
|
Das Modell gibt eine einmalige Antwort zurück und beendet sich automatisch.
|
||||||
|
|
||||||
|
#### Modelle wechseln
|
||||||
|
|
||||||
|
Du kannst jederzeit ein anderes Modell verwenden:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ollama run phi3
|
||||||
|
```
|
||||||
|
|
||||||
|
Phi-3 eignet sich besonders für kreative Texte, Storylines oder Ideenentwürfe.
|
||||||
|
|
||||||
|
#### Modelle aktualisieren oder löschen
|
||||||
|
|
||||||
|
Aktualisieren:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ollama pull mistral
|
||||||
|
```
|
||||||
|
|
||||||
|
Entfernen:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ollama rm phi3
|
||||||
|
```
|
||||||
|
|
||||||
|
> [!NOTE]
|
||||||
|
> Der Befehl `pull` benötigt eine aktive Internetverbindung, um das Modell neu zu laden.
|
||||||
|
> In Offline-Umgebungen bleiben vorhandene Modelle funktionsfähig.
|
||||||
|
|
||||||
|
#### Beispiel: praktische Nutzung
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ollama run mistral "Schreibe eine kurze Streamankündigung für Bratonien_TV."
|
||||||
|
```
|
||||||
|
|
||||||
|
Erwartete Antwort:
|
||||||
|
```
|
||||||
|
"🎬 Der Stream ist live! Willkommen zu einem neuen Abend voller Chaos, Magie und Möhrenpower."
|
||||||
|
```
|
||||||
|
|
||||||
|
👉 **Screenshot geeignet:** Terminalausgabe mit generierter Beispielantwort
|
||||||
|
|
||||||
|
#### Ergebnis
|
||||||
|
|
||||||
|
Ollama ist jetzt vollständig nutzbar:
|
||||||
|
- Du kannst Modelle direkt über die CLI starten.
|
||||||
|
- Anfragen funktionieren ohne Internetverbindung.
|
||||||
|
- Alle Aktionen laufen lokal im Container.
|
||||||
|
|
||||||
|
## Troubleshooting & Tipps
|
||||||
|
|
||||||
|
Ollama läuft im Normalbetrieb sehr stabil. Trotzdem kann es – besonders auf älterer Hardware oder bei ersten Installationen – zu Problemen kommen.
|
||||||
|
In diesem Abschnitt lernst du, wie du typische Fehler erkennst, Ursachen findest und dein System stabil hältst.
|
||||||
|
|
||||||
|
### Ollama startet nicht
|
||||||
|
|
||||||
|
Wenn Ollama sich nicht starten lässt oder direkt wieder beendet wird, liegt das meist an zu wenig Arbeitsspeicher oder beschädigten Dateien.
|
||||||
|
|
||||||
|
#### Arbeitsspeicher prüfen
|
||||||
|
|
||||||
|
Ollama lädt komplette Modelle in den RAM.
|
||||||
|
Ist zu wenig Speicher frei, startet der Dienst gar nicht erst oder bricht beim Laden ab.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
free -h
|
||||||
|
```
|
||||||
|
|
||||||
|
In der Zeile **Mem:** siehst du, wie viel Arbeitsspeicher belegt ist und wie viel noch frei ist.
|
||||||
|
Wenn weniger als 2 GB frei sind, reicht das nicht aus, um ein Modell zu laden.
|
||||||
|
Starte den Container neu, um Arbeitsspeicher freizugeben:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
reboot
|
||||||
|
```
|
||||||
|
|
||||||
|
> [!NOTE]
|
||||||
|
> Bei 8 GB Gesamtspeicher sollte Ollama mindestens 6 GB reserviert bekommen.
|
||||||
|
> Andernfalls kann das Modell nicht stabil geladen werden.
|
||||||
|
|
||||||
|
#### Dienststatus prüfen
|
||||||
|
|
||||||
|
Wenn genug Speicher vorhanden ist, prüfe, ob der Dienst aktiv ist:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
systemctl status ollama
|
||||||
|
```
|
||||||
|
|
||||||
|
Wenn dort **inactive** oder **failed** steht, starte ihn neu:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
systemctl restart ollama
|
||||||
|
```
|
||||||
|
|
||||||
|
Zeigt der Status anschließend **active (running)**, läuft der Dienst korrekt.
|
||||||
|
Wenn er erneut fehlschlägt, schaue dir die Logdateien an.
|
||||||
|
|
||||||
|
#### Logdateien prüfen
|
||||||
|
|
||||||
|
```bash
|
||||||
|
journalctl -u ollama -xe
|
||||||
|
```
|
||||||
|
|
||||||
|
Die Ausgabe zeigt, warum der Dienst nicht startet.
|
||||||
|
Häufige Ursachen sind:
|
||||||
|
- beschädigte oder unvollständige Modelldateien
|
||||||
|
- kein freier Speicherplatz auf der Systempartition
|
||||||
|
- fehlende Berechtigungen
|
||||||
|
|
||||||
|
Wenn ein Modell beschädigt ist, entferne es und lade es neu:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ollama rm mistral
|
||||||
|
ollama pull mistral
|
||||||
|
```
|
||||||
|
|
||||||
|
> [!TIP]
|
||||||
|
> Wenn Ollama nach einem Neustart automatisch wieder startet, ist alles korrekt konfiguriert.
|
||||||
|
> Sollte der Dienst dauerhaft ausfallen, prüfe die Datei `/etc/systemd/system/ollama.service`.
|
||||||
|
> Achte darauf, dass dort `Restart=always` gesetzt ist.
|
||||||
|
|
||||||
|
### Modelle reagieren nicht oder brechen ab
|
||||||
|
|
||||||
|
Wenn ein Modell zwar startet, aber nicht antwortet oder mitten im Text abbricht, liegt das meist an Speicherproblemen oder unvollständigen Downloads.
|
||||||
|
|
||||||
|
#### Modellverfügbarkeit prüfen
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ollama list
|
||||||
|
```
|
||||||
|
|
||||||
|
Wenn das Modell fehlt oder eine ungewöhnliche Größe hat, lade es neu:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ollama pull mistral
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Testlauf mit Debug-Informationen
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ollama run mistral -v
|
||||||
|
```
|
||||||
|
|
||||||
|
Der Parameter `-v` zeigt dir den Fortschritt beim Laden.
|
||||||
|
Wenn der Prozess bei „Loading model…“ stehen bleibt, hat Ollama nicht genug RAM oder die Datei ist defekt.
|
||||||
|
|
||||||
|
> [!NOTE]
|
||||||
|
> Beende alle laufenden Sitzungen mit `CTRL + C`, bevor du ein neues Modell startest.
|
||||||
|
> Mehrere aktive Prozesse können den Speicher blockieren.
|
||||||
|
|
||||||
|
### API antwortet nicht
|
||||||
|
|
||||||
|
Wenn du über den Browser oder per `curl` keine Antwort erhältst, kann die Verbindung zwischen Ollama und dem Nginx Proxy Manager (NPM) unterbrochen sein.
|
||||||
|
|
||||||
|
#### Verbindung prüfen
|
||||||
|
|
||||||
|
Prüfe zunächst, ob der Ollama-Dienst läuft:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
systemctl status ollama
|
||||||
|
```
|
||||||
|
|
||||||
|
Wenn er aktiv ist, teste die direkte Verbindung aus dem NPM-Container:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl http://<IP-des-Ollama-Containers>:11434/api/tags
|
||||||
|
```
|
||||||
|
|
||||||
|
Wenn keine Antwort kommt, stimmt etwas mit der Firewall oder dem Routing nicht.
|
||||||
|
|
||||||
|
#### Firewall-Regeln prüfen
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ufw status numbered
|
||||||
|
```
|
||||||
|
|
||||||
|
Achte darauf, dass die IP-Adresse des NPM-Containers für Port 11434 freigegeben ist.
|
||||||
|
Wenn keine entsprechende Regel vorhanden ist, füge sie hinzu:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ufw allow from <IP-des-NPM-Containers> to any port 11434
|
||||||
|
ufw reload
|
||||||
|
```
|
||||||
|
|
||||||
|
Danach den Zugriff erneut testen.
|
||||||
|
Wenn du dich vertippt hast, kannst du falsche Regeln mit
|
||||||
|
```bash
|
||||||
|
ufw delete <Nummer>
|
||||||
|
```
|
||||||
|
entfernen. Die Nummer siehst du in der Ausgabe von `ufw status numbered`.
|
||||||
|
|
||||||
|
> [!TIP]
|
||||||
|
> Wenn der Browser trotz korrekter Firewall keine Verbindung aufbaut, starte den NPM-Container neu:
|
||||||
|
> ```bash
|
||||||
|
> docker restart npm-app
|
||||||
|
> ```
|
||||||
|
|
||||||
|
### Modelle laden nicht oder brechen beim Download ab
|
||||||
|
|
||||||
|
Wenn `ollama pull` mit Fehlermeldungen stoppt oder sehr langsam lädt, liegt das meist an DNS-Problemen oder instabiler Verbindung.
|
||||||
|
|
||||||
|
#### Internetverbindung prüfen
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ping google.com
|
||||||
|
```
|
||||||
|
|
||||||
|
Wenn keine Antwort kommt, fehlt die Netzverbindung.
|
||||||
|
Prüfe die DNS-Einstellungen:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cat /etc/resolv.conf
|
||||||
|
```
|
||||||
|
|
||||||
|
Falls die Datei leer ist oder fehlerhafte Einträge enthält, setze die Nameserver neu (z. B. `1.1.1.1` oder `8.8.8.8`).
|
||||||
|
|
||||||
|
#### Download neu starten
|
||||||
|
|
||||||
|
Wenn ein Modell unvollständig heruntergeladen wurde, entferne es und lade es neu:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ollama rm mistral
|
||||||
|
ollama pull mistral
|
||||||
|
```
|
||||||
|
|
||||||
|
> [!NOTE]
|
||||||
|
> Wenn die Verbindung regelmäßig abbricht, liegt das Problem meist am Hostnetzwerk oder einer Proxy-Instanz.
|
||||||
|
> Teste den Download direkt im Hostsystem – wenn er dort stabil ist, prüfe die Container-Netzwerkkonfiguration.
|
||||||
|
|
||||||
|
### Hohe CPU- oder RAM-Auslastung
|
||||||
|
|
||||||
|
Wenn Ollama dauerhaft hohe CPU-Last oder Speicherverbrauch zeigt, liegt das meist an zu vielen gleichzeitig laufenden Prozessen.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
htop
|
||||||
|
```
|
||||||
|
|
||||||
|
Damit kannst du sehen, welches Modell gerade aktiv ist.
|
||||||
|
Beende unnötige Prozesse mit:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pkill ollama
|
||||||
|
```
|
||||||
|
|
||||||
|
Starte den Container anschließend neu, um Speicher freizugeben:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
reboot
|
||||||
|
```
|
||||||
|
|
||||||
|
Wenn die Auslastung danach weiter hoch bleibt, erhöhe die CPU-Zuteilung oder reduziere die Anzahl gleichzeitig geladener Modelle.
|
||||||
|
|
||||||
|
> [!TIP]
|
||||||
|
> Eine dedizierte CPU-Zuweisung in Proxmox (z. B. 2 Kerne fest, keine Lastverteilung) sorgt für stabileres Verhalten.
|
||||||
|
|
||||||
|
### Logdateien und Statusüberwachung
|
||||||
|
|
||||||
|
Ollama protokolliert alle Ereignisse über das Systemjournal.
|
||||||
|
Das ist hilfreich, um Startverhalten und API-Aufrufe nachzuvollziehen.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
journalctl -u ollama -f
|
||||||
|
```
|
||||||
|
|
||||||
|
Damit siehst du in Echtzeit, welche Anfragen ankommen und ob Fehler auftreten.
|
||||||
|
|
||||||
|
> [!TIP]
|
||||||
|
> Wenn Ollama längere Zeit stabil läuft, ändere an der Grundkonfiguration nichts.
|
||||||
|
> Teste neue Modelle oder Versionen immer zuerst in einem separaten Container.
|
||||||
|
> Das verhindert Konflikte und sichert dir ein zuverlässiges Hauptsystem.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Ergebnis
|
||||||
|
|
||||||
|
Mit diesem Kapitel hast du ein voll funktionsfähiges, lokales KI-System in dein UCC integriert.
|
||||||
|
Ollama läuft stabil, ist abgesichert und kann sowohl über die Konsole als auch über die interne API genutzt werden.
|
||||||
|
Alle Vorgänge bleiben vollständig innerhalb deiner eigenen Infrastruktur – keine Cloud, keine externen Server, keine Abhängigkeiten.
|
||||||
|
|
||||||
|
### Dein aktueller Stand
|
||||||
|
|
||||||
|
- **Ollama-Container** ist eingerichtet und betriebsbereit
|
||||||
|
- **API-Zugriff** funktioniert sicher über den internen Proxy
|
||||||
|
- **Modelle Mistral und Phi-3** sind geladen und getestet
|
||||||
|
- **Firewall- und Zugriffsschutz** sind aktiv
|
||||||
|
- **CLI-Nutzung** erlaubt direkte Arbeit im Container
|
||||||
|
- **Fehlerdiagnose und Logs** sind bekannt und überprüft
|
||||||
|
|
||||||
|
Damit steht dir nun ein autarkes, datensicheres KI-System zur Verfügung,
|
||||||
|
das sich in deine bestehende UCC-Umgebung nahtlos einfügt.
|
||||||
|
Du kannst Ollama direkt für eigene Projekte verwenden oder als Grundlage für zukünftige Erweiterungen nutzen.
|
||||||
|
|
||||||
|
> [!TIP]
|
||||||
|
> In den erweiterten Kapiteln werden diese Grundlagen ausgebaut:
|
||||||
|
> Dort geht es um komfortablere Bedienung, Automatisierungen und erweiterte Einsatzmöglichkeiten –
|
||||||
|
> die Basis bleibt jedoch immer dein hier aufgebautes, lokales System.
|
||||||
|
|
||||||
|
👉 **Screenshot geeignet:** Proxmox-Interface mit aktivem Ollama-Container, daneben NPM- und n8n-Container sichtbar
|
||||||
Reference in New Issue
Block a user