logo
0
0
WeChat 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%