把 Claude Code Router 配置备份做起来:从随手复制到定时任务
【免费下载链接】claude-code-routerOne local control plane for every AI agent: route across models, fuse new capabilities, orchestrate tools, and stay fully in control.项目地址: https://gitcode.com/GitHub_Trending/cl/claude-code-router
某个深夜升级完 Claude Code Router,启动一看,配好的提供商和路由规则全没了——旧版 JSON 配置在迁移过程中被覆盖,API 密钥只能逐个重新填。从那以后,"Claude Code Router 配置备份"成了我装完软件第一件事,而不是等出事后才想起来的事。
先搞清楚:哪些东西丢了就完蛋了
先别急着敲命令,把资产清单看一遍,心里有数才知道该保谁。
Claude Code Router 的所有状态都集中在~/.claude-code-router/下(Windows 是%APPDATA%\claude-code-router)。核心是一个 SQLite 库,旧版config.json的 JSON 配置在首次启动时会自动迁移进库里,这个机制可以在 config-repository.ts 里看到。具体路径常量定义在 constants.ts:
| 文件 / 目录 | 里面是什么 | 丢了会怎样 |
|---|---|---|
~/.claude-code-router/config.sqlite | 提供商、路由规则、API 密钥、运行状态 | ⚠️ 全部归零,密钥得一个个重新填 |
~/.claude-code-router/config.json | 旧版 JSON 配置,迁移后自动归档进库 | 只剩从老版本回退时才用得上,不致命 |
~/.claude-code-router/app-data/request-logs.sqlite和request-log-bodies/ | 请求日志与原始请求体 | 可观测数据清空,排查历史请求无从查起 |
~/.claude-code-router/app-data/context-archive.sqlite | 上下文归档 | 跨会话续接失效,对话上下文要重搭 |
~/.claude-code-router/app-data/usage.sqlite | 用量与计费统计 | 用量对账从零开始 |
~/.claude-code-router/app-data/certs/ | 本地代理的 CA 证书与私钥 | 系统代理失效,得重新签发并重装 |
macOS/Linux 上app-data是配置目录的子目录,Windows 上它和配置目录同级。结论一句话:备份整个.claude-code-router目录即可,不用挑文件。
轻度事故:改坏了,回个滚就行
最高频的翻车姿势:手改了一条路由规则,一存,服务就不认了。
标准恢复动作就是下面三条,口头禅记住:改之前先 cp 一份。
改配置之前先复制一份主库出来,作为回滚点:
cp ~/.claude-code-router/config.sqlite ~/.claude-code-router/config.sqlite.bak确认改坏了,停服务、覆盖回去、再启动:
ccr stop cp ~/.claude-code-router/config.sqlite.bak ~/.claude-code-router/config.sqlite ccr start跑完ccr start应该无报错直接拉起,再开ccr ui看一眼,提供商和路由规则应该跟改动前一模一样。别问我怎么知道的,我每次回滚都是这三条命令搞定。
中度事故:文件没了,从备份里捞
文件真没了,靠的就是一份随时能用的备份。
合格的备份要凑齐三件套:整目录打包(不挑文件)、带时间戳的命名(多版本能区分)、异地副本(磁盘同死时还有救)。下面这个脚本一次搞定打包加清理,只保留最近 14 份:
#!/usr/bin/env bash # ~/ccr-backup.sh set -euo pipefail DEST_DIR="$HOME/ccr-backups" TS="$(date +%Y%m%d_%H%M%S)" mkdir -p "$DEST_DIR" tar -czf "$DEST_DIR/ccr-$TS.tar.gz" -C "$HOME" ".claude-code-router" ls -1t "$DEST_DIR"/ccr-*.tar.gz | tail -n +15 | xargs -r rm -f echo "backup done: $DEST_DIR/ccr-$TS.tar.gz"执行完会看到一行backup done: ...的路径输出,记下它。备份还要验,解压列表看一眼内容对不对:
tar -tzf ~/ccr-backups/$(ls -1t ~/ccr-backups | head -1) | head -5你应该看到.claude-code-router/config.sqlite、.claude-code-router/app-data/之类的条目。异地副本直接scp到另一台机器或者丢进云盘,这一步最容易翻车,因为平时你觉得永远不会用到它。
重度事故:机器废了,整个环境搬走
机器没了,整个.claude-code-router目录就是你的全部家当。
迁移是个六步流程,每步一句动作加一条命令:
- 停掉旧机器上的服务:
ccr stop - 整目录打包:
tar -czf ~/ccr-full.tar.gz -C ~ .claude-code-router - 新机器先装好工具:
npm install -g @musistudio/claude-code-router - 把包传过去:
scp ~/ccr-full.tar.gz user@new-host:~/ - 在新机器解包到位:
tar -xzf ccr-full.tar.gz -C ~ - 启动:
ccr start
服务起来之后打开ccr ui,核对提供商列表和密钥数量跟旧机器一致,齐了才算搬完。
让备份自己跑:定时任务 + 清理策略
手动备份靠自觉,自觉靠不住,挂到定时任务上。
macOS/Linux 在 crontab 里加一行,每天凌晨 3 点执行脚本,日志写到备份目录里:
0 3 * * * /bin/bash $HOME/ccr-backup.sh >> $HOME/ccr-backups/backup.log 2>&1清理策略脚本里已经带了(保留最近 14 份),不用再额外配置。macOS 想用 launchd 的,建一个每日 03:00 触发的 plist 指向~/ccr-backup.sh即可。跑完之后tail -5 ~/ccr-backups/backup.log确认没报错,没验证过的备份等于没有备份。
收个尾:一张 checklist
换机器前、上线前,把这七条过一遍:
- 主库
config.sqlite的备份存在,文件名带时间戳 - 异地副本(另一台机器或云盘)已就位
tar -tzf列表校验至少通过过一次ccr stop/ccr start完整重启无误- 恢复后核对提供商列表与 API 密钥数量和原环境一致
- cron 任务已成功跑过一次,日志无报错
- 在备用机器上端到端演练过一次完整恢复
✅ 备份的意义不在于文件放在那儿,而在于出事那天,你能 30 秒内把系统拉起来。
【免费下载链接】claude-code-routerOne local control plane for every AI agent: route across models, fuse new capabilities, orchestrate tools, and stay fully in control.项目地址: https://gitcode.com/GitHub_Trending/cl/claude-code-router
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考