OmniRoute 卸载指南:从 npm、pnpm、Docker 到 Electron 的完整移除方案
【免费下载链接】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 是一个统一 AI 网关,运行时会持久化数据库、Provider 配置、API Key、Combo 路由与使用历史。本文面向需要彻底清除或暂时卸载 OmniRoute 的用户,完整覆盖内置卸载脚本(保留数据与完全移除两种模式)、npm/pnpm 全局包、Docker / Docker Compose、Electron 桌面端与源码安装的手动卸载步骤,并结合仓库源码说明数据目录的解析逻辑与卸载脚本的真实行为。读完本文,你将能按场景选择正确的卸载方式,并学会验证系统是否被干净移除。
一、卸载前先理解数据存放位置
在动手卸载之前,先弄清 OmniRoute 把数据放在哪里。数据目录的解析逻辑集中在 src/lib/dataPaths.ts 中,核心函数resolveDataDir()的优先级为:
- 显式指定的
DATA_DIR环境变量(最高优先级); - Windows 上优先检查是否存在遗留的
~/.omniroute目录(存在则以它为准,避免升级时丢数据),否则使用%APPDATA%/omniroute/; - Linux / macOS 上若显式配置了
XDG_CONFIG_HOME,则使用$XDG_CONFIG_HOME/omniroute/; - 默认回落到
~/.omniroute/。
各平台默认路径汇总如下:
| 平台 | 默认路径 | 覆盖方式 |
|---|---|---|
| Linux | ~/.omniroute/ | DATA_DIR环境变量 |
| macOS | ~/.omniroute/ | DATA_DIR环境变量 |
| Windows | %APPDATA%/omniroute/ | DATA_DIR环境变量 |
| Docker | /app/data/(挂载卷) | DATA_DIR环境变量 |
| XDG 兼容环境 | $XDG_CONFIG_HOME/omniroute/ | XDG_CONFIG_HOME环境变量 |
补充:源码在 src/lib/dataPaths.ts 中还实现了
resolveWritableDataDir(),当用户配置的DATA_DIR不可写(EACCES/EPERM)时会自动回退到默认用户目录,保证应用不因错误路径而崩溃。
数据目录里的文件
| 文件/目录 | 说明 |
|---|---|
storage.sqlite | 主数据库(Provider、Combo、设置、API Key) |
storage.sqlite-wal | SQLite 预写日志(临时文件) |
storage.sqlite-shm | SQLite 共享内存(临时文件) |
call_logs/ | 请求负载归档 |
backups/ | 自动数据库备份 |
log.txt | 旧版请求日志(可选) |
关于主数据库的落地位置,可在 src/lib/db/core.ts 中看到其定义:SQLITE_FILE = path.join(DATA_DIR, "storage.sqlite"),备份目录同样挂在数据目录下的db_backups。这印证了文档中"删除~/.omniroute/即等于删除全部业务数据"的说法——你的 Provider 连接、Combo、API Key 和使用历史全部封装在这一个目录里。
二、快速卸载(v3.6.2+):两条内置脚本
自 v3.6.2 起,OmniRoute 提供两个内置卸载脚本,对应 package.json 中的两个 npm scripts:
保留数据:npm run uninstall
npm run uninstall该命令移除 OmniRoute 应用本体,但保留~/.omniroute/中的数据库、配置、API Key 和 Provider 设置。如果你打算之后重装并保留现有配置,请使用它。
完全移除:npm run uninstall:full
npm run uninstall:full该命令移除应用并永久擦除以下所有数据:
- 数据库(
storage.sqlite) - Provider 配置与 API Key
- 备份文件
- 日志文件
~/.omniroute/目录下的所有文件
⚠️警告:
npm run uninstall:full不可逆。所有 Provider 连接、Combo、API Key 与使用历史都会被永久删除。
脚本内部究竟做了什么
阅读卸载脚本源码 scripts/build/uninstall.mjs 可以确认它的完整执行顺序:
- 停止并移除 PM2 后台进程:通过
pm2 delete omniroute清理常驻后台进程(pm2 未安装或进程不存在时静默跳过); - 清理数据目录:
--full模式下读取DATA_DIR环境变量或默认的~/.omniroute,用fs.rmSync(dataDir, { recursive: true, force: true })递归删除;非 full 模式则仅打印"保留数据"提示,不触碰数据目录; - 卸载 npm 全局包:执行
npm uninstall -g omniroute,同时通过OMNIROUTE_SKIP_UNINSTALL_HOOK=1与对npm_lifecycle_event的检测防止递归触发卸载钩子;若因权限失败,脚本会提示可能需要sudo重试。
也就是说,npm run uninstall等效于"删程序 + 留数据",npm run uninstall:full等效于"删程序 + 删数据",并且两者都会主动清理 PM2 托管进程,这正是它被称为"clean removal"的原因。
三、手动卸载:按安装方式分场景
如果不走内置脚本,可以按最初的安装方式手动卸载。
npm 全局安装
# 移除全局包 npm uninstall -g omniroute # (可选)删除数据目录 rm -rf ~/.omniroutepnpm 全局安装
pnpm uninstall -g omniroute rm -rf ~/.omnirouteDocker
# 停止并移除容器 docker stop omniroute docker rm omniroute # 移除数据卷(删除所有数据) docker volume rm omniroute-data # (可选)移除镜像 docker rmi diegosouzapw/omniroute:latest关于 Docker 中的数据目录:仓库的 docker-compose.yml 中可以看到DATA_DIR=/app/data必须与卷挂载./data:/app/data保持一致的注释说明,docker-compose.prod.yml 与 contrib/vps/compose.yaml 则使用命名卷(如omniroute-prod-data、omniroute-data)挂载到/app/data。因此删除数据卷(docker volume rm)才是真正清除业务数据的步骤,只删容器不会删除数据。
Docker Compose
# 停止并移除容器 docker compose down # 同时移除卷(删除所有数据) docker compose down -v注意docker compose down默认保留命名卷,加上-v才会连卷一起删除——这正是文档中特别强调"deletes all data"的原因。
Electron 桌面应用
Windows:
- 打开
设置 → 应用 → OmniRoute → 卸载 - 或从安装目录运行 NSIS 卸载程序
macOS:
- 将
/Applications中的OmniRoute.app拖入废纸篓 - 删除数据:
rm -rf ~/Library/Application Support/omniroute
Linux:
- 删除 AppImage 文件
- 删除数据:
rm -rf ~/.omniroute
提示:macOS 桌面的数据目录独立于 CLI 版默认路径,且 src/lib/dataPaths.ts 的源码逻辑也印证了 Windows 端默认数据目录是
%APPDATA%/omniroute/,与文档一致。
源码安装(git clone)
# 删除克隆的目录 rm -rf /path/to/omniroute # (可选)删除数据目录 rm -rf ~/.omniroute四、验证彻底移除
卸载完成后,用以下命令确认没有残留:
# 检查全局 npm 包是否还存在 npm list -g omniroute 2>/dev/null # 检查数据目录是否还存在 ls -la ~/.omniroute/ 2>/dev/null # 检查是否有残留进程 pgrep -f omniroute如果仍有进程在运行,将其停止:
pkill -f omniroute若你在 Windows 上安装或使用过,还应确认%APPDATA%/omniroute/是否被删除;若自定义过DATA_DIR,则需检查对应自定义目录。参照 docs/guides/UNINSTALL.md 的数据目录表逐项核对,即可确认系统已处于干净状态。更进一步,如果你需要重装或换机器迁移,可参考 docs/guides/SETUP_GUIDE.md 了解安装方式,并在卸载前主动备份~/.omniroute/(含storage.sqlite与backups/)以备后续恢复。
五、卸载决策速查
| 场景 | 推荐命令 | 是否保留数据 |
|---|---|---|
| 临时卸载、之后要重装 | npm run uninstall | 保留 |
| 彻底清除(含数据库/Key/历史) | npm run uninstall:full | 永久删除 |
| npm 全局手动卸载 | npm uninstall -g omniroute(可选加rm -rf ~/.omniroute) | 默认保留,按需删除 |
| Docker 手动卸载 | docker stop/rm+docker volume rm omniroute-data | 删卷才删数据 |
| Docker Compose 手动卸载 | docker compose down -v | 永久删除 |
| Electron 桌面卸载 | 系统卸载入口 / 拖入废纸篓 | 需手动删数据目录 |
核心结论:"卸载应用"与"删除数据"是两个独立动作。内置脚本把两者拆成了uninstall与uninstall:full两个命令,手动方式下则体现在"是否删~/.omniroute/"或"是否删 Docker 卷"上。理解这一点,你就能在任何安装方式下安全、可控地完成 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
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考