# LiteLLM 升级操作手册：1.87.0 -> 1.98.0

<div id="bkmrk---%E7%9B%AE%E6%A0%87%E6%9C%8D%E5%8A%A1%E5%99%A8%EF%BC%9A%60192.168.4.1" style="color: #ffffff; background-color: #002451; font-family: Consolas, 'Courier New', monospace; font-weight: normal; font-size: 14px; line-height: 19px; white-space: pre;">  
<div><span style="color: #bbdaff;">-</span><span style="color: #bbdaff;"> 目标服务器：</span><span style="color: #ff9da4;">`192.168.4.19`</span><span style="color: #bbdaff;">（容器 </span><span style="color: #ff9da4;">`litellm`</span><span style="color: #bbdaff;">，安装目录 </span><span style="color: #ff9da4;">`/opt/litellm`</span><span style="color: #bbdaff;">）</span></div><div><span style="color: #bbdaff;">-</span><span style="color: #bbdaff;"> 计划时间：中午业务低峰执行，预计停机 20-40 秒</span></div><div><span style="color: #bbdaff;">-</span><span style="color: #bbdaff;"> 手册生成：2026-09-01</span></div><div><span style="color: #bbdaff;">-</span><span style="color: #bbdaff;"> 状态：</span><span style="color: #ffc58f; font-weight: bold;">\*\*预检已通过，尚未执行升级\*\*</span><span style="color: #bbdaff;">（生产仍运行 1.87.0）</span></div>  
<div><span style="color: #ffffff;">---</span></div>  
<div><span style="color: #d1f1a9; font-weight: bold;">\## 一、现状与版本核实</span></div>  
<div><span style="color: #ffffff;">| 项目 | 值 |</span></div><div><span style="color: #ffffff;">|---|---|</span></div><div><span style="color: #ffffff;">| 当前镜像 | </span><span style="color: #ff9da4;">`ghcr.io/berriai/litellm:1.87.0`</span><span style="color: #ffffff;">（2026-05-23 发布） |</span></div><div><span style="color: #ffffff;">| 目标版本 | </span><span style="color: #ff9da4;">`v1.98.0`</span><span style="color: #ffffff;">（2026-08-22，官方 Latest Release） |</span></div><div><span style="color: #ffffff;">| 更新版本情况 | </span><span style="color: #ff9da4;">`1.99.0-rc.2`</span><span style="color: #ffffff;">、</span><span style="color: #ff9da4;">`1.100.0-rc.1`</span><span style="color: #ffffff;"> 均为 RC，生产不使用 |</span></div><div><span style="color: #ffffff;">| 部署方式 | docker-compose v5.3.1，</span><span style="color: #ff9da4;">`/opt/litellm/docker-compose.yml`</span><span style="color: #ffffff;"> |</span></div><div><span style="color: #ffffff;">| 数据库 | </span><span style="color: #ff9da4;">`postgres:16`</span><span style="color: #ffffff;">，bind mount </span><span style="color: #ff9da4;">`/opt/litellm/postgres`</span><span style="color: #ffffff;">，库名 </span><span style="color: #ff9da4;">`litellm`</span><span style="color: #ffffff;"> |</span></div><div><span style="color: #ffffff;">| 配置挂载 | </span><span style="color: #ff9da4;">`./config.yaml`</span><span style="color: #ffffff;"> -&gt; </span><span style="color: #ff9da4;">`/app/config.yaml`</span><span style="color: #ffffff;"> |</span></div><div><span style="color: #ffffff;">| 关键开关 | </span><span style="color: #ff9da4;">`STORE\_MODEL\_IN\_DB=True`</span><span style="color: #ffffff;">、</span><span style="color: #ff9da4;">`restart: always`</span><span style="color: #ffffff;"> |</span></div><div><span style="color: #ffffff;">| 模型数 | 11 个 |</span></div><div><span style="color: #ffffff;">| 资源 | 磁盘剩 1.8T，内存 15G，DB 体积 386MB |</span></div>  
<div><span style="color: #ffc58f; font-weight: bold;">\*\*为什么该升\*\*</span><span style="color: #ffffff;">：官方只维护最近 4 个稳定小版本（当前 1.95-1.98），1.87.0 已停止接收修复。</span></div>  
<div><span style="color: #ffffff;">---</span></div>  
<div><span style="color: #d1f1a9; font-weight: bold;">\## 二、预检结论（2026-09-01 已实测，生产未受影响）</span></div>  
<div><span style="color: #bbdaff;">1.</span><span style="color: #bbdaff;"> 镜像可用性</span></div><div><span style="color: #bbdaff;"> </span><span style="color: #bbdaff;">-</span><span style="color: #bbdaff;"> </span><span style="color: #ff9da4;">`ghcr.io`</span><span style="color: #bbdaff;"> 直连会卡死（11/21 层后无进展），</span><span style="color: #ffc58f; font-weight: bold;">\*\*必须用镜像源\*\*</span></div><div><span style="color: #bbdaff;"> </span><span style="color: #bbdaff;">-</span><span style="color: #bbdaff;"> </span><span style="color: #ff9da4;">`ghcr.nju.edu.cn/berriai/litellm:1.98.0`</span><span style="color: #bbdaff;"> 约 30 秒拉取完成，已在本地</span></div><div><span style="color: #bbdaff;"> </span><span style="color: #bbdaff;">-</span><span style="color: #bbdaff;"> </span><span style="color: #ff9da4;">`docker.litellm.ai/berriai/litellm:1.98.0`</span><span style="color: #bbdaff;"> 亦验证可拉</span></div><div><span style="color: #bbdaff;">2.</span><span style="color: #bbdaff;"> 备份可用性</span></div><div><span style="color: #bbdaff;"> </span><span style="color: #bbdaff;">-</span><span style="color: #bbdaff;"> 已生成 </span><span style="color: #ff9da4;">`/opt/litellm/backup\_litellm\_db\_20260901-020955.dump`</span><span style="color: #bbdaff;">（20MB，</span><span style="color: #ff9da4;">`pg\_dump -Fc`</span><span style="color: #bbdaff;">）</span></div><div><span style="color: #bbdaff;"> </span><span style="color: #bbdaff;">-</span><span style="color: #bbdaff;"> 已成功 restore 到临时库，备份有效</span></div><div><span style="color: #bbdaff;">3.</span><span style="color: #bbdaff;"> 数据库迁移</span></div><div><span style="color: #bbdaff;"> </span><span style="color: #bbdaff;">-</span><span style="color: #bbdaff;"> 用克隆库实跑 1.98.0：</span><span style="color: #ffc58f; font-weight: bold;">\*\*28 个迁移自动应用成功\*\*</span></div><div><span style="color: #bbdaff;"> </span><span style="color: #bbdaff;">-</span><span style="color: #bbdaff;"> 日志链路：</span><span style="color: #ff9da4;">`prisma migrate deploy`</span><span style="color: #bbdaff;"> -&gt; </span><span style="color: #ff9da4;">`Migration diff applied`</span><span style="color: #bbdaff;"> -&gt; </span><span style="color: #ff9da4;">`Post-migration sanity check completed`</span><span style="color: #bbdaff;">，无报错</span></div><div><span style="color: #bbdaff;">4.</span><span style="color: #bbdaff;"> 功能一致性</span></div><div><span style="color: #bbdaff;"> </span><span style="color: #bbdaff;">-</span><span style="color: #bbdaff;"> 11 个模型全部注册，</span><span style="color: #ff9da4;">`/model/info`</span><span style="color: #bbdaff;"> 入/出/缓存单价与 1.87 </span><span style="color: #ffc58f; font-weight: bold;">\*\*逐项一致，0 差异\*\*</span></div><div><span style="color: #bbdaff;"> </span><span style="color: #bbdaff;">-</span><span style="color: #bbdaff;"> 真实调用通过：</span><span style="color: #ff9da4;">`qwen3.7-plus`</span><span style="color: #bbdaff;">、</span><span style="color: #ff9da4;">`deepseek-v4-flash-vision-exp`</span><span style="color: #bbdaff;"> 均正常返回</span></div><div><span style="color: #bbdaff;">5.</span><span style="color: #bbdaff;"> 兼容性风险</span></div><div><span style="color: #bbdaff;"> </span><span style="color: #bbdaff;">-</span><span style="color: #bbdaff;"> 1.88-1.98 release notes </span><span style="color: #ffc58f; font-weight: bold;">\*\*无 Breaking Changes 段落\*\*</span></div><div><span style="color: #bbdaff;"> </span><span style="color: #bbdaff;">-</span><span style="color: #bbdaff;"> 已知高危 issue #33650（1.90.0 起全新库迁移静默失败）已在 </span><span style="color: #ffc58f; font-weight: bold;">\*\*v1.90.6 修复\*\*</span><span style="color: #bbdaff;">，且只影响全新库；本次是增量升级，不受影响</span></div><div><span style="color: #bbdaff;"> </span><span style="color: #bbdaff;">-</span><span style="color: #bbdaff;"> 预检日志中无 unknown / invalid / deprecated 配置项告警</span></div>  
<div><span style="color: #ffffff;">---</span></div>  
<div><span style="color: #d1f1a9; font-weight: bold;">\## 三、升级步骤</span></div>  
<div><span style="color: #d1f1a9; font-weight: bold;">\### 步骤 0：升级前再备份一次（务必，捕获当天用量数据）</span></div>  
<div><span style="color: #ffffff;">```bash</span></div><div><span style="color: #bbdaff;">cd</span><span style="color: #ffffff;"> </span><span style="color: #d1f1a9;">/opt/litellm</span></div><div><span style="color: #bbdaff;">cp</span><span style="color: #ffffff;"> </span><span style="color: #d1f1a9;">config.yaml</span><span style="color: #ffffff;"> </span><span style="color: #d1f1a9;">config.yaml.bak.</span><span style="color: #ffffff;">$(</span><span style="color: #bbdaff;">date</span><span style="color: #ffffff;"> </span><span style="color: #d1f1a9;">+%Y%m%d-%H%M</span><span style="color: #ffffff;">)</span></div><div><span style="color: #bbdaff;">cp</span><span style="color: #ffffff;"> </span><span style="color: #d1f1a9;">docker-compose.yml</span><span style="color: #ffffff;"> </span><span style="color: #d1f1a9;">docker-compose.yml.bak.</span><span style="color: #ffffff;">$(</span><span style="color: #bbdaff;">date</span><span style="color: #ffffff;"> </span><span style="color: #d1f1a9;">+%Y%m%d-%H%M</span><span style="color: #ffffff;">)</span></div><div><span style="color: #bbdaff;">docker</span><span style="color: #ffffff;"> </span><span style="color: #d1f1a9;">exec</span><span style="color: #ffffff;"> </span><span style="color: #d1f1a9;">litellm-postgres</span><span style="color: #ffffff;"> </span><span style="color: #d1f1a9;">pg\_dump</span><span style="color: #ffffff;"> </span><span style="color: #ffffff;">-U</span><span style="color: #ffffff;"> </span><span style="color: #d1f1a9;">litellm</span><span style="color: #ffffff;"> </span><span style="color: #ffffff;">-d</span><span style="color: #ffffff;"> </span><span style="color: #d1f1a9;">litellm</span><span style="color: #ffffff;"> </span><span style="color: #ffffff;">-Fc</span><span style="color: #ffffff;"> </span><span style="color: #ffffff;">-f</span><span style="color: #ffffff;"> </span><span style="color: #d1f1a9;">/tmp/pre.dump</span></div><div><span style="color: #bbdaff;">docker</span><span style="color: #ffffff;"> </span><span style="color: #d1f1a9;">cp</span><span style="color: #ffffff;"> </span><span style="color: #d1f1a9;">litellm-postgres:/tmp/pre.dump</span><span style="color: #ffffff;"> </span><span style="color: #d1f1a9;">/opt/litellm/backup\_before\_1.98\_</span><span style="color: #ffffff;">$(</span><span style="color: #bbdaff;">date</span><span style="color: #ffffff;"> </span><span style="color: #d1f1a9;">+%Y%m%d-%H%M</span><span style="color: #ffffff;">)</span><span style="color: #d1f1a9;">.dump</span></div><div><span style="color: #bbdaff;">docker</span><span style="color: #ffffff;"> </span><span style="color: #d1f1a9;">exec</span><span style="color: #ffffff;"> </span><span style="color: #d1f1a9;">litellm-postgres</span><span style="color: #ffffff;"> </span><span style="color: #d1f1a9;">rm</span><span style="color: #ffffff;"> </span><span style="color: #ffffff;">-f</span><span style="color: #ffffff;"> </span><span style="color: #d1f1a9;">/tmp/pre.dump</span></div><div><span style="color: #bbdaff;">ls</span><span style="color: #ffffff;"> </span><span style="color: #ffffff;">-lh</span><span style="color: #ffffff;"> </span><span style="color: #d1f1a9;">/opt/litellm/backup\_before\_1.98\_</span><span style="color: #ff9da4;">\*</span><span style="color: #d1f1a9;">.dump</span></div><div><span style="color: #ffffff;">```</span></div>  
<div><span style="color: #d1f1a9; font-weight: bold;">\### 步骤 1：改镜像 tag</span></div>  
<div><span style="color: #ffffff;">```bash</span></div><div><span style="color: #bbdaff;">cd</span><span style="color: #ffffff;"> </span><span style="color: #d1f1a9;">/opt/litellm</span></div><div><span style="color: #bbdaff;">sed</span><span style="color: #ffffff;"> </span><span style="color: #ffffff;">-i</span><span style="color: #ffffff;"> </span><span style="color: #d1f1a9;">'s#image: ghcr.io/berriai/litellm:1.87.0#image: ghcr.nju.edu.cn/berriai/litellm:1.98.0#'</span><span style="color: #ffffff;"> </span><span style="color: #d1f1a9;">docker-compose.yml</span></div><div><span style="color: #bbdaff;">grep</span><span style="color: #ffffff;"> </span><span style="color: #ffffff;">-n</span><span style="color: #ffffff;"> </span><span style="color: #d1f1a9;">"image:"</span><span style="color: #ffffff;"> </span><span style="color: #d1f1a9;">docker-compose.yml</span></div><div><span style="color: #ffffff;">```</span></div>  
<div><span style="color: #d1f1a9; font-weight: bold;">\### 步骤 2：重建容器（只动 litellm，postgres 不重启）</span></div>  
<div><span style="color: #ffffff;">```bash</span></div><div><span style="color: #bbdaff;">cd</span><span style="color: #ffffff;"> </span><span style="color: #d1f1a9;">/opt/litellm</span></div><div><span style="color: #bbdaff;">docker</span><span style="color: #ffffff;"> </span><span style="color: #d1f1a9;">compose</span><span style="color: #ffffff;"> </span><span style="color: #d1f1a9;">up</span><span style="color: #ffffff;"> </span><span style="color: #ffffff;">-d</span><span style="color: #ffffff;"> </span><span style="color: #d1f1a9;">litellm</span></div><div><span style="color: #ffffff;">```</span></div>  
<div><span style="color: #d1f1a9; font-weight: bold;">\### 步骤 3：盯日志确认迁移与模型加载</span></div>  
<div><span style="color: #ffffff;">```bash</span></div><div><span style="color: #bbdaff;">docker</span><span style="color: #ffffff;"> </span><span style="color: #d1f1a9;">logs</span><span style="color: #ffffff;"> </span><span style="color: #ffffff;">-f</span><span style="color: #ffffff;"> </span><span style="color: #d1f1a9;">litellm</span></div><div><span style="color: #ffffff;">```</span></div>  
<div><span style="color: #ffffff;">成功标志（顺序出现）：</span></div><div><span style="color: #bbdaff;">-</span><span style="color: #bbdaff;"> </span><span style="color: #ff9da4;">`Applying migration ...`</span><span style="color: #bbdaff;">（28 条）</span></div><div><span style="color: #bbdaff;">-</span><span style="color: #bbdaff;"> </span><span style="color: #ff9da4;">`Migration diff applied successfully`</span><span style="color: #bbdaff;"> + </span><span style="color: #ff9da4;">`Post-migration sanity check completed`</span></div><div><span style="color: #bbdaff;">-</span><span style="color: #bbdaff;"> </span><span style="color: #ff9da4;">`LiteLLM: Proxy initialized with Config, Set models:`</span><span style="color: #bbdaff;"> 后列出 11 个模型</span></div><div><span style="color: #bbdaff;">-</span><span style="color: #bbdaff;"> 无 </span><span style="color: #ff9da4;">`Traceback`</span><span style="color: #bbdaff;"> / </span><span style="color: #ff9da4;">`ERROR`</span></div>  
<div><span style="color: #ff9da4;">`Ctrl+C`</span><span style="color: #ffffff;"> 退出日志跟踪。</span></div>  
<div><span style="color: #d1f1a9; font-weight: bold;">\### 步骤 4：验证</span></div>  
<div><span style="color: #ffffff;">```bash</span></div><div><span style="color: #7285b7;">\# 健康检查</span></div><div><span style="color: #bbdaff;">curl</span><span style="color: #ffffff;"> </span><span style="color: #ffffff;">-s</span><span style="color: #ffffff;"> </span><span style="color: #d1f1a9;">http://127.0.0.1:4000/health/readiness</span></div><div><span style="color: #7285b7;">\# 期望 {"status":"healthy","db":"connected"}</span></div>  
<div><span style="color: #7285b7;">\# 模型数量应为 11</span></div><div><span style="color: #bbdaff;">curl</span><span style="color: #ffffff;"> </span><span style="color: #ffffff;">-s</span><span style="color: #ffffff;"> </span><span style="color: #d1f1a9;">http://127.0.0.1:4000/v1/models</span><span style="color: #ffffff;"> </span><span style="color: #ffffff;">-H</span><span style="color: #ffffff;"> </span><span style="color: #d1f1a9;">"Authorization: Bearer sk-xxxxxxxxxxxx"</span><span style="color: #ffffff;"> </span><span style="color: #99ffff;">|</span><span style="color: #ffffff;"> </span><span style="color: #bbdaff;">python3</span><span style="color: #ffffff;"> </span><span style="color: #ffffff;">-c</span><span style="color: #ffffff;"> </span><span style="color: #d1f1a9;">"import json,sys; d=json.load(sys.stdin); print(len(d\['data'\])); \[print(' -',m\['id'\]) for m in d\['data'\]\]"</span></div>  
<div><span style="color: #7285b7;">\# 实际调用一次最便宜的模型</span></div><div><span style="color: #bbdaff;">curl</span><span style="color: #ffffff;"> </span><span style="color: #ffffff;">-s</span><span style="color: #ffffff;"> </span><span style="color: #d1f1a9;">http://127.0.0.1:4000/v1/chat/completions</span><span style="color: #ffffff;"> </span><span style="color: #ffffff;">-H</span><span style="color: #ffffff;"> </span><span style="color: #d1f1a9;">"Authorization: Bearer sk-xxxxxxxxxxxx"</span><span style="color: #ffffff;"> </span><span style="color: #ffc58f;">\\</span></div><div><span style="color: #ffffff;"> -H "Content-Type: application/json" \\</span></div><div><span style="color: #ffffff;"> </span><span style="color: #ffffff;">-d</span><span style="color: #ffffff;"> </span><span style="color: #d1f1a9;">'{"model":"qwen3.7-plus","messages":\[{"role":"user","content":"hi"}\],"max\_tokens":5}'</span></div>  
<div><span style="color: #7285b7;">\# 确认版本</span></div><div><span style="color: #bbdaff;">docker</span><span style="color: #ffffff;"> </span><span style="color: #d1f1a9;">exec</span><span style="color: #ffffff;"> </span><span style="color: #d1f1a9;">litellm</span><span style="color: #ffffff;"> </span><span style="color: #d1f1a9;">litellm</span><span style="color: #ffffff;"> </span><span style="color: #ffffff;">--version</span></div><div><span style="color: #bbdaff;">docker</span><span style="color: #ffffff;"> </span><span style="color: #d1f1a9;">inspect</span><span style="color: #ffffff;"> </span><span style="color: #d1f1a9;">litellm</span><span style="color: #ffffff;"> </span><span style="color: #ffffff;">--format</span><span style="color: #ffffff;"> </span><span style="color: #d1f1a9;">"{{.Config.Image}}"</span></div><div><span style="color: #ffffff;">```</span></div>  
<div><span style="color: #ffffff;">界面侧还要确认：</span></div><div><span style="color: #bbdaff;">-</span><span style="color: #bbdaff;"> Costs 页面 11 个模型金额正常（单位仍显示 </span><span style="color: #ff9da4;">`$`</span><span style="color: #bbdaff;">，数值为人民币口径不变）</span></div><div><span style="color: #bbdaff;">-</span><span style="color: #bbdaff;"> Usage / 预算 / Key 列表能正常打开</span></div><div><span style="color: #bbdaff;">-</span><span style="color: #bbdaff;"> Admin UI 这版从 antd/Tremor 改为 shadcn，</span><span style="color: #ffc58f; font-weight: bold;">\*\*外观会变\*\*</span><span style="color: #bbdaff;">，属预期</span></div>  
<div><span style="color: #ffffff;">---</span></div>  
<div><span style="color: #d1f1a9; font-weight: bold;">\## 四、回滚方案</span></div>  
<div><span style="color: #d1f1a9; font-weight: bold;">\### 方案 A（首选，轻量）：改回旧镜像</span></div>  
<div><span style="color: #ffffff;">1.98 新增的都是新表/新列，1.87 的 Prisma 只查询已知列，通常可直接回退：</span></div>  
<div><span style="color: #ffffff;">```bash</span></div><div><span style="color: #bbdaff;">cd</span><span style="color: #ffffff;"> </span><span style="color: #d1f1a9;">/opt/litellm</span></div><div><span style="color: #bbdaff;">sed</span><span style="color: #ffffff;"> </span><span style="color: #ffffff;">-i</span><span style="color: #ffffff;"> </span><span style="color: #d1f1a9;">'s#image: ghcr.nju.edu.cn/berriai/litellm:1.98.0#image: ghcr.io/berriai/litellm:1.87.0#'</span><span style="color: #ffffff;"> </span><span style="color: #d1f1a9;">docker-compose.yml</span></div><div><span style="color: #bbdaff;">docker</span><span style="color: #ffffff;"> </span><span style="color: #d1f1a9;">compose</span><span style="color: #ffffff;"> </span><span style="color: #d1f1a9;">up</span><span style="color: #ffffff;"> </span><span style="color: #ffffff;">-d</span><span style="color: #ffffff;"> </span><span style="color: #d1f1a9;">litellm</span></div><div><span style="color: #bbdaff;">docker</span><span style="color: #ffffff;"> </span><span style="color: #d1f1a9;">logs</span><span style="color: #ffffff;"> </span><span style="color: #ffffff;">-f</span><span style="color: #ffffff;"> </span><span style="color: #d1f1a9;">litellm</span></div><div><span style="color: #ffffff;">```</span></div>  
<div><span style="color: #ffffff;">若 1.87 启动报迁移相关错误（</span><span style="color: #ff9da4;">`relation does not exist`</span><span style="color: #ffffff;"> / </span><span style="color: #ff9da4;">`migration state mismatch`</span><span style="color: #ffffff;">），删除 1.98 新增的迁移记录后重启：</span></div>  
<div><span style="color: #ffffff;">```bash</span></div><div><span style="color: #bbdaff;">docker</span><span style="color: #ffffff;"> </span><span style="color: #d1f1a9;">exec</span><span style="color: #ffffff;"> </span><span style="color: #d1f1a9;">litellm-postgres</span><span style="color: #ffffff;"> </span><span style="color: #d1f1a9;">psql</span><span style="color: #ffffff;"> </span><span style="color: #ffffff;">-U</span><span style="color: #ffffff;"> </span><span style="color: #d1f1a9;">litellm</span><span style="color: #ffffff;"> </span><span style="color: #ffffff;">-d</span><span style="color: #ffffff;"> </span><span style="color: #d1f1a9;">litellm</span><span style="color: #ffffff;"> </span><span style="color: #ffffff;">-c</span><span style="color: #ffffff;"> </span><span style="color: #ffc58f;">\\</span></div><div><span style="color: #ffffff;"> "DELETE FROM \\"\_prisma\_migrations\\" WHERE migration\_name &gt; '20260514120000\_add\_blocked\_to\_proxy\_model\_table';"</span></div><div><span style="color: #bbdaff;">docker</span><span style="color: #ffffff;"> </span><span style="color: #d1f1a9;">compose</span><span style="color: #ffffff;"> </span><span style="color: #d1f1a9;">restart</span><span style="color: #ffffff;"> </span><span style="color: #d1f1a9;">litellm</span></div><div><span style="color: #ffffff;">```</span></div>  
<div><span style="color: #d1f1a9; font-weight: bold;">\### 方案 B（彻底）：用备份重建库</span></div>  
<div><span style="color: #ffffff;">```bash</span></div><div><span style="color: #bbdaff;">cd</span><span style="color: #ffffff;"> </span><span style="color: #d1f1a9;">/opt/litellm</span></div><div><span style="color: #bbdaff;">docker</span><span style="color: #ffffff;"> </span><span style="color: #d1f1a9;">compose</span><span style="color: #ffffff;"> </span><span style="color: #d1f1a9;">stop</span><span style="color: #ffffff;"> </span><span style="color: #d1f1a9;">litellm</span></div><div><span style="color: #bbdaff;">docker</span><span style="color: #ffffff;"> </span><span style="color: #d1f1a9;">exec</span><span style="color: #ffffff;"> </span><span style="color: #d1f1a9;">litellm-postgres</span><span style="color: #ffffff;"> </span><span style="color: #d1f1a9;">psql</span><span style="color: #ffffff;"> </span><span style="color: #ffffff;">-U</span><span style="color: #ffffff;"> </span><span style="color: #d1f1a9;">litellm</span><span style="color: #ffffff;"> </span><span style="color: #ffffff;">-d</span><span style="color: #ffffff;"> </span><span style="color: #d1f1a9;">postgres</span><span style="color: #ffffff;"> </span><span style="color: #ffffff;">-c</span><span style="color: #ffffff;"> </span><span style="color: #d1f1a9;">"DROP DATABASE litellm;"</span></div><div><span style="color: #bbdaff;">docker</span><span style="color: #ffffff;"> </span><span style="color: #d1f1a9;">exec</span><span style="color: #ffffff;"> </span><span style="color: #d1f1a9;">litellm-postgres</span><span style="color: #ffffff;"> </span><span style="color: #d1f1a9;">psql</span><span style="color: #ffffff;"> </span><span style="color: #ffffff;">-U</span><span style="color: #ffffff;"> </span><span style="color: #d1f1a9;">litellm</span><span style="color: #ffffff;"> </span><span style="color: #ffffff;">-d</span><span style="color: #ffffff;"> </span><span style="color: #d1f1a9;">postgres</span><span style="color: #ffffff;"> </span><span style="color: #ffffff;">-c</span><span style="color: #ffffff;"> </span><span style="color: #d1f1a9;">"CREATE DATABASE litellm OWNER litellm;"</span></div><div><span style="color: #bbdaff;">docker</span><span style="color: #ffffff;"> </span><span style="color: #d1f1a9;">cp</span><span style="color: #ffffff;"> </span><span style="color: #d1f1a9;">backup\_before\_1.98\_</span><span style="color: #99ffff;">&lt;</span><span style="color: #d1f1a9;">时间</span><span style="color: #ffffff;">戳</span><span style="color: #99ffff;">&gt;</span><span style="color: #d1f1a9;">.dump</span><span style="color: #ffffff;"> </span><span style="color: #d1f1a9;">litellm-postgres:/tmp/r.dump</span></div><div><span style="color: #bbdaff;">docker</span><span style="color: #ffffff;"> </span><span style="color: #d1f1a9;">exec</span><span style="color: #ffffff;"> </span><span style="color: #d1f1a9;">litellm-postgres</span><span style="color: #ffffff;"> </span><span style="color: #d1f1a9;">pg\_restore</span><span style="color: #ffffff;"> </span><span style="color: #ffffff;">-U</span><span style="color: #ffffff;"> </span><span style="color: #d1f1a9;">litellm</span><span style="color: #ffffff;"> </span><span style="color: #ffffff;">-d</span><span style="color: #ffffff;"> </span><span style="color: #d1f1a9;">litellm</span><span style="color: #ffffff;"> </span><span style="color: #d1f1a9;">/tmp/r.dump</span><span style="color: #ffffff;"> </span><span style="color: #ffffff;">--no-owner</span></div><div><span style="color: #bbdaff;">docker</span><span style="color: #ffffff;"> </span><span style="color: #d1f1a9;">exec</span><span style="color: #ffffff;"> </span><span style="color: #d1f1a9;">litellm-postgres</span><span style="color: #ffffff;"> </span><span style="color: #d1f1a9;">rm</span><span style="color: #ffffff;"> </span><span style="color: #ffffff;">-f</span><span style="color: #ffffff;"> </span><span style="color: #d1f1a9;">/tmp/r.dump</span></div><div><span style="color: #7285b7;">\# 同时把 docker-compose.yml 的 image 改回 1.87.0</span></div><div><span style="color: #bbdaff;">docker</span><span style="color: #ffffff;"> </span><span style="color: #d1f1a9;">compose</span><span style="color: #ffffff;"> </span><span style="color: #d1f1a9;">up</span><span style="color: #ffffff;"> </span><span style="color: #ffffff;">-d</span></div><div><span style="color: #ffffff;">```</span></div>  
<div><span style="color: #ffc58f;">&gt; 注意：方案 B 会丢弃备份点之后的所有用量与 Key 数据，属最后手段。</span></div>  
<div><span style="color: #ffffff;">---</span></div>  
<div><span style="color: #d1f1a9; font-weight: bold;">\## 五、1.98.0 相对 1.87.0 新增的 28 个迁移（回滚清理时对照用）</span></div>  
<div><span style="color: #ffffff;">```</span></div><div><span style="color: #ffffff;">20260520120000\_add\_mcp\_env\_vars</span></div><div><span style="color: #ffffff;">20260526120000\_add\_oauth\_passthrough\_to\_mcp\_servers</span></div><div><span style="color: #ffffff;">20260604120000\_add\_oauth2\_flow\_to\_mcp\_servers</span></div><div><span style="color: #ffffff;">20260605182307\_add\_timeout\_to\_mcp\_server\_table</span></div><div><span style="color: #ffffff;">20260626120000\_add\_mcp\_tool\_search\_enabled</span></div><div><span style="color: #ffffff;">20260629000000\_add\_max\_concurrent\_requests\_to\_mcp\_server\_table</span></div><div><span style="color: #ffffff;">20260630120000\_add\_token\_exchange\_to\_mcp\_servers</span></div><div><span style="color: #ffffff;">20260630190000\_add\_budget\_fallbacks\_to\_litellm\_verification\_token</span></div><div><span style="color: #ffffff;">20260703120000\_add\_token\_exchange\_profile\_to\_mcp\_servers</span></div><div><span style="color: #ffffff;">20260710000000\_add\_dcr\_bridge\_to\_mcp\_server\_table</span></div><div><span style="color: #ffffff;">20260713010000\_add\_ptu\_columns\_to\_daily\_team\_spend</span></div><div><span style="color: #ffffff;">20260713230852\_add\_key\_type\_to\_litellm\_verification\_token</span></div><div><span style="color: #ffffff;">20260715000000\_add\_issuer\_to\_mcp\_server\_table</span></div><div><span style="color: #ffffff;">20260717000000\_add\_compression\_saved\_tokens</span></div><div><span style="color: #ffffff;">20260717000000\_add\_mcp\_server\_oauth\_client\_table</span></div><div><span style="color: #ffffff;">20260718000000\_add\_savings\_spend</span></div><div><span style="color: #ffffff;">20260721000000\_add\_sso\_identity\_assertion</span></div><div><span style="color: #ffffff;">20260724000000\_add\_spend\_log\_tool\_index\_start\_time\_idx</span></div><div><span style="color: #ffffff;">20260725000000\_add\_daily\_tool\_spend</span></div><div><span style="color: #ffffff;">20260729000000\_add\_reload\_tracking\_to\_litellm\_config</span></div><div><span style="color: #ffffff;">20260730000000\_add\_api\_key\_and\_request\_tags\_to\_managed\_object\_table</span></div><div><span style="color: #ffffff;">20260731000000\_add\_autorouter\_savings\_spend</span></div><div><span style="color: #ffffff;">20260803000000\_add\_daily\_gateway\_requests</span></div><div><span style="color: #ffffff;">20260805000000\_add\_autorouter\_session\_rollup</span></div><div><span style="color: #ffffff;">20260807000000\_add\_autorouter\_session\_tier\_turns</span></div><div><span style="color: #ffffff;">20260810000000\_add\_verificationtoken\_settings\_updated\_at</span></div><div><span style="color: #ffffff;">20260811172448\_add\_shadow\_eval</span></div><div><span style="color: #ffffff;">20260813180408\_add\_shadow\_eval\_direction</span></div><div><span style="color: #ffffff;">```</span></div>  
<div><span style="color: #ffffff;">升级前库内迁移头（回滚判定基线）：</span><span style="color: #ff9da4;">`20260514120000\_add\_blocked\_to\_proxy\_model\_table`</span></div>  
<div><span style="color: #ffffff;">---</span></div>  
<div><span style="color: #d1f1a9; font-weight: bold;">\## 六、注意事项</span></div>  
<div><span style="color: #bbdaff;">-</span><span style="color: #bbdaff;"> </span><span style="color: #ffc58f; font-weight: bold;">\*\*迁移只前进不后退\*\*</span><span style="color: #bbdaff;">：不要只改回 tag 就认为万事大吉，报迁移错时按方案 A 清理 </span><span style="color: #ff9da4;">`\_prisma\_migrations`</span></div><div><span style="color: #bbdaff;">-</span><span style="color: #bbdaff;"> </span><span style="color: #ffc58f; font-weight: bold;">\*\*不要改 </span><span style="color: #ff9da4;">`LITELLM\_MASTER\_KEY`</span><span style="color: #ffc58f; font-weight: bold;">\*\*</span><span style="color: #bbdaff;">：当前未在 compose 显式设置 </span><span style="color: #ff9da4;">`LITELLM\_SALT\_KEY`</span><span style="color: #bbdaff;">，LiteLLM 用 master key 派生加密盐，改 master key 会导致库内已存的 LLM API Key 无法解密</span></div><div><span style="color: #bbdaff;">-</span><span style="color: #bbdaff;"> </span><span style="color: #ffc58f; font-weight: bold;">\*\*保留 1.87.0 镜像\*\*</span><span style="color: #bbdaff;">：升级后近期不要 </span><span style="color: #ff9da4;">`docker image prune`</span><span style="color: #bbdaff;">，它是快速回滚的保险</span></div><div><span style="color: #bbdaff;">-</span><span style="color: #bbdaff;"> </span><span style="color: #ffc58f; font-weight: bold;">\*\*1.98 会多一条启动 warning\*\*</span><span style="color: #bbdaff;">：</span><span style="color: #ff9da4;">`register\_model: model=... not in built-in cost map ... cache cost fields will default to 0`</span><span style="color: #bbdaff;">。只影响“缓存写入（cache creation）”成本统计，现有 </span><span style="color: #ff9da4;">`cache\_read\_input\_token\_cost`</span><span style="color: #bbdaff;"> 照常生效（已实测单价一致）。如要消除，可在各 </span><span style="color: #ff9da4;">`model\_info`</span><span style="color: #bbdaff;"> 补 </span><span style="color: #ff9da4;">`cache\_creation\_input\_token\_cost`</span></div><div><span style="color: #bbdaff;">-</span><span style="color: #bbdaff;"> </span><span style="color: #ffc58f; font-weight: bold;">\*\*1.98.0 主要新特性\*\*</span><span style="color: #bbdaff;">（与本项目相关）：PTU 按部署计费、可调用的 routing groups、6 个 </span><span style="color: #ff9da4;">`x-litellm-response-cost-\*`</span><span style="color: #bbdaff;"> 响应头拆分成本、Admin UI 大改版</span></div><div><span style="color: #bbdaff;">-</span><span style="color: #bbdaff;"> 升级当天留意 SMTP 告警邮件是否正常发出（</span><span style="color: #ff9da4;">`alerting: \["email"\]`</span><span style="color: #bbdaff;"> 依赖 compose 中的 SMTP 变量）</span></div>  
<div><span style="color: #ffffff;">---</span></div>  
<div><span style="color: #d1f1a9; font-weight: bold;">\## 七、执行确认清单</span></div>  
<div><span style="color: #bbdaff;">-</span><span style="color: #bbdaff;"> \[ \] 步骤 0 当天新备份已生成并确认文件大小</span></div><div><span style="color: #bbdaff;">-</span><span style="color: #bbdaff;"> \[ \] 步骤 1 image 行已改为 </span><span style="color: #ff9da4;">`ghcr.nju.edu.cn/berriai/litellm:1.98.0`</span></div><div><span style="color: #bbdaff;">-</span><span style="color: #bbdaff;"> \[ \] 步骤 3 日志出现 28 条 Applying migration 且无 ERROR</span></div><div><span style="color: #bbdaff;">-</span><span style="color: #bbdaff;"> \[ \] 步骤 4 健康检查 healthy + db connected</span></div><div><span style="color: #bbdaff;">-</span><span style="color: #bbdaff;"> \[ \] 步骤 4 </span><span style="color: #ff9da4;">`/v1/models`</span><span style="color: #bbdaff;"> 返回 11 个模型</span></div><div><span style="color: #bbdaff;">-</span><span style="color: #bbdaff;"> \[ \] 步骤 4 实际调用返回 200</span></div><div><span style="color: #bbdaff;">-</span><span style="color: #bbdaff;"> \[ \] Costs 页面金额与升级前一致</span></div><div><span style="color: #bbdaff;">-</span><span style="color: #bbdaff;"> \[ \] 业务侧同事确认网关可用</span></div>  
</div>