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.1do 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 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:
# 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:
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:
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