Erstellung eines Roboters zum Senden von DirectAdmin-Hostingsystem-Backups an den Amazon S3-Dienst
در این مقاله نحوه ساخت ربات بکاپ برای دایرکت ادمین و ارسال آن به S3 آمازون را به شما آموزش می‌دهیم. با ما همراه باشید.

Erstellung eines Roboters zum Senden von DirectAdmin-Hostingsystem-Backups an den Amazon S3-Dienst

Dieser Artikel zeigt Ihnen, wie Sie mithilfe eines Bots DirectAdmin-Hosting-Backups in Amazon S3 hochladen und alte Dateien löschen. Die Schritte umfassen das Erstellen eines S3-Kontos, das Konfigurieren von IAM und das Schreiben eines Automatisierungsskripts.
0 Aktien
0
0
0
0

Voraussetzungen

برای پیاده‌سازی این ربات پشتیبان‌گیری نیاز است محیط سرور و AWS به‌صورت پایه‌ای آماده باشند. موارد زیر را بررسی و فراهم کنید:

  • دسترسی SSH به سرور دایرکت‌ادمین با دسترسی sudo/root.
  • Installation AWS CLI (نسخه v2 ترجیحاً) یا ابزارهایی مثل rclone.
  • Eins S3 bucket در AWS با نام دلخواه و Region مناسب.
  • یک کاربر IAM با دسترسی محدود به آن bucket یا استفاده از IAM-Rolle (درصورت اجرای روی EC2).
  • فضای کافی روی سرور برای نگهداری موقت بکاپ‌ها.
  • Aktivierung lifecycle policy در S3 برای حذف پس از 7 روز.

نمود کلی جریان کار

جریان ساده شده فرایند به صورت زیر است:

  1. دایرکت‌ادمین بکاپ تولید می‌کند و در پوشهٔ محلی ذخیره می‌شود (مثلاً /home/admin/backups).
  2. اسکریپت (ربات) به‌صورت برنامه‌ریزی‌شده اجرا می‌شود و بکاپ‌ها را به S3 آپلود می‌کند.
  3. پس از اطمینان از آپلود، اسکریپت فایل‌های محلی که بیش از 2 روز سن دارند را حذف می‌کند.
  4. در S3 یک lifecycle تنظیم شده که نگهداری هر شی را پس از 7 روز حذف می‌کند.

گام به گام پیاده‌سازی

۱) ایجاد S3 Bucket و تنظیم lifecycle (حذف پس از 7 روز)

می‌توانید یک bucket از کنسول AWS بسازید یا از AWS CLI استفاده کنید. نمونهٔ دستور ایجاد bucket (مثال region = eu-central-1):

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

نمونهٔ پالیسی lifecycle (فایل lifecycle.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

Empfehlungen: در صورت نیاز به کاهش هزینهٔ ذخیره‌سازی، می‌توانید از storage-class هایی مانند STANDARD_IA Oder INTELLIGENT_TIERING استفاده کنید. اگر نسخه‌بندی (versioning) فعال است، پالیسی NoncurrentVersionExpiration را هم تنظیم کنید.

۲) ساخت IAM Policy و کاربر با کمترین دسترسی لازم

نمونهٔ پالیسی محدود به یک bucket (فایل 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-Rolle استفاده شود (اگر سرور شما EC2 است). همچنین محدودسازی دسترسی بر اساس IP یا شرایط اضافی (Condition) را در نظر بگیرید.

۳) نصب و پیکربندی AWS CLI روی سرور

مثال نصب برای Debian/Ubuntu و CentOS/RHEL:

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

پیکربندی برای access key در صورت نیاز:

aws configure --profile da-backup

در صورت استفاده از IAM Role روی EC2، نیازی به configure نیست.

۴) اسکریپت نمونه: upload_and_clean.sh

این اسکریپت عملیات آپلود همهٔ بکاپ‌ها به S3 و سپس حذف فایل‌های محلی که بیش از 2 روز از عمرشان گذشته و در S3 وجود دارند انجام می‌دهد. (کد زیر را در مسیر مناسب قرار دهید و اجراپذیر کنید.)

#!/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 اجرایی کنید. مسیر BACKUP_DIR را مطابق با تنظیمات دایرکت‌ادمین خود اصلاح نمایید.

۵) برنامه‌ریزی اجرای خودکار (Cron یا systemd timer)

برای اجرای روزانه در ساعت 02:00 با cron:

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

در صورت تمایل می‌توانید systemd timer بسازید تا کنترل و لاگینگ بهتری داشته باشید.

۶) بررسی و اطمینان از موفقیت عملیات

بررسی لاگ‌ها در /var/log/da_s3_backup.log و تأیید فایل‌ها در S3:

برای دیدن لیست فایل‌ها در S3:

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

دورهٔ lifecycle را از کنسول یا با دستور CLI بررسی کنید تا مطمئن شوید حذف پس از 7 روز انجام خواهد شد.

گزینه‌های پیشرفته و بهبودها

  • Multipart upload برای فایل‌های بزرگ: AWS CLI به‌صورت خودکار پشتیبانی می‌کند، اما برای فایل‌های بسیار بزرگ می‌توانید تنظیمات concurrency را تغییر دهید.
  • Verwendung von SSE-KMS برای رمزنگاری با کلید KMS سازمانی: در aws s3 cp Aus --sse aws:kms --sse-kms-key-id "arn:aws:kms:..." Verwenden.
  • Aktivieren S3 Object Lock و نسخه‌بندی اگر نیاز به محافظت در مقابل حذف ناخواسته دارید.
  • اگر ترافیک خروجی هزینه‌بر است، سرور را نزدیک region S3 یا در زیرساختی با اتصال مستقیم قرار دهید.
  • افزودن نوتیفیکیشن در صورت شکست آپلود با استفاده از AWS SNS یا Webhook برای ارسال پیام به Slack/Email.

نکات امنیتی مهم

چند توصیهٔ کلیدی برای امن نگه داشتن بکاپ‌ها:

  • Least privilege: از حداقل مجوزها برای IAM استفاده کنید.
  • Avoid static keys: کلیدهای دسترسی را در فایل متنی نگه ندارید؛ اگر روی EC2 هستید از IAM Role استفاده کنید.
  • Encryption: از رمزنگاری سمت سرور (SSE) یا رمزنگاری قبل از آپلود (gpg یا rclone encryption) استفاده نمایید.
  • Protokollierung: لاگ‌های دسترسی S3 و CloudTrail را فعال کنید تا هر عملیات ثبت شود.

پایش، هشداردهی و تست بازگردانی (DR)

توصیه‌ها برای اطمینان از کارکرد مداوم:

  • مرتباً فرایند بازگردانی بکاپ از S3 به سرور را تست کنید و این تست را در برنامهٔ ماهیانه قرار دهید.
  • Verwendung von S3 Inventory Und CloudWatch برای پایش میزان آپلود و خطاها.
  • تنظیم هشدار در صورت وقوع خطا یا شکست در آپلود.

مقایسه گزینه‌ها: awscli vs rclone vs s3fs

AWS CLI: ساده، محبوب و مناسب. از lifecycle و encryption AWS پشتیبانی می‌کند.

rclone: امکانات بیشتر برای sync، encryption سمت کلاینت و کنترل bandwidth. مناسب اگر نیاز به محدود کردن پهنای باند یا رمزنگاری قبل از آپلود دارید.

s3fs: باکت را به‌صورت فایل‌سیستم مانت می‌کند، اما ممکن است برای فایل‌های بکاپ حجیم عملکرد و پایداری کمتری داشته باشد.

چرا انتخاب لوکیشن مناسب اهمیت دارد؟

انتخاب لوکیشن مناسب می‌تواند زمان آپلود و هزینهٔ ترافیک خروجی را کاهش دهد. انتخاب لوکیشن نزدیک به S3 region باعث کاهش latency و زمان عملیات خواهد شد.

اگر نیاز به محافظت بیشتر، اتصال اختصاصی یا تفاوت‌های عملکردی دارید، زیرساخت با لوکیشن‌های متعدد و امکانات خاص می‌تواند کمک کند.

نمونهٔ عملیاتی: تنظیم برای یک VPS ترید

  • انتخاب لوکیشن نزدیک به exchange یا سرور ترید برای کاهش latency.
  • فعال‌سازی محافظت DDoS برای سرور مربوطه.
  • انتقال بکاپ‌های دایرکت‌ادمین به S3 منطقه نزدیک برای کاهش زمان بکاپ‌گیری.

خلاصه و نکات نهایی

ساخت ربات شامل سه بخش اصلی است: آپلود ایمن به S3، حذف محلی فایل‌های قدیمی‌تر از 2 روز پس از تأیید آپلود، و پیکربندی lifecycle در S3 برای نگهداری 7 روزه.

از IAM با کمترین دسترسی، رمزنگاری و مانیتورینگ مناسب استفاده کنید. همیشه فرایند Restore را تست کنید تا از قابلیت بازیابی مطمئن شوید.

فایل‌های نمونه و منابع

Häufig gestellte Fragen

Das könnte Ihnen auch gefallen