logo
0
0
Login

QCloud SnapKeeper

腾讯云轻量应用服务器自动快照备份工具

功能特性

  • 🚀 自动创建轻量应用服务器快照
  • ⏰ 支持 Cron 表达式定时执行
  • 🗂️ 自动清理过期快照,节省存储空间
  • 📝 完善的日志记录和轮转
  • 🔧 灵活的配置文件支持
  • 🌍 支持环境变量配置,优先级高于配置文件
  • 📱 支持企业微信、钉钉通知(待实现)

快速开始

1. 安装依赖

go mod tidy

2. 配置方式

本工具支持两种配置方式,环境变量优先级高于配置文件

方式一:配置文件(推荐用于开发环境)

复制并编辑配置文件:

cp config.yaml config.yaml.local

编辑 config.yaml.local,填入你的腾讯云 API 密钥和实例信息:

tencent_cloud: secret_id: "你的SecretId" secret_key: "你的SecretKey" region: "ap-guangzhou" lighthouse: instance_ids: - "lhins-xxxxxxxxx" # 你的轻量应用服务器实例ID snapshot: name_prefix: "auto-snapshot" retention_count: 7 # 保留最近7个快照 description: "自动创建的快照备份" schedule: cron: "0 2 * * *" # 每天凌晨2点执行 enabled: true

方式二:环境变量(推荐用于生产环境)

通过环境变量配置,更安全且适合容器化部署:

# 腾讯云配置 export TENCENT_SECRET_ID="你的SecretId" export TENCENT_SECRET_KEY="你的SecretKey" export TENCENT_REGION="ap-guangzhou" # 轻量应用服务器配置 export LIGHTHOUSE_INSTANCE_IDS="lhins-xxxxxxxxx,lhins-yyyyyyyyy" # 多个实例用逗号分隔 # 快照配置 export SNAPSHOT_NAME_PREFIX="auto-snapshot" export SNAPSHOT_RETENTION_COUNT="7" export SNAPSHOT_DESCRIPTION="自动创建的快照备份" # 调度配置 export SCHEDULE_CRON="0 2 * * *" export SCHEDULE_ENABLED="true" # 日志配置 export LOG_LEVEL="info" export LOG_FILE="logs/snapkeeper.log" export LOG_CONSOLE="true" export LOG_MAX_SIZE="100" export LOG_MAX_BACKUPS="5" export LOG_MAX_AGE="30" # 通知配置 export NOTIFICATION_ENABLED="false" export NOTIFICATION_WECHAT_WEBHOOK="" export NOTIFICATION_DINGTALK_WEBHOOK=""

3. 运行方式

方式一:直接编译运行

# 编译 go build -o snapkeeper # 立即执行一次备份 ./snapkeeper -once # 启动定时任务 ./snapkeeper # 指定配置文件 ./snapkeeper -config config.yaml.local

方式二:使用 Docker(推荐)

# 1. 复制并编辑配置文件 cp config.example.yaml config.yaml # 编辑 config.yaml,填入你的腾讯云配置 # 2. 构建镜像 docker build -t qcloud-snapkeeper . # 3. 运行容器(使用配置文件) docker run -d \ --name qcloud-snapkeeper \ --restart unless-stopped \ -v $(pwd)/config.yaml:/app/config.yaml:ro \ -v $(pwd)/logs:/app/logs \ -e TZ=Asia/Shanghai \ qcloud-snapkeeper # 或者使用环境变量(推荐) docker run -d \ --name qcloud-snapkeeper \ --restart unless-stopped \ -v $(pwd)/logs:/app/logs \ -e TZ=Asia/Shanghai \ -e TENCENT_SECRET_ID="你的SecretId" \ -e TENCENT_SECRET_KEY="你的SecretKey" \ -e TENCENT_REGION="ap-guangzhou" \ -e LIGHTHOUSE_INSTANCE_IDS="lhins-xxxxxxxxx" \ -e SNAPSHOT_RETENTION_COUNT="7" \ -e SCHEDULE_CRON="0 2 * * *" \ qcloud-snapkeeper # 4. 查看日志 docker logs -f qcloud-snapkeeper # 5. 立即执行一次备份 docker exec qcloud-snapkeeper ./snapkeeper -once

方式三:使用 Docker Compose(最简单)

# 1. 复制并编辑配置文件 cp config.example.yaml config.yaml # 2. 启动服务 docker-compose up -d # 3. 查看日志 docker-compose logs -f # 4. 停止服务 docker-compose down

使用便捷脚本

# 构建镜像 ./scripts/docker-build.sh # 运行容器 ./scripts/docker-run.sh latest config.yaml # 开发环境 ./scripts/docker-dev.sh

使用说明

命令行参数

  • -config: 指定配置文件路径(默认: config.yaml)
  • -once: 立即执行一次备份任务
  • -version: 显示版本信息

配置说明

配置优先级

环境变量 > 配置文件 > 默认值

腾讯云配置

配置项环境变量说明
secret_idTENCENT_SECRET_ID腾讯云 API 密钥 ID
secret_keyTENCENT_SECRET_KEY腾讯云 API 密钥 Key
regionTENCENT_REGION地域,如 ap-guangzhou、ap-shanghai 等

轻量应用服务器配置

配置项环境变量说明
instance_idsLIGHTHOUSE_INSTANCE_IDS实例 ID 列表,多个实例用逗号分隔
snapshot.name_prefixSNAPSHOT_NAME_PREFIX快照名称前缀
snapshot.retention_countSNAPSHOT_RETENTION_COUNT保留快照数量,0 表示不限制
snapshot.descriptionSNAPSHOT_DESCRIPTION快照描述

定时任务配置

配置项环境变量说明
cronSCHEDULE_CRONCron 表达式,支持秒级精度
enabledSCHEDULE_ENABLED是否启用定时任务(true/false)

常用 Cron 表达式:

  • 0 2 * * *: 每天凌晨2点
  • 0 */6 * * *: 每6小时执行一次
  • 0 0 */3 * *: 每3天执行一次
  • 0 0 * * 0: 每周日执行

日志配置

配置项环境变量说明
levelLOG_LEVEL日志级别(debug、info、warn、error)
fileLOG_FILE日志文件路径
consoleLOG_CONSOLE是否输出到控制台(true/false)
max_sizeLOG_MAX_SIZE日志文件最大大小(MB)
max_backupsLOG_MAX_BACKUPS保留日志文件数量
max_ageLOG_MAX_AGE日志文件保留天数

通知配置

配置项环境变量说明
enabledNOTIFICATION_ENABLED是否启用通知(true/false)
wechat_webhookNOTIFICATION_WECHAT_WEBHOOK企业微信机器人 webhook
dingtalk_webhookNOTIFICATION_DINGTALK_WEBHOOK钉钉机器人 webhook

项目结构

qcloud-snapkeeper/ ├── main.go # 主程序入口 ├── config.yaml # 配置文件模板 ├── config.example.yaml # 配置文件示例 ├── go.mod # Go 模块文件 ├── Dockerfile # Docker 构建文件 ├── docker-compose.yml # Docker Compose 配置 ├── .dockerignore # Docker 忽略文件 ├── internal/ # 内部包 │ ├── config/ # 配置管理 │ │ └── config.go │ ├── logger/ # 日志管理 │ │ └── logger.go │ ├── scheduler/ # 定时调度 │ │ └── scheduler.go │ └── service/ # 业务服务 │ └── snapshot.go # 快照服务 ├── scripts/ # 便捷脚本 │ ├── docker-build.sh # Docker 构建脚本 │ ├── docker-run.sh # Docker 运行脚本 │ └── docker-dev.sh # Docker 开发脚本 └── logs/ # 日志目录(自动创建)

开发说明

添加新功能

  1. internal/service/ 目录下添加新的服务
  2. internal/config/ 中添加相应的配置结构
  3. 在主程序中集成新服务

扩展通知功能

可以在 internal/service/ 目录下添加通知服务,支持:

  • 企业微信机器人
  • 钉钉机器人
  • 邮件通知
  • 短信通知

注意事项

  1. 安全性:请妥善保管腾讯云 API 密钥,不要提交到代码仓库
    • 生产环境推荐使用环境变量配置
    • 开发环境可以使用 .local 后缀的配置文件,并添加到 .gitignore
  2. 费用控制:快照会产生存储费用,请合理设置保留数量
  3. 测试验证:建议在测试环境先验证配置正确性
  4. 时间安排:定时任务的时间建议避开业务高峰期
  5. 配置优先级:环境变量会覆盖配置文件中的对应设置

许可证

MIT License

About

使用腾讯云的 API,自动备份轻量应用服务器

Language
Go95.4%
Dockerfile4.6%