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