Skip to content

LiteLLM

Instalacja

LiteLLM uruchamiany jest jako proxy OpenAI-compatible (endpoint /v1/*) i przekazuje zapytania do wybranego providera (np. OpenAI) na podstawie config.yaml.

Założenia konfiguracyjne:

  • Plik Compose znajduje się w /srv/docker/compose/litellm
  • Dane LiteLLM znajdują się w /srv/docker/data/litellm
  • Sekrety (zmienne środowiskowe) znajdują się w /srv/docker/secrets/litellm/app.env
  • LiteLLM łączy się z innymi kontenerami po sieci Dockera internal
  • LiteLLM nie jest wystawiane publicznie (opcjonalnie mapujemy port tylko na 127.0.0.1 do testów)
  • Logi dostępne są przez docker logs (bez osobnego katalogu logów)

Dostęp do sieci Docker

Wymagany dostęp do sieci internal

LiteLLM musi mieć dostęp do sieci Dockera internal, aby inne aplikacje (np. Open WebUI) mogły się z nim komunikować po nazwie kontenera.

Tworzenie sieci Docker


Tworzenie katalogów

Tworzymy katalog dla Compose:

sudo mkdir -p /srv/docker/compose/litellm
sudo chown -R "$USER:$USER" /srv/docker/compose/litellm

Tworzymy katalog na dane LiteLLM:

sudo mkdir -p /srv/docker/data/litellm
sudo chown -R "$USER:$USER" /srv/docker/data/litellm

Tworzymy katalog na sekrety:

sudo mkdir -p /srv/docker/secrets/litellm
sudo chown -R "$USER:$USER" /srv/docker/secrets/litellm

Generowanie klucza LITELLM_MASTER_KEY

Klucz LITELLM_MASTER_KEY to token (Bearer), którym autoryzują się klienci (np. Open WebUI) w LiteLLM.

Wygeneruj klucz i skopiuj wynik:

echo "sk-$(openssl rand -hex 24)"

Tworzenie pliku app.env

Tworzymy i edytujemy plik app.env:

micro /srv/docker/secrets/litellm/app.env

W pliku umieszczamy:

app.env
# Token do autoryzacji LiteLLM (wklej wygenerowany sk-...)
LITELLM_MASTER_KEY=sk-TU_WKLEJ_WYGENEROWANY_KLUCZ

# Klucz upstream do providera (np. OpenAI) — ten klucz NIE trafia do klientów
OPENAI_API_KEY=sk-TU_WKLEJ_KLUCZ_Z_PANELU_OPENAI

Zapisujemy plik i wychodzimy z edytora.

Opcjonalnie (zalecane) ograniczamy uprawnienia do pliku sekretów:

chmod 600 /srv/docker/secrets/litellm/app.env

Tworzenie pliku config.yaml

config.yaml definiuje listę modeli i mapowanie na providera. Dodatkowo ustawiamy master_key, aby LiteLLM wymagał Bearer tokena (z LITELLM_MASTER_KEY) i nie próbował korzystać z kluczy w bazie.

Przechodzimy do katalogu Compose:

cd /srv/docker/compose/litellm

Tworzymy i edytujemy plik config.yaml:

micro config.yaml

W pliku umieszczamy:

config.yaml
general_settings:
  master_key: os.environ/LITELLM_MASTER_KEY

model_list:
  - model_name: gpt-4o-mini
    litellm_params:
      model: openai/gpt-4o-mini
      api_key: os.environ/OPENAI_API_KEY

Zapisujemy plik i wychodzimy z edytora.


Konfiguracja Docker Compose

W katalogu /srv/docker/compose/litellm tworzymy i edytujemy plik compose.yaml:

micro compose.yaml

W pliku umieszczamy:

compose.yaml
services:
  litellm:
    image: ghcr.io/berriai/litellm:main-v1.80.8-stable.1
    container_name: litellm
    restart: unless-stopped

    # LiteLLM Proxy (OpenAI-compatible)
    command: ["--host", "0.0.0.0", "--port", "4000", "--config", "/app/config.yaml"]

    env_file:
      - /srv/docker/secrets/litellm/app.env

    volumes:
      - ./config.yaml:/app/config.yaml:ro
      - /srv/docker/data/litellm:/data

    # Port tylko lokalnie (do testów). Jeśli nie chcesz portu na hoście — usuń tę sekcję.
    ports:
      - "127.0.0.1:4000:4000"

    networks:
      - internal

    security_opt:
      - no-new-privileges:true

networks:
  internal:
    external: true

Zapisujemy plik i wychodzimy z edytora.


Uruchomienie kontenera

Uruchamiamy LiteLLM:

docker compose up -d

Sprawdzamy, czy kontener działa:

docker ps | grep litellm

Test

Pobieramy LITELLM_MASTER_KEY z pliku i testujemy listę modeli:

TOKEN="$(awk -F= '/^LITELLM_MASTER_KEY=/{print $2}' /srv/docker/secrets/litellm/app.env)"

curl -sS \
  -H "Authorization: Bearer ${TOKEN}" \
  http://127.0.0.1:4000/v1/models | head -c 400 && echo

Jeśli dostajesz JSON z listą modeli — LiteLLM działa.


Podgląd logów

Podglądamy logi LiteLLM:

docker logs -f litellm