OmniRoute 卸载完全指南:内置脚本、手动清理与数据目录详解
【免费下载链接】OmniRouteNever stop coding. Free MIT AI gateway: one endpoint, 352 providers (150+ free), 1200+ models Kimi, Claude, GPT, Gemini, GLM, DeepSeek, MiniMax. Works with Claude Code, Codex, Cursor, OpenCode, Cline & Copilot. Quota-aware auto-fallback, RTK+Caveman compression saves 15-95% tokens, MCP/A2A, Desktop/PWA. Built by 550+ contributors项目地址: https://gitcode.com/GitHub_Trending/om/OmniRoute
导读
OmniRoute 是一个聚合 350+ 模型供应商的统一 AI 网关,使用过程中会在本地持久化大量数据——供应商凭据、Combo 组合、调用日志与自动备份等。本指南完整梳理 OmniRoute 的卸载路径:从 v3.6.2+ 内置的保留/清除双模式脚本,到 npm、pnpm、Docker、Docker Compose、Electron 桌面端与源码安装各自的手动清理步骤,并深入到 src/lib/dataPaths.ts 与 scripts/build/uninstall.mjs 的源码层面,说明数据目录的解析规则与卸载脚本的真实行为,最后给出卸载后的残留验证方法。读完你既能"留数据重装",也能"一次性彻底清除",覆盖 Linux / macOS / Windows / Docker 全平台。
一、卸载前须知:两种语义截然不同的"卸载"
OmniRoute 的卸载动作有保留数据与彻底清除两种模式,区别在于是否删除~/.omniroute/数据目录中的内容。数据目录里保存着 SQLite 主数据库(供应商配置、Combo、设置、API Key)、请求载荷归档、自动备份与日志文件,因此先用哪种模式取决于你是否计划日后重装:
| 模式 | 命令 | 应用本体 | 数据目录 |
|---|---|---|---|
| 保留数据 | npm run uninstall | 移除 | 保留 |
| 彻底清除 | npm run uninstall:full | 移除 | 永久删除 |
⚠️注意:
npm run uninstall:full不可逆。所有供应商连接、Combo 组合、API Key 与用量历史将被永久删除,且无法恢复。
二、快速卸载:内置脚本(v3.6.2+)
从 v3.6.2 起,OmniRoute 提供了两个内置脚本用于干净地移除应用。它们的定义位于仓库根目录 package.json 的scripts字段中:
"uninstall": "node scripts/build/uninstall.mjs", "uninstall:full": "node scripts/build/uninstall.mjs --full"2.1 保留数据:npm run uninstall
npm run uninstall该命令移除 OmniRoute 应用本体,但保留~/.omniroute/中的数据库、配置、API Key 与供应商设置。适合计划稍后重装、希望沿用原有配置的场景。
2.2 彻底清除:npm run uninstall:full
npm run uninstall:full该命令移除应用,并永久擦除以下全部数据:
- 数据库(
storage.sqlite) - 供应商配置与 API Key
- 备份文件(
backups/) - 日志文件
~/.omniroute/目录下的所有文件
⚠️警告:
npm run uninstall:full不可逆。所有供应商连接、Combo、API Key 和用量历史将被永久删除。
2.3 源码层面:卸载脚本究竟做了什么
两个命令最终都执行 scripts/build/uninstall.mjs,通过命令行参数--full区分模式。从源码看,其执行顺序如下:
- 停止并删除 PM2 后台进程:脚本首先尝试执行
pm2 delete omniroute,并捕获所有异常——PM2 未安装或进程不存在时静默跳过,不会中断卸载流程; - 解析数据目录:
const dataDir = process.env.DATA_DIR || path.join(os.homedir(), ".omniroute")——数据目录优先取环境变量DATA_DIR,未设置时回退到~/.omniroute; - 按模式处理数据:仅当传入
--full时执行fs.rmSync(dataDir, { recursive: true, force: true })递归删除整个数据目录;普通模式下打印"保留数据"提示,不触碰任何文件; - 卸载全局 npm 包:调用
npm uninstall -g omniroute。值得注意的是,脚本通过OMNIROUTE_SKIP_UNINSTALL_HOOK=1环境变量防止 npm 生命周期钩子嵌套触发自身,同时用process.env.npm_lifecycle_event === "uninstall"判断当前是否已处于卸载流程中,避免重复执行。
如果步骤 4 失败,脚本会提示可能需要以sudo权限执行(npm uninstall -g在全局安装时通常需要管理员权限)。
三、手动卸载:按安装方式逐一清理
如果无法使用内置脚本(例如版本早于 v3.6.2、或脚本因环境问题失效),可按照当初的安装方式手动卸载。
3.1 npm 全局安装
# 移除全局包 npm uninstall -g omniroute # (可选)删除数据目录 rm -rf ~/.omniroute3.2 pnpm 全局安装
pnpm uninstall -g omniroute rm -rf ~/.omniroute3.3 Docker
# 停止并移除容器 docker stop omniroute docker rm omniroute # 删除数据卷(会删除全部数据) docker volume rm omniroute-data # (可选)删除镜像 docker rmi diegosouzapw/omniroute:latest3.4 Docker Compose
# 停止并移除容器 docker compose down # 同时移除卷(会删除全部数据) docker compose down -v从仓库根目录的 docker-compose.yml 可以看到,OmniRoute 的 compose 栈除了应用本体外还定义了多个命名卷:omniroute-redis-data(限流后端 Redis)、omniroute-qdrant-data(语义记忆侧车)、omniroute-bifrost-data(Bifrost LLM 路由侧车)、chatgpt-web-codex-browser-data与codex-appserver-token/codex-appserver-home等。使用docker compose down -v会连带清除这些卷;若只想卸载 OmniRoute 但保留其他基础设施,应精确删除对应卷而不使用-v全量清空。
另外注意:compose 文件将DATA_DIR固定为/app/data,并通过./data:/app/data以绑定挂载方式持久化宿主目录。若你曾用 compose 部署,卸载后还需要清理宿主上对应的./data目录。
3.5 Electron 桌面应用
Windows:
- 打开
设置 → 应用 → OmniRoute → 卸载 - 或从安装目录运行 NSIS 卸载程序
macOS:
- 将
/Applications中的OmniRoute.app拖入废纸篓 - 删除数据:
rm -rf ~/Library/Application Support/omniroute
Linux:
- 删除 AppImage 文件
- 删除数据:
rm -rf ~/.omniroute
3.6 源码安装(git clone)
# 删除克隆目录 rm -rf /path/to/omniroute # (可选)删除数据目录 rm -rf ~/.omniroute四、数据目录:默认路径、覆盖方式与文件清单
4.1 各平台默认路径
OmniRoute 默认在以下位置存储数据:
| 平台 | 默认路径 | 覆盖方式 |
|---|---|---|
| Linux | ~/.omniroute/ | DATA_DIR环境变量 |
| macOS | ~/.omniroute/ | DATA_DIR环境变量 |
| Windows | %APPDATA%/omniroute/ | DATA_DIR环境变量 |
| Docker | /app/data/(挂载卷) | DATA_DIR环境变量 |
| XDG-compliant | $XDG_CONFIG_HOME/omniroute/ | XDG_CONFIG_HOME环境变量 |
4.2 源码中的路径解析规则
数据目录的解析逻辑集中在 src/lib/dataPaths.ts 的getDefaultDataDir()/resolveDataDir()中,其判定顺序值得注意:
- 优先保留旧版路径:如果
~/.omniroute/(getLegacyDotDataDir()计算得出)已存在,则直接返回该路径——这是为了避免升级迁移造成数据丢失(源码注释明确提到 Windows 迁移场景); - Windows 特判:
process.platform === "win32"时使用%APPDATA%/omniroute(APPDATA未设置时回退到AppData\Roaming); - XDG 支持:Linux/macOS 下显式配置了
XDG_CONFIG_HOME时,使用$XDG_CONFIG_HOME/omniroute; - 默认回退:以上均不满足时使用
~/.omniroute; DATA_DIR优先级最高:resolveDataDir()中任何显式设置的DATA_DIR都优先于上述全部默认逻辑。
此外resolveDataDir()还有isCloud分支(云模式返回/tmp),并针对测试上下文(NODE_TEST_CONTEXT、VITEST、NODE_ENV=test等)做了隔离保护,避免评估/测试进程误写操作者的真实数据库——相关逻辑详见 src/lib/dataPaths.ts。
4.3 数据目录中的文件
| 文件/目录 | 说明 |
|---|---|
storage.sqlite | 主数据库(供应商、Combo、设置、密钥) |
storage.sqlite-wal | SQLite 预写日志(临时文件) |
storage.sqlite-shm | SQLite 共享内存(临时文件) |
call_logs/ | 请求载荷归档 |
backups/ | 自动数据库备份 |
log.txt | 旧版请求日志(可选) |
其中call_logs既是 SQLite 内的数据表也是归档目录:仓库中 src/lib/db/callLogStats.ts 等模块大量基于call_logs表做用量统计与回退率聚合,而storage.sqlite-wal/storage.sqlite-shm是 SQLite WAL 模式的临时伴生文件——即便storage.sqlite本身被删除,这两个伴生文件也可能残留,彻底卸载时应一并清除。对数据库结构与备份机制的深入说明可参考 docs/ops/DATABASE_GUIDE.md。
五、卸载后验证:确认残留为零
卸载完成后,建议按以下顺序验证系统是否已清理干净:
# 检查全局 npm 包是否还存在 npm list -g omniroute 2>/dev/null # 检查数据目录是否还存在 ls -la ~/.omniroute/ 2>/dev/null # 检查是否有仍在运行的进程 pgrep -f omniroute如果仍有进程在运行,先将其停止:
pkill -f omniroute在 Docker 部署场景下,还应追加验证容器、镜像与卷的残留:
docker ps -a | grep omniroute docker images | grep omniroute docker volume ls | grep omniroute六、常见问题与排障提示
- 提示需要 sudo:
npm uninstall -g失败时,通常是全局 Node 目录无写权限,可尝试sudo npm uninstall -g omniroute(此时数据目录清理需按原用户权限执行,注意sudo下$HOME会指向 root)。 - PM2 进程残留:内置脚本会先执行
pm2 delete omniroute并忽略失败;若手动卸载,可先运行pm2 delete omniroute或按上一节用pgrep/pkill处理。 - Compose 卷残留:
docker compose down(不带-v)不会删除数据卷,Redis、Qdrant、Bifrost 等命名卷可能仍在;确认不再需要后用docker volume rm <卷名>清理,详见 docker-compose.yml 的volumes段。 - 想保留配置但应用报"找不到数据":重装前请勿删除
~/.omniroute/;重装后若数据目录路径解析异常,可显式设置DATA_DIR指向旧目录(路径解析规则见 src/lib/dataPaths.ts)。
其他平台的完整安装与运行步骤可参考 docs/guides/SETUP_GUIDE.md、docs/guides/DOCKER_GUIDE.md 与 docs/guides/ELECTRON_GUIDE.md;本指南的英文原版见 docs/guides/UNINSTALL.md。
【免费下载链接】OmniRouteNever stop coding. Free MIT AI gateway: one endpoint, 352 providers (150+ free), 1200+ models Kimi, Claude, GPT, Gemini, GLM, DeepSeek, MiniMax. Works with Claude Code, Codex, Cursor, OpenCode, Cline & Copilot. Quota-aware auto-fallback, RTK+Caveman compression saves 15-95% tokens, MCP/A2A, Desktop/PWA. Built by 550+ contributors项目地址: https://gitcode.com/GitHub_Trending/om/OmniRoute
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考