先决条件
要部署此备份机器人,您需要准备好基本的服务器和 AWS 环境。请检查并提供以下内容:
- SSH 访问 访问 DirectAdmin 服务器 sudo/root.
- 安装 AWS CLI (推荐使用 v2 版本)或类似工具 rclone.
- 一 S3 桶 在 AWS 中使用所需的名称和相应的区域。.
- 用户 我是 访问该存储桶的权限有限或使用 IAM 角色 (如果运行在 EC2 上)。.
- 服务器有足够的空间用于临时存储备份。.
- 激活 生命周期策略 在 S3 中,7 天后删除。.
工作流程概述
简化后的流程图如下:
- DirectAdmin 会创建备份并将其保存到本地文件夹(例如 .
/home/admin/备份). - 该脚本(机器人)按计划运行并将备份上传到 S3。.
- 确保上传成功后,脚本将加载本地文件,这些文件数量超过…… 2天 它会去除年龄信息。.
- 在 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 awsclisudo 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) 时,应采用最小访问权限、加密和适当的监控措施。务必测试恢复过程,以确保恢复正常。.
示例文件和资源
- 样本 生命周期.json 和脚本文件 upload_and_clean.sh 以上文本中已有相关信息。.
- AWS S3 生命周期文档
- AWS CLI 文档









