创建一个机器人,将 DirectAdmin 托管系统备份发送到 Amazon S3 服务
本文将教您如何为 DirectAdmin 创建备份机器人并将其发送到 Amazon S3。敬请期待。.

创建一个机器人,将 DirectAdmin 托管系统备份发送到 Amazon S3 服务

本文将向您展示如何使用机器人将 DirectAdmin 托管备份推送到 Amazon S3 并删除旧文件。步骤包括创建 S3 实例、配置 IAM 以及编写自动化脚本。.
0 股票
0
0
0
0

先决条件

要部署此备份机器人,您需要准备好基本的服务器和 AWS 环境。请检查并提供以下内容:

  • SSH 访问 访问 DirectAdmin 服务器 sudo/root.
  • 安装 AWS CLI (推荐使用 v2 版本)或类似工具 rclone.
  • S3 桶 在 AWS 中使用所需的名称和相应的区域。.
  • 用户 我是 访问该存储桶的权限有限或使用 IAM 角色 (如果运行在 EC2 上)。.
  • 服务器有足够的空间用于临时存储备份。.
  • 激活 生命周期策略 在 S3 中,7 天后删除。.

工作流程概述

简化后的流程图如下:

  1. DirectAdmin 会创建备份并将其保存到本地文件夹(例如 . /home/admin/备份).
  2. 该脚本(机器人)按计划运行并将备份上传到 S3。.
  3. 确保上传成功后,脚本将加载本地文件,这些文件数量超过…… 2天 它会去除年龄信息。.
  4. 在 S3 中 生命周期 它被设置为保留每个对象 7天 删除。.

逐步实施

1)创建S3存储桶并设置生命周期(7天后删除)

您可以从 AWS 控制台创建存储桶,也可以使用 AWS CLI。存储桶创建命令示例(示例区域 = eu-central-1):

aws s3api create-bucket --bucket my-da-backups-bucket --region eu-central-1 --create-bucket-configuration LocationConstraint=eu-central-1

生命周期策略示例(文件) 生命周期.json):

{"Rules":[{"ID":"ExpireBackupsAfter7Days","Prefix":"","Status":"Enabled","Expiration":{"Days":7},"NoncurrentVersionExpiration":{"NoncurrentDays":7}}]}

使用 CLI 应用策略:

aws s3api put-bucket-lifecycle-configuration --bucket my-da-backups-bucket --lifecycle-configuration file://lifecycle.json

建议: 如果您需要降低存储成本,可以使用存储类,例如 标准_IA 或者 智能分层 如果启用了版本控制,则还要设置 NoncurrentVersionExpiration 策略。.

2) 创建 IAM 策略,并授予用户最小必要访问权限

策略仅限于存储桶(JSON 文件)的示例:

{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Action":["s3:PutObject","s3:GetObject","s3:ListBucket","s3:DeleteObject","s3:PutObjectAcl"],"Resource":["arn:aws:s3:::my-da-backups-bucket","arn:aws:s3:::my-da-backups-bucket/*"]}]}

安全提示:最好使用随机密钥而不是静态密钥。 IAM 角色 (如果您的服务器是 EC2)。此外,还可以考虑基于 IP 地址或其他条件限制访问。.

3)在服务器上安装和配置 AWS CLI

Debian/Ubuntu 和 CentOS/RHEL 的安装示例:

sudo apt update && sudo apt install -y awscli
sudo yum install -y awscli

如有需要,请配置访问密钥:

aws configure --profile da-backup

如果您在 EC2 上使用 IAM 角色,则无需进行配置。.

4) 示例脚本:upload_and_clean.sh

此脚本会将所有备份上传到 S3,然后删除 S3 中超过 2 天的本地文件。(请将以下代码放置在正确的路径并使其可执行。)

#!/bin/bash
set -euo pipefail
IFS=$'\n\t'

# Configuration
BACKUP_DIR="/home/admin/backups"
BUCKET="my-da-backups-bucket"
S3_PREFIX="directadmin"
AWS_PROFILE="da-backup"
LOGFILE="/var/log/da_s3_backup.log"
DAYS_LOCAL=2

# Helpers
log() { echo "$(date '+%F %T') $*" | tee -a "$LOGFILE"; }

aws_cmd() {
  if [ -z "${AWS_PROFILE:-}" ]; then
    aws "$@"
  else
    aws --profile "$AWS_PROFILE" "$@"
  fi
}

# Upload files
log "Starting upload from $BACKUP_DIR to s3://$BUCKET/$S3_PREFIX"
aws_cmd s3 cp "$BACKUP_DIR" "s3://$BUCKET/$S3_PREFIX/" --recursive --only-show-errors --storage-class STANDARD --sse AES256
if [ $? -ne 0 ]; then
  log "Error: upload to S3 failed."
  exit 1
fi
log "Upload completed."

# Remove local files older than DAYS_LOCAL if present in S3
log "Searching for local files older than $DAYS_LOCAL days"
find "$BACKUP_DIR" -type f -mtime +"$DAYS_LOCAL" -print0 | while IFS= read -r -d '' file; do
  base=$(basename "$file")
  s3key="$S3_PREFIX/$base"
  if aws_cmd s3api head-object --bucket "$BUCKET" --key "$s3key" >/dev/null 2>&1; then
    log "Removing local file: $file (found in S3)"
    rm -f "$file" && log "Deleted: $file" || log "Error deleting: $file"
  else
    log "S3 object not found: s3://$BUCKET/$s3key — not removed locally."
  fi
done

log "Operation finished."

提示:例如,将脚本文件保存到…… /usr/local/bin/upload_and_clean.sh 放和 chmod +x 执行路径 备份目录 请根据您的DirectAdmin设置进行修改。.

5) 安排自动执行(Cron 或 systemd 定时器)

使用 cron 定时任务,每天凌晨 2 点运行:

0 2 * * * /usr/local/bin/upload_and_clean.sh >> /var/log/da_s3_backup.log 2>&1

如果你愿意,可以。 systemd 定时器 旨在实现更好的控制和日志记录。.

6)检查并确保操作成功

查看日志 /var/log/da_s3_backup.log 并验证 S3 中的文件:

要查看 S3 中的文件列表:

aws s3 ls s3://my-da-backups-bucket/directadmin

从控制台或使用 CLI 命令检查生命周期,以确保 7 天后进行删除。.

高级选项和改进

  • 多部分上传 对于大文件:AWS CLI 会自动支持,但对于非常大的文件,您可以更改并发设置。.
  • 使用 SSE-KMS 使用企业级 KMS 密钥进行加密: aws s3 cp--sse aws:kms --sse-kms-key-id "arn:aws:kms:..."" 使用。.
  • 激活 S3 对象锁定 如果您需要防止意外删除,还可以使用版本控制。.
  • 如果出站流量成本很高,请将服务器放置在 S3 区域附近或直接连接的基础设施中。.
  • 如果上传失败,请使用 AWS SNS 或 Webhook 发送消息到 Slack/电子邮件通知。.

重要安全提示

以下是一些确保备份安全的关键提示:

  • 最小权限原则: 使用最少的 IAM 权限。.
  • 避免使用静态键: 不要将访问密钥存储在文本文件中;如果您使用的是 EC2,请使用 IAM 角色。.
  • 加密: 使用服务器端加密(SSE)或预上传加密(gpg 或 rclone 加密)。.
  • 日志记录: 启用 S3 和 CloudTrail 访问日志,以记录每次操作。.

监控、警报和灾难恢复 (DR) 测试

为确保持续运行,建议如下:

  • 定期测试从 S3 恢复备份到服务器的过程,并将此测试纳入您的月度计划。.
  • 使用 S3 库存CloudWatch 监控上传速率和错误情况。.
  • 设置错误或上传失败警报。.

选项比较:awscli、rclone 和 s3fs

AWS CLI简单、流行、方便。支持 AWS 生命周期和加密。.

rclone:新增同步、客户端加密和带宽控制等功能。如果您需要限制带宽或上传前进行加密,此功能非常适用。.

s3fs将存储桶挂载为文件系统,但对于大型备份文件,性能和稳定性可能会降低。.

为什么选择合适的地点很重要?

选择合适的位置可以减少上传时间和出站流量成本。选择靠近 S3 区域的位置可以降低延迟和运行时间。.

如果您需要额外的保护、专用连接或性能差异,具有多个位置和特殊功能的基础设施可以提供帮助。.

操作示例:VPS交易设置

  • 选择靠近交易所或交易服务器的位置,以减少延迟。.
  • 为相关服务器启用DDoS防护。.
  • 将 DirectAdmin 备份迁移到附近的 S3 存储,以减少备份时间。.

总结与结论

构建机器人包含三个主要部分:安全上传到 S3、本地删除旧文件、 2天 确认上传后,在 S3 中配置保留生命周期。 7天.

使用身份和访问管理 (IAM) 时,应采用最小访问权限、加密和适当的监控措施。务必测试恢复过程,以确保恢复正常。.

示例文件和资源

常见问题解答

您可能也喜欢
亚马逊弹性计算云

Amazon EC2(弹性计算云)——面向开发人员和工程师的专家指南

在数字化转型时代,云基础设施是企业技术支持的主要支柱。Amazon EC2(弹性计算云)是 AWS 生态系统的关键组成部分,它使您能够灵活、可扩展且完全掌控地部署虚拟服务器。本文将深入介绍该服务、技术特性、实例模型、最佳实践以及购买流程。
如何使用 Steam 命令恢复

关于安装和使用 SteamCMD 启动游戏服务器的完整教程

SteamCMD 是 Valve 官方推出的工具,用于下载、安装和更新游戏的专用服务器版本。该工具允许游戏服务器管理员创建、管理专用服务器并自动接收更新,而无需使用完整的 Steam 客户端。在本指南中,我们将逐步引导您完成 SteamCMD 的安装和设置,以及如何为游戏安装专用服务器。