ITADN
fbrettnich/hcloud-snapshot-as-backup
fbrettnich/hcloud-snapshot-as-backup · 文件 下载 ZIP
文件最后提交记录最后更新时间
README.md
以下内容由 AI 翻译,如有问题请点此提交 issue 反馈

Hetzner Cloud | 快照作为备份

此脚本会自动为您的 Hetzner Cloud 服务器创建快照并删除旧的快照。
快照随后将像 Hetzner 直接提供的自动备份一样工作,其优势在于可以创建更多备份并在自定义的时间执行。
为了便于使用,该脚本直接在 Hetzner Cloud 控制台中使用强大的标签。只需为服务器添加标签即可。

安装

安装:使用 Docker(推荐)

1. 运行 docker 镜像

docker run -d --name hcloud-snapshot-as-backup \
  --restart unless-stopped \
  -v /etc/localtime:/etc/localtime:ro \
  -e API_TOKEN= \
  -e SNAPSHOT_NAME="%name%-%timestamp%" \
  -e LABEL_SELECTOR="AUTOBACKUP" \
  -e KEEP_LAST=3 \
  -e CRON="0 1 * * *" \
  fbrettnich/hcloud-snapshot-as-backup

将您的 Hetzner Cloud 控制台 API 密钥 放在第 4 行的 API_TOKEN= 之后。

可选:将 CRON 设置为 false 以禁用容器内的 CronScheduler,并在容器外部进行调度,特别是用于使用 Amazon ECS 计划任务Google Cloud Run 作业 等服务。


安装:使用 Docker Compose

1. 下载 docker-compose.yml

curl -sSL https://raw.githubusercontent.com/fbrettnich/hcloud-snapshot-as-backup/main/docker-compose.yml > docker-compose.yml

2. 编辑配置
打开 docker-compose.yml 文件以完成配置。
您可以在下方找到有关配置的更多信息(点击此处)

3. 运行 docker-compose

docker-compose up -d

安装:在 Kubernetes 上使用 Helm

.helm 目录中包含一个 Helm chart。 它将脚本部署为 Kubernetes CronJob,并支持在单个 release 中管理多个 Hetzner Cloud 项目——每个项目对应一个 CronJob,各自拥有独立的 API token、调度计划、标签选择器和保留策略。

1. 克隆此仓库

git clone https://github.com/fbrettnich/hcloud-snapshot-as-backup.git
cd hcloud-snapshot-as-backup

2. 创建 values 文件

# values.yaml
timeZone: "Europe/Berlin"

projects:
  - name: production
    apiToken: "YOUR_HETZNER_API_TOKEN"
    schedule: "0 1 * * *"
    keepLast: 7

  - name: staging
    existingSecret: hcloud-staging   # Secret you manage yourself
    schedule: "0 3 * * 0"
    keepLast: 2

3. 安装 chart

helm install hcloud-snapshot-as-backup ./.helm \
  --namespace hcloud-snapshot-as-backup --create-namespace \
  -f values.yaml

调度由 Kubernetes 处理,因此 chart 始终在容器中设置 CRON=false。 所有可用选项均在 chart README 中有文档说明。


安装:不使用 Docker

1. 克隆此仓库

apt install git
git clone https://github.com/fbrettnich/hcloud-snapshot-as-backup.git /opt/hcloud-snapshot-as-backup

2. 安装依赖项

apt install python3 python3-pip
pip3 install -r /opt/hcloud-snapshot-as-backup/requirements.txt

3. 复制 config.json

cd /opt/hcloud-snapshot-as-backup/
cp config-example.json config.json

4. 编辑配置
打开 config.json 文件以完成配置。
您可以在下方找到有关配置的更多信息(点击此处)

5. 运行脚本

python3 /opt/hcloud-snapshot-as-backup/snapshot-as-backup.py

要自动执行脚本,您可以创建一个 crontab:Crontab Generator

crontab -e

在文件末尾添加 crontab:

0 1 * * * python3 /opt/hcloud-snapshot-as-backup/snapshot-as-backup.py >/dev/null 2>&1

此 crontab 每天凌晨 1 点执行该脚本。

配置

根据你运行脚本的方式,你需要进行配置。
当你使用 Docker 运行脚本时,选项通过环境变量设置。
当你通过命令/crontab 运行脚本时,选项通过配置文件设置(config.json)。
当你使用 Helm 部署脚本时,选项在你的 values 文件中按项目设置(chart README)。

Generate Hetzner Cloud Console API-Key

  1. Login to Hetzner Cloud Console
  2. Select your project
  3. Click "Access" on the left side
  4. Switch to "API-Tokens" at the top
  5. Click on "Create API Token" and create a new token with read & write permission
  6. Copy the key and paste it into the environment variables under API_TOKEN or in the config under api-token

Create Hetzner API Token Gif

选择默认保留的备份数量

您可以在 KEEP_LAST 下的环境变量或 keep-last 下的配置中指定默认情况下每台服务器要保留多少个备份。
可以使用标签直接在 Hetzner Cloud Console 中覆盖默认值。
添加标签 AUTOBACKUP.KEEP-LAST,其值为应应用于该服务器的值。
最新的备份会被保留,旧的备份会被删除。

为应备份的服务器添加标签

所有应被脚本和自动快照备份包含的服务器,必须具有标签 AUTOBACKUP,其值为 true

将默认标签更改为其他值

您可以通过更改配置中的 label_selector 值,将默认标签从 AUTOBACKUP 更改为其他值。如果在 docker 环境中,您可以设置 LABEL_SELECTOR 环境变量。更改 label_selector 时,您还必须将其用于 KEEP-LAST 设置。

为您的快照选择名称(可选)

SNAPSHOT_NAME 下的环境变量或配置中的 snapshot-name 下指定您希望如何命名您的快照。
默认情况下,它们的名称为 <server name>-<timestamp>

占位符
%id%服务器的 ID
%name%服务器的名称
%timestamp%当前时间戳
%date%当前日期 (%Y-%m-%d)
%time%当前时间 (%H:%M:%S)

Docker: 通过 cron 指定脚本的执行频率

如果在 Docker 中运行该脚本,可以在 CRON 下的环境变量中指定一个 cron。
该 cron 用于定义脚本应执行的频率和时间。
可选地,将 CRON 设置为 false 以在容器中禁用 CronScheduler,并在容器外部进行调度。

您可以在此处创建一个 cron:Cron Generator

例如:

0 1 * * *

此 cron 使脚本每天凌晨 1 点执行。

关于标签

此脚本与功能强大的 Hetzner 标签配合使用。

  • Server
    • AUTOBACKUP
      • 带有标签 AUTOBACKUP 且值为 true 的服务器将被脚本包含
      • 这使得可以直接在 Hetzner Cloud 控制台中指定哪些服务器应创建自动快照备份
    • AUTOBACKUP.KEEP-LAST(可选)
      • 标签 AUTOBACKUP.KEEP-LAST 可用于指定应为该服务器保留多少个备份
      • 如果未指定此标签,则使用配置中的默认值
  • Snapshots
    • AUTOBACKUP
      • 快照会带有标签 AUTOBACKUP
      • 这使得可以查看哪些快照是由脚本自动创建的
      • 脚本会忽略所有不带此标签的快照(因此,只有带有此标签的旧快照会被删除)
      • 如果您想保留一个自动生成的快照,只需移除标签 AUTOBACKUP

Server-Labels

为什么这个脚本有用?

优点缺点
快照备份可以在自定义时间创建(在指定时间备份)快照数量有限(但可以申请更高的限制)
可以保留任意数量(备份最多仅 7 个)对于超大型服务器可能更昂贵(大量存储)
对于较小的服务器,比备份更便宜(占用更少的存储空间)
不绑定服务器(如果删除云服务器,备份将被删除)
可以直接从快照创建新服务器
快照的存储位置与云服务器不同(同一网络区域)(备份仅存储在云服务器的同一位置)
快照可以移动到另一个项目