Files
litellm-config/docker-compose.yml
T
vibe-code e91e2d1d5e feat: 手动软踢 Redis key (manual_evict) + redis 卷固定名称
- docker-compose: redis_data 卷加 name: litellm_redis_data, 卷名不再随
  compose 项目名(目录名)漂移, 目录迁移不会新建空卷丢数据
- _check_request_block: 监控条目命中后检查 Redis manual_evict:{clean} key,
  存在即返回 (clean,-2,-2) 恒 429; key 落持久卷, 重启后仍生效,
  显式 DEL 才恢复, 幂等
- async_pre_call_hook: 识别 -2 标记, 返回 manually soft-evicted 429
- 用法: SET/DEL/KEYS manual_evict:* (docker exec litellm_redis redis-cli)
2026-08-13 10:05:02 +00:00

95 lines
3.8 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
services:
litellm:
mem_limit: 2048m
image: ghcr.io/berriai/litellm:main-latest # 注意:1.82.7,1.82.8被投毒
#image: ghcr.io/berriai/litellm@sha256:7c311546c25e7bb6e8cafede9fcd3d0d622ac636b5c9418befaa32e85dfb0186
container_name: litellm
restart: unless-stopped
volumes:
- ./config.yaml:/app/config.yaml
# 【关键】挂载自定义脚本到容器根目录
- ./volc_limit_sync.py:/app/volc_limit_sync.py
# 自动消耗任务(每日 23:20 由 volc_limit_sync 调度触发)
- ./volc_consume.py:/app/volc_consume.py
# 消耗任务语料:宿主真实系统日志(只读)
- /var/log:/host-var-log:ro
command:
- "--config=/app/config.yaml"
ports:
- "23003:4000"
environment:
TZ: Asia/Shanghai
# ⚠️ 必须设置这个环境变量,否则 Python 找不到你的脚本
PYTHONPATH: "/app"
DATABASE_URL: "postgresql://litellm_app:shriek-sixfold-ethanol@192.168.1.34:5432/litellm"
STORE_MODEL_IN_DB: "True"
# --- Modified: 添加 Redis 配置 ---
REDIS_HOST: "redis" # 对应下方 redis 服务的名字
REDIS_PORT: "6379"
# -------------------------------
env_file:
- .env
depends_on:
# - db
- redis # --- New: 依赖 redis 启动 ---
healthcheck:
test:
- CMD-SHELL
- python3 -c "import urllib.request; urllib.request.urlopen('http://localhost:4000/health/liveliness')"
interval: 300s
timeout: 10s
retries: 3
start_period: 40s
# --- New: 添加 Redis 服务 ---
redis:
image: redis:alpine # 使用 alpine 版本,体积非常小
container_name: litellm_redis
restart: unless-stopped
# --maxmemory 512mb : 限制 Redis 最多使用 512MB 内存
# --maxmemory-policy allkeys-lru : 内存满了之后,自动删除最久未使用的缓存(无论是否过期)
# --save "" : 如果你不需要持久化缓存到硬盘(重启后清空),可以把 save 设为空,减少磁盘IO
# command: redis-server --save 60 1 --maxmemory 128mb --maxmemory-policy allkeys-lru --loglevel warning
# --appendonly yes: 开启 AOF,防止 Redis 崩溃/重启丢失快照与用量 key →
# 避免"额度未同步"fallback 窗口(首次同步前)被大请求烧穿免费额度
command: redis-server --maxmemory 32mb --maxmemory-policy allkeys-lru --save 300 1 --appendonly yes --appendfsync everysec --loglevel warning
environment:
TZ: Asia/Shanghai
# 配置详解:
# --maxmemory 32mb: 严格限制内存使用 32MB
# --maxmemory-policy allkeys-lru: 内存满时挤掉旧数据(安全兜底)
# --save 300 1: 每300秒(5分钟)如果至少有1个key变化,就保存快照到磁盘 (降低IO)
volumes:
# 映射数据目录:不挂载则 down/up 重建容器时 RDB+AOF 随容器删除,
# 当日用量统计与快照全丢(此前每次重启都丢)。挂载后 down 不删卷,
# 数据跨重启保留。
- redis_data:/data
# ---------------------------
# db:
# image: postgres:16
# restart: unless-stopped
# container_name: litellm_db
# environment:
# TZ: Asia/Shanghai
# POSTGRES_DB: litellm
# POSTGRES_USER: llmproxy
# POSTGRES_PASSWORD: dbpassword9090
# volumes:
# - postgres_data:/var/lib/postgresql/data
# healthcheck:
# test: ["CMD-SHELL", "pg_isready -d litellm -U llmproxy"]
# interval: 5s
# timeout: 5s
# retries: 10
volumes:
postgres_data:
driver: local
name: litellm_postgres_data
redis_data: # 如果开启了 redis 持久化,这里也要打开
driver: local
# 固定卷名:卷名不再由 compose 项目名(目录名)派生,
# 目录改名/迁移后 up 不会新建空卷导致数据"丢失"
name: litellm_redis_data