diff --git a/.env.example b/.env.example index 499d6f8..b21dc07 100644 --- a/.env.example +++ b/.env.example @@ -6,6 +6,7 @@ # --- LiteLLM --- LITELLM_MASTER_KEY=sk-change-me-to-a-random-string +LITELLM_DB_PASSWORD=change-me-to-a-random-string OPENROUTER_API_KEY=sk-or-... SILICONFLOW_API_KEY=sk-... DEEPINFRA_API_KEY=... diff --git a/docker-compose.yml b/docker-compose.yml index 68e8b62..c355d32 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -38,6 +38,22 @@ services: - ANONYMIZED_TELEMETRY=FALSE restart: unless-stopped + # ── Database for LiteLLM ── + litellm-db: + image: postgres:16-alpine + volumes: + - litellm-db-data:/var/lib/postgresql/data + environment: + - POSTGRES_DB=litellm + - POSTGRES_USER=litellm + - POSTGRES_PASSWORD=${LITELLM_DB_PASSWORD} + restart: unless-stopped + healthcheck: + test: ["CMD-SHELL", "pg_isready -U litellm"] + interval: 10s + timeout: 3s + retries: 3 + # ── LLM API proxy ── litellm: image: ghcr.io/berriai/litellm:main-latest @@ -48,11 +64,15 @@ services: - "0.0.0.0:4000:4000" environment: - LITELLM_MASTER_KEY=${LITELLM_MASTER_KEY} + - DATABASE_URL=postgresql://litellm:${LITELLM_DB_PASSWORD}@litellm-db:5432/litellm - OPENROUTER_API_KEY=${OPENROUTER_API_KEY} - SILICONFLOW_API_KEY=${SILICONFLOW_API_KEY} - DEEPINFRA_API_KEY=${DEEPINFRA_API_KEY} - GROQ_API_KEY=${GROQ_API_KEY} - CEREBRAS_API_KEY=${CEREBRAS_API_KEY} + depends_on: + litellm-db: + condition: service_healthy restart: unless-stopped healthcheck: test: ["CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:4000/health/liveliness')"] @@ -111,5 +131,6 @@ services: volumes: valkey-data: chromadb-data: + litellm-db-data: open-webui-data: tailscale-state: