- Voraussetzungen
- نمود کلی جریان کار
- گام به گام پیادهسازی
- گزینههای پیشرفته و بهبودها
- نکات امنیتی مهم
- پایش، هشداردهی و تست بازگردانی (DR)
- مقایسه گزینهها: awscli vs rclone vs s3fs
- چرا انتخاب لوکیشن مناسب اهمیت دارد؟
- نمونهٔ عملیاتی: تنظیم برای یک VPS ترید
- خلاصه و نکات نهایی
- فایلهای نمونه و منابع
- Häufig gestellte Fragen
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 روز.
نمود کلی جریان کار
جریان ساده شده فرایند به صورت زیر است:
- دایرکتادمین بکاپ تولید میکند و در پوشهٔ محلی ذخیره میشود (مثلاً
/home/admin/backups). - اسکریپت (ربات) بهصورت برنامهریزیشده اجرا میشود و بکاپها را به S3 آپلود میکند.
- پس از اطمینان از آپلود، اسکریپت فایلهای محلی که بیش از 2 روز سن دارند را حذف میکند.
- در 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.jsonEmpfehlungen: در صورت نیاز به کاهش هزینهٔ ذخیرهسازی، میتوانید از 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 awsclisudo 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 cpAus--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 را تست کنید تا از قابلیت بازیابی مطمئن شوید.
فایلهای نمونه و منابع
- Probe lifecycle.json و فایل اسکریپت upload_and_clean.sh در متن بالا موجود است.
- مستندات AWS S3 lifecycle
- مستندات AWS CLI









