腾讯云轻量应用服务器自动快照备份工具
go mod tidy
本工具支持两种配置方式,环境变量优先级高于配置文件:
复制并编辑配置文件:
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=""
# 编译
go build -o snapkeeper
# 立即执行一次备份
./snapkeeper -once
# 启动定时任务
./snapkeeper
# 指定配置文件
./snapkeeper -config config.yaml.local
# 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
# 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_id | TENCENT_SECRET_ID | 腾讯云 API 密钥 ID |
secret_key | TENCENT_SECRET_KEY | 腾讯云 API 密钥 Key |
region | TENCENT_REGION | 地域,如 ap-guangzhou、ap-shanghai 等 |
| 配置项 | 环境变量 | 说明 |
|---|---|---|
instance_ids | LIGHTHOUSE_INSTANCE_IDS | 实例 ID 列表,多个实例用逗号分隔 |
snapshot.name_prefix | SNAPSHOT_NAME_PREFIX | 快照名称前缀 |
snapshot.retention_count | SNAPSHOT_RETENTION_COUNT | 保留快照数量,0 表示不限制 |
snapshot.description | SNAPSHOT_DESCRIPTION | 快照描述 |
| 配置项 | 环境变量 | 说明 |
|---|---|---|
cron | SCHEDULE_CRON | Cron 表达式,支持秒级精度 |
enabled | SCHEDULE_ENABLED | 是否启用定时任务(true/false) |
常用 Cron 表达式:
0 2 * * *: 每天凌晨2点0 */6 * * *: 每6小时执行一次0 0 */3 * *: 每3天执行一次0 0 * * 0: 每周日执行| 配置项 | 环境变量 | 说明 |
|---|---|---|
level | LOG_LEVEL | 日志级别(debug、info、warn、error) |
file | LOG_FILE | 日志文件路径 |
console | LOG_CONSOLE | 是否输出到控制台(true/false) |
max_size | LOG_MAX_SIZE | 日志文件最大大小(MB) |
max_backups | LOG_MAX_BACKUPS | 保留日志文件数量 |
max_age | LOG_MAX_AGE | 日志文件保留天数 |
| 配置项 | 环境变量 | 说明 |
|---|---|---|
enabled | NOTIFICATION_ENABLED | 是否启用通知(true/false) |
wechat_webhook | NOTIFICATION_WECHAT_WEBHOOK | 企业微信机器人 webhook |
dingtalk_webhook | NOTIFICATION_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/ # 日志目录(自动创建)
internal/service/ 目录下添加新的服务internal/config/ 中添加相应的配置结构可以在 internal/service/ 目录下添加通知服务,支持:
.local 后缀的配置文件,并添加到 .gitignoreMIT License