云原生开发环境数据持久化工具 - 为 CNB 环境提供多程序数据备份和恢复能力
{repo}/{branch}/{user}/{task} 路径结构,完全隔离# 复制示例配置
cp config.example.yaml ~/.config/cnb-keep-toolkit/config.yaml
# 或使用 CNB 环境配置
cp configs/cnb-config.yaml /opt/cnb/config/config.yaml
export COS_SECRET_ID=AKIDxxxxx
export COS_SECRET_KEY=xxxxx
export COS_BUCKET_URL=https://your-bucket-1234567890.cos.ap-guangzhou.myqcloud.com
# 格式:https://{bucket-name}-{appid}.cos.{region}.myqcloud.com
# 注意:URL 中已包含 region 信息,无需单独配置 region
./cnb-keep-toolkit
配置文件支持:
# 必需配置
export COS_SECRET_ID=AKIDxxxxx
export COS_SECRET_KEY=xxxxx
export COS_BUCKET_URL=https://your-bucket-1234567890.cos.ap-guangzhou.myqcloud.com
# 格式:https://{bucket-name}-{appid}.cos.{region}.myqcloud.com
# 注意:URL 中已包含 region,无需额外配置
# 可选配置
export WATCH_BASE_DIR=~/.claude/
export LOG_LEVEL=info
实时监听文件变化并上传:
export RUN_MODE=sync
./cnb-keep-toolkit
从云端恢复数据:
export RUN_MODE=restore
./cnb-keep-toolkit
在 CNB 环境中,数据会自动恢复和同步:
# 执行恢复脚本(在容器启动时运行)
bash /opt/cnb/scripts/cnb-restore.sh
# 构建当前平台
./build.sh
# 构建所有平台
./build.sh --all
docker build -t cnb-keep-toolkit:latest .
支持多任务、灵活的文件规则、层级化存储。配置文件位置(按优先级):
$CONFIG_FILE 环境变量指定/etc/cnb-keep-toolkit/config.yaml/opt/cnb/config/config.yaml./config.yaml~/.config/cnb-keep-toolkit/config.yaml示例配置:
version: "1.0"
global:
storage:
type: cos
cos:
secret_id: ${COS_SECRET_ID}
secret_key: ${COS_SECRET_KEY}
bucket_url: ${COS_BUCKET_URL}
base_path: "cnb-toolkit" # 基础路径,用于环境隔离
path_template: "${CNB_REPO_SLUG}/${CNB_BRANCH}/${CNB_BUILD_USER}"
tasks:
- name: claude-code
enabled: true
watch_dir: ~/.claude/
globs: ["**/*"]
exclude: ["*.tmp", "*.log"]
- name: vscode-settings
enabled: true
watch_dir: ~/.vscode-server/data/User/
globs: ["settings.json", "keybindings.json"]
完整配置说明请参考:配置文档
| 环境变量 | 必需 | 默认值 | 说明 |
|---|---|---|---|
| COS 配置 | |||
COS_SECRET_ID | 是 | - | 腾讯云 SecretId |
COS_SECRET_KEY | 是 | - | 腾讯云 SecretKey |
COS_BUCKET_URL | 是 | - | COS Bucket 完整 URL 格式: https://{bucket}-{appid}.cos.{region}.myqcloud.com示例: https://mybucket-1234567890.cos.ap-guangzhou.myqcloud.com |
| CNB 环境变量(自动提供) | |||
CNB_REPO_SLUG | - | - | 仓库路径 (自动) |
CNB_BRANCH | - | - | 分支名 (自动) |
CNB_BUILD_USER | - | - | 构建用户 (自动) |
| 其他配置 | |||
CONFIG_FILE | 否 | - | 配置文件路径 |
LOG_LEVEL | 否 | info | 日志级别 |
LOG_FORMAT | 否 | json | 日志格式 |
基于 CNB 环境变量自动构建层级化路径:
{base_path}/{CNB_REPO_SLUG}/{CNB_BRANCH}/{CNB_BUILD_USER}/{task_name}/
路径组成:
base_path: 环境前缀(dev/prod/cnb-toolkit 等)CNB_REPO_SLUG: 仓库路径(自动)CNB_BRANCH: 分支名(自动)CNB_BUILD_USER: 用户名(自动)task_name: 任务名称(配置)示例(开发环境):
dev/ └── debug.icu/my-project/ ├── main/ │ ├── zhangsan/ │ │ ├── claude-code/ │ │ └── vscode-settings/ │ └── lisi/ │ └── claude-code/ └── feature-x/ └── zhangsan/ └── claude-code/
多环境隔离:
├── dev/debug.icu/... # 开发环境 ├── test/debug.icu/... # 测试环境 └── prod/debug.icu/... # 生产环境
cnb-keep-toolkit/ ├── cmd/ │ └── cnb-keep-toolkit/ # 应用入口 ├── internal/ │ ├── config/ # 配置管理 │ ├── storage/ # 存储接口和 COS 实现 │ ├── watcher/ # 文件监听器 │ ├── sync/ # 同步引擎 │ └── logger/ # 日志封装 ├── pkg/ │ └── retry/ # 重试机制 └── scripts/ └── cnb-restore.sh # CNB 环境恢复脚本
Engine ├── TaskRunner (claude-code) │ ├── Watcher → ~/.claude/ │ ├── Uploader → COS:/repo/branch/user/claude-code/ │ └── Downloader ├── TaskRunner (vscode-settings) │ ├── Watcher → ~/.vscode-server/ │ ├── Uploader → COS:/repo/branch/user/vscode-settings/ │ └── Downloader └── TaskRunner (custom-task) ├── Watcher → ~/custom/ ├── Uploader → COS:/repo/branch/user/custom-task/ └── Downloader
Task 1: 文件变化 → Watcher → Debouncer → Uploader → COS (path1) ↓ SyncState Task 2: 文件变化 → Watcher → Debouncer → Uploader → COS (path2) ↓ SyncState
/{base_path}/ ├── debug.icu/my-project/ │ ├── main/zhangsan/ │ │ ├── claude-code/ │ │ │ ├── .claude/ │ │ │ │ ├── sessions/ │ │ │ │ └── config.json │ │ │ └── .claude-code-workspace │ │ └── vscode-settings/ │ │ ├── settings.json │ │ └── keybindings.json │ └── dev/lisi/ │ └── claude-code/
实际示例(base_path=cnb-toolkit):
/cnb-toolkit/debug.icu/my-project/main/zhangsan/claude-code/.claude/config.json
# 运行所有测试
go test ./...
# 测试覆盖率
go test -cover ./... -coverprofile=coverage.out
go tool cover -html=coverage.out -o coverage.html
# 运行特定模块测试
go test ./internal/config/...
go test ./internal/watcher/...
go test ./internal/sync/...
# 同步模式日志
tail -f /var/log/cnb-keep-toolkit.log
# 设置详细日志
export LOG_LEVEL=debug
export LOG_FORMAT=text
COS 连接失败
COS_SECRET_ID 和 COS_SECRET_KEY 是否正确COS_BUCKET_URL 格式是否正确文件未上传
恢复失败
go mod download go mod tidy
go fmt ./...
go vet ./...
go get github.com/example/package
MIT License