llmproxy/DOCKERHUB.md
Oliver Hofmann 34b108f4df Replace default_model with force_model (model lock)
Removes DEFAULT_MODEL in favour of a force_model setting configurable
via the admin UI. When set, every proxy request's model field is
overridden, preventing uncoordinated model switches during lab sessions.
Updates schemas, admin API, all three proxy endpoints, frontend,
init_db, and docs (README, DOCKERHUB, KURZANLEITUNG).
2026-05-08 08:02:16 +02:00

4.3 KiB
Raw Permalink Blame History

mediaeng/llmproxy

Ein schlanker Reverse-Proxy für Ollama, der API-Keys mit konfigurierbaren Token- und Request-Quoten verwaltet. Eingehende Anfragen im OpenAI-kompatiblen Format werden authentifiziert, auf Quota geprüft und an den konfigurierten Ollama-Server weitergeleitet.

Funktionen

  • OpenAI-kompatibler Endpunkt (/v1/chat/completions, /v1/models)
  • API-Key-Verwaltung mit tages- und monatlichen Token-/Request-Limits
  • Web-basierte Admin-Oberfläche (Port 8001)
  • Modell-Lock: erzwingt ein bestimmtes Modell für alle Requests (nützlich für Praktika/Kurse)
  • Streaming-Support (Server-Sent Events)
  • Tool-Use / Function Calling wird durchgereicht
  • Rotierende Nutzungs-Logs
  • SQLite (Standard) oder PostgreSQL

Ports

Port Dienst
8000 Proxy-Endpunkt (OpenAI-API)
8001 Admin-API + Web-Oberfläche

Alle API-Endpunkte erfordern das ADMIN_PASSWORD — ein Zugriff ohne gültiges Token liefert nur die öffentlichen Frontend-Dateien (HTML/JS/CSS der Login-Seite). Das Passwort ist damit die primäre Schutzmaßnahme.

Umgebungsvariablen

Variable Standard Beschreibung
ADMIN_PASSWORD Pflicht. Passwort für die Admin-Oberfläche
OLLAMA_URL http://localhost:11434 URL des Ollama-Servers (ohne /v1-Suffix)
DATABASE_URL sqlite:///./test.db Datenbank-Verbindungsstring (SQLite oder PostgreSQL)
PROXY_HOST 0.0.0.0 Bind-Adresse des Proxy
PROXY_PORT 8000 Port des Proxy
ADMIN_HOST 0.0.0.0 Bind-Adresse der Admin-API (127.0.0.1 für lokalen Zugriff)
ADMIN_PORT 8001 Port der Admin-API
APP_TZ Europe/Berlin Zeitzone für Tages-/Monats-Reset der Quoten
LOG_FILE logs/usage.log Pfad der rotierenden Nutzungs-Logdatei

Docker Compose Ollama auf dem Host (Linux, empfohlen)

network_mode: host gibt dem Container direkten Zugriff auf das Host-Netzwerk. Ollama läuft auf dem Host und ist über localhost:11434 erreichbar — nach außen nicht sichtbar. Proxy und Admin-Oberfläche sind direkt auf den Host-Ports 8000 und 8001 verfügbar.

services:
  llmproxy:
    image: mediaeng/llmproxy:latest
    container_name: llmproxy
    restart: unless-stopped
    network_mode: host
    env_file: .env
    volumes:
      - llmproxy-data:/app/backend

volumes:
  llmproxy-data:

.env:

ADMIN_PASSWORD=changeme
OLLAMA_URL=http://localhost:11434
APP_TZ=Europe/Berlin

Docker Compose Ollama als Container, SQLite

Ollama und llmproxy laufen gemeinsam in Docker. Ollama ist nicht nach außen exposed.

services:
  llmproxy:
    image: mediaeng/llmproxy:latest
    restart: unless-stopped
    ports:
      - "8000:8000"
      - "8001:8001"
    environment:
      ADMIN_PASSWORD: changeme
      OLLAMA_URL: http://ollama:11434

      APP_TZ: Europe/Berlin
    volumes:
      - llmproxy-data:/app/backend
    depends_on:
      - ollama

  ollama:
    image: ollama/ollama:latest
    restart: unless-stopped
    volumes:
      - ollama-data:/root/.ollama

volumes:
  llmproxy-data:
  ollama-data:

Docker Compose Ollama als Container, PostgreSQL

Für Produktionsumgebungen mit externer Datenbank.

services:
  llmproxy:
    image: mediaeng/llmproxy:latest
    restart: unless-stopped
    ports:
      - "8000:8000"
      - "8001:8001"
    environment:
      ADMIN_PASSWORD: changeme
      OLLAMA_URL: http://ollama:11434

      APP_TZ: Europe/Berlin
      DATABASE_URL: postgresql://llmproxy:secret@db:5432/llmproxy
    depends_on:
      db:
        condition: service_healthy
      ollama:
        condition: service_started

  db:
    image: postgres:16-alpine
    restart: unless-stopped
    environment:
      POSTGRES_DB: llmproxy
      POSTGRES_USER: llmproxy
      POSTGRES_PASSWORD: secret
    volumes:
      - pg-data:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U llmproxy"]
      interval: 5s
      timeout: 5s
      retries: 5

  ollama:
    image: ollama/ollama:latest
    restart: unless-stopped
    volumes:
      - ollama-data:/root/.ollama

volumes:
  pg-data:
  ollama-data:

Client-Konfiguration

Den Proxy als OpenAI-kompatibler Endpunkt konfigurieren:

Base URL:  http://<host>:8000/v1
API Key:   <angelegter API-Key aus der Admin-Oberfläche>