LW IT Solutions
« Blog Overview /Cloud & AI/Tutorials / Self-Hosted Large Language Model (LLM) mit Ollama...
This post in other languages:

Self-Hosted Large Language Model (LLM) mit Ollama hinter einem Auth-Proxy

Self-Hosted Large Language Model (LLM) mit Ollama hinter einem Auth-Proxy
Inhalt
  1. 1. Architektur-Grundlagen: Sichere Edge-Inferenz-Pipeline
  2. 2. Schritt-für-Schritt-Container- & GPU-Bereitstellung
  3. 3. Schritt-für-Schritt-Konfiguration des Nginx-Auth-Proxys
  4. 4. Schritt-für-Schritt-Verifizierung mit Skripten & Web UI
  5. 5. Zusammenfassung & Mehrwert
  6. Quellen

Das Übertragen vertraulicher Unternehmensdokumente, Kundendaten und Quellcodes an öffentliche Large-Language-Model-APIs (LLM) wie OpenAI, Anthropic oder Google Gemini birgt gravierende Datenschutzrisiken und potenzielle DSGVO-Verstöße. Das Hosting offener KI-Modelle – wie Llama 3.1, Mistral oder CodeLlama – auf firmeneigener Server-Hardware garantiert absolute Datenhoheit. Da der populäre Inferenzserver Ollama seine REST-API standardmäßig auf Port 11434 völlig ohne native Authentifizierung bereitstellt, erfordert der sichere Betrieb im Unternehmensnetzwerk eine geschützte Architektur: einen Nginx-Reverse-Proxy zur Durchsetzung strenger API-Token-Authentifizierung und TLS-Verschlüsselung.

1. Architektur-Grundlagen: Sichere Edge-Inferenz-Pipeline

Ein professionelles, lokales LLM-Deployment entkoppelt die Modellausführung von der Netzwerkfreigabe durch die Schichtung dreier isolierter Dienste innerhalb einer Container-Umgebung:

  • Ollama-Inferenz-Backend: Führt offene LLM-Gewichte unter Nutzung von NVIDIA-GPU-Beschleunigung (via NVIDIA Container Toolkit) oder CPU-Quantisierung aus und ist ausschließlich an interne Container-Netzwerkschnittstellen gebunden.
  • Nginx-Authentifizierungs- & TLS-Proxy: Agiert als zentraler Einlasspunkt, abfängt sämtliche HTTP-Anfragen, terminiert SSL/TLS-Zertifikate und validiert Bearer-Token oder HTTP-Basic-Auth-Zugangsdaten, bevor Anfragen an Ollama weitergeleitet werden.
  • OpenAI-kompatibles Frontend / Skripte: Interne Web-Oberflächen (wie Open WebUI) oder automatisierte Python-Skripte kommunizieren über standardisierte OpenAI-SDK-Syntaxen mit dem abgesicherten Endpunkt, ohne den Sicherheits-Proxy zu umgehen.
Perimeter-Diagramm: Nur Port 8443 des nginx-Auth-Proxys ist veröffentlicht, das Ollama-Backend auf 11434 bleibt im Docker-Bridge-Netz
Das Inferenz-Backend berührt die Außenwelt nie. Veröffentlicht ist allein der Proxy, und der antwortet ohne Anmeldung gar nicht — das erst macht aus einem lokalen Modell einen internen Dienst.

2. Schritt-für-Schritt-Container- & GPU-Bereitstellung

Um Ollama zusammen mit einem dedizierten Nginx-Reverse-Proxy zu betreiben, wird die folgende produktionsreife docker-compose.yml für GPU-Passthrough und isoliertes Networking bereitgestellt:

services:
  ollama:
    image: ollama/ollama:latest
    container_name: enterprise_ollama
    restart: always
    environment:
      - OLLAMA_HOST=0.0.0.0
      - OLLAMA_ORIGINS=*
    volumes:
      - ./ollama_data:/root/.ollama
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: all
              capabilities: [gpu]
    networks:
      - llm_internal

  auth_proxy:
    image: nginx:alpine
    container_name: ollama_auth_proxy
    restart: always
    ports:
      - "8443:443"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf:ro
      - ./certs:/etc/nginx/certs:ro
      - ./htpasswd:/etc/nginx/.htpasswd:ro
    depends_on:
      - ollama
    networks:
      - llm_internal

networks:
  llm_internal:
    driver: bridge

3. Schritt-für-Schritt-Konfiguration des Nginx-Auth-Proxys

Um den API-Zugriff ausschließlich auf autorisierte Unternehmensanwendungen zu beschränken, wird Nginx mit HTTP Basic Authentication oder API-Token-Abfragen konfiguriert. Das folgende nginx.conf-Skript erzwingt die Authentifizierung und verlängert Timeouts für langandauernde Streaming-Inferenz-Antworten:

events {
    worker_connections 1024;
}

http {
    upstream ollama_backend {
        server ollama:11434;
    }

    server {
        listen 443 ssl;
        server_name llm.internal.domain;

        ssl_certificate /etc/nginx/certs/server.crt;
        ssl_certificate_key /etc/nginx/certs/server.key;
        ssl_protocols TLSv1.2 TLSv1.3;

        # Erzwingung von HTTP Basic Auth (Erstellung via: htpasswd -c ./htpasswd api_user)
        auth_basic "Enterprise LLM Secure Gateway";
        auth_basic_user_file /etc/nginx/.htpasswd;

        # Obligatorische Timeout-Erweiterungen für langes Inferenz-Streaming
        proxy_read_timeout 600s;
        proxy_connect_timeout 600s;
        proxy_send_timeout 600s;

        location / {
            proxy_pass http://ollama_backend;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            
            # Streaming-Unterstützung für Server-Sent Events (SSE)
            proxy_buffering off;
            proxy_cache off;
        }
    }
}

4. Schritt-für-Schritt-Verifizierung mit Skripten & Web UI

Sobald der Proxy aktiv ist, lässt sich die Inferenz-Engine sicher über Skripte abfragen oder in Chat-Oberflächen anbinden:

  1. Modell-Download: Der initiale Modell-Download erfolgt direkt im Container über das CLI:
    docker exec -it enterprise_ollama ollama run llama3.1
  2. Python-API-Verifizierung: Versand einer authentifizierten HTTPS-REST-Anfrage an den Proxy unter Angabe der Basic-Auth-Zugangsdaten:
    curl -k -u "api_user:SecretPassword123" https://localhost:8443/api/generate -d '{"model": "llama3.1", "prompt": "Zusammenfassung der Datenschutzrichtlinie.", "stream": false}'
  3. Anbindung an Open WebUI: Bereitstellung des open-webui-Docker-Containers im selben Netzwerk unter Konfiguration der Endpunkt-Umgebungsvariable:
    OLLAMA_BASE_URL=https://api_user:SecretPassword123@auth_proxy:443

5. Zusammenfassung & Mehrwert

Was sich damit erreichen lässt: Die erfolgreiche Bereitstellung eines selbstgehosteten, GPU-beschleunigten Inferenz-Servers für offene LLMs mit Ollama, abgesichert durch einen Nginx-Authentifizierungs- und SSL/TLS-Reverse-Proxy.

Resultierender Mehrwert: Ein privates, leistungsstarkes „ChatGPT“-Äquivalent steht für interne Unternehmensabläufe, Software-Skripte und Mitarbeiter-Benutzeroberflächen zur Verfügung, ohne dass sensible Daten an externe KI-Anbieter abfließen. Die absolute Datenhoheit und vollständige DSGVO-Konformität sind gewährleistet, während obligatorische Authentifizierungsmechanismen unbefugte Zugriffe auf die Rechenressourcen verhindern.

Lukas Wojcik

Lukas Wojcik

Systems architect and technology enthusiast specializing in scalable tracking solutions, GMP Stack (GA4 & GTM), and robust backend architectures. Advocate for clean code and privacy-first design.

Get in Touch

Briefly describe your project or inquiry for a tailored response. This site is protected by reCAPTCHA.

Kommentar schreiben

Die E-Mail-Adresse wird nicht veröffentlicht. Pflichtfelder sind mit einem Stern versehen.

ALL ARTICLES & CATEGORIES

CCTV

Diese Rubrik per RSS verfolgen

Cloud & AI

Diese Rubrik per RSS verfolgen

Data Privacy

Alle 13 Artikel dieser Rubrik Diese Rubrik per RSS verfolgen

Digital Analytics

Alle 51 Artikel dieser Rubrik Diese Rubrik per RSS verfolgen

Digital Marketing

Alle 31 Artikel dieser Rubrik Diese Rubrik per RSS verfolgen

IT & Networks

Alle 18 Artikel dieser Rubrik Diese Rubrik per RSS verfolgen

Music Production

Diese Rubrik per RSS verfolgen

Raspberry Pi

Diese Rubrik per RSS verfolgen

Smart Home

Alle 19 Artikel dieser Rubrik Diese Rubrik per RSS verfolgen

Web Entwicklung

Diese Rubrik per RSS verfolgen

WordPress-Plugins & Tricks

Diese Rubrik per RSS verfolgen