news 2026/9/12 18:21:26

OmniRoute 卸载完全指南:内置脚本、手动清理与数据目录详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
OmniRoute 卸载完全指南:内置脚本、手动清理与数据目录详解

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区分模式。从源码看,其执行顺序如下:

  1. 停止并删除 PM2 后台进程:脚本首先尝试执行pm2 delete omniroute,并捕获所有异常——PM2 未安装或进程不存在时静默跳过,不会中断卸载流程;
  2. 解析数据目录const dataDir = process.env.DATA_DIR || path.join(os.homedir(), ".omniroute")——数据目录优先取环境变量DATA_DIR,未设置时回退到~/.omniroute
  3. 按模式处理数据:仅当传入--full时执行fs.rmSync(dataDir, { recursive: true, force: true })递归删除整个数据目录;普通模式下打印"保留数据"提示,不触碰任何文件;
  4. 卸载全局 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 ~/.omniroute

3.2 pnpm 全局安装

pnpm uninstall -g omniroute rm -rf ~/.omniroute

3.3 Docker

# 停止并移除容器 docker stop omniroute docker rm omniroute # 删除数据卷(会删除全部数据) docker volume rm omniroute-data # (可选)删除镜像 docker rmi diegosouzapw/omniroute:latest

3.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-datacodex-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()中,其判定顺序值得注意:

  1. 优先保留旧版路径:如果~/.omniroute/getLegacyDotDataDir()计算得出)已存在,则直接返回该路径——这是为了避免升级迁移造成数据丢失(源码注释明确提到 Windows 迁移场景);
  2. Windows 特判process.platform === "win32"时使用%APPDATA%/omnirouteAPPDATA未设置时回退到AppData\Roaming);
  3. XDG 支持:Linux/macOS 下显式配置了XDG_CONFIG_HOME时,使用$XDG_CONFIG_HOME/omniroute
  4. 默认回退:以上均不满足时使用~/.omniroute
  5. DATA_DIR优先级最高resolveDataDir()中任何显式设置的DATA_DIR都优先于上述全部默认逻辑。

此外resolveDataDir()还有isCloud分支(云模式返回/tmp),并针对测试上下文(NODE_TEST_CONTEXTVITESTNODE_ENV=test等)做了隔离保护,避免评估/测试进程误写操作者的真实数据库——相关逻辑详见 src/lib/dataPaths.ts。

4.3 数据目录中的文件

文件/目录说明
storage.sqlite主数据库(供应商、Combo、设置、密钥)
storage.sqlite-walSQLite 预写日志(临时文件)
storage.sqlite-shmSQLite 共享内存(临时文件)
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

六、常见问题与排障提示

  • 提示需要 sudonpm 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),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/12 18:20:44

大一参加电赛值不值?备赛、实战与避坑全攻略

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/12 18:20:11

RNA-seq变异检测实战:Sentieon全流程详解

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/12 18:20:04

C++模板编程:从基础到实践

1. C模板基础概念模板是C语言中最强大的特性之一&#xff0c;它允许我们编写与数据类型无关的通用代码。我第一次接触模板时&#xff0c;就被它的这种"一次编写&#xff0c;多处使用"的特性深深吸引。简单来说&#xff0c;模板就像是一个模具&#xff0c;我们可以用它…

作者头像 李华
网站建设 2026/9/12 18:19:44

企业微信二次开发:群成员生命周期事件如何统一管理

前阵子我们在做私域业务的季度复盘&#xff0c;运营总监指着报表上一堆变成了“未知状态”的客户名单发飙。深挖系统底层代码才发现&#xff0c;群成员的进进出出&#xff0c;在业务库里根本没有形成闭环。新人进群欢迎语漏发&#xff0c;客户自己默默退群了&#xff0c;系统还…

作者头像 李华
网站建设 2026/9/12 18:17:49

SadTalker 本地部署指南:一张照片加一段音频生成数字人视频

SadTalker 本地部署指南&#xff1a;一张照片加一段音频生成数字人视频 【免费下载链接】SadTalker [CVPR 2023] SadTalker&#xff1a;Learning Realistic 3D Motion Coefficients for Stylized Audio-Driven Single Image Talking Face Animation 项目地址: https://gitcod…

作者头像 李华