بک‌آپ‌گیری روی سرورهای ریموت در DirectAdmin – FTP، تست اسکریپت، متغیرها و سفارشی‌سازی کامل ftp_upload.php

DirectAdmin به‌صورت پیش‌فرض فقط از انتقال بک‌آپ به سرور FTP/FTPS پشتیبانی می‌کند. این مقاله نحوه تنظیم بک‌آپ ریموت، تست دستی ftp_upload.php، مشاهده متغیرهای محیطی، سفارشی‌سازی رفتار آپلود، تبدیل اسکریپت به curl یا ncftpput و استفاده از روش اصلی PHP را به‌صورت کامل توضیح می‌دهد.

FTP TransfersRemote BackupAlternative Upload Methods

~4 دقیقه مطالعه • بروزرسانی ۸ اسفند ۱۴۰۴

1. بک‌آپ‌گیری ریموت در DirectAdmin


در حال حاضر تنها روش داخلی DirectAdmin برای بک‌آپ‌گیری ریموت، انتقال فایل‌ها به یک سرور FTP است. این تنظیمات از مسیر زیر انجام می‌شود:


Admin Level → Admin Backup/Transfer

هر دو حالت FTP و FTPS پشتیبانی می‌شوند.


2. تست دستی اسکریپت ftp_upload.php


برای دیباگ مشکلات آپلود FTP، می‌توانید اسکریپت ftp_upload.php را با متغیرهای محیطی اجرا کنید.


2.1 نمونه دستور تست


cd /usr/local/directadmin/scripts
ftp_port=21 \
ftp_local_file=/path/to/a/file.txt \
ftp_ip=1.2.3.4 \
ftp_username=fred \
ftp_password_esc_double_quote=fredspass \
ftp_path=/remote/path \
ftp_secure=ftps \
./ftp_upload.php

هر خطایی که وجود داشته باشد در خروجی نمایش داده می‌شود. همچنین لاگ‌های FTP روی سرور مقصد را بررسی کنید.


3. متغیرهای محیطی قابل استفاده در ftp_upload.php


DirectAdmin هنگام اجرای بک‌آپ، مجموعه‌ای از متغیرها را به اسکریپت ارسال می‌کند. نمونه خروجی برای یک بک‌آپ FTP با ID=1:


action=backup
append_to_path=nothing
database_data_aware=yes
dayofmonth=5
dayofweek=*
email_data_aware=yes
ftp_ip=127.0.0.1
ftp_local_file=/home/tmp/admin/user.admin.testuser.tar.gz
ftp_local_path=/home/tmp/admin
ftp_password=pass"word
ftp_password_esc_double_quote=pass\"word
ftp_path=/admin_backups
ftp_port=21
ftp_remote_file=user.admin.testuser.tar.gz
ftp_username=admin
hour=5
id=1
minute=0
month=1
owner=admin
select0=testuser
type=admin
value=multiple
when=now
where=ftp

3.1 نحوه تولید این خروجی


cd /usr/local/directadmin/scripts/custom
cp /var/www/cgi-bin/printenv ftp_upload.php
echo "exit 1;" >> ftp_upload.php
chmod 755 ftp_upload.php
./ftp_upload.php

پس از اجرای بک‌آپ، تمام متغیرها نمایش داده می‌شوند. سپس می‌توانید اسکریپت را حذف یا نسخه سفارشی خود را ایجاد کنید.


4. سفارشی‌سازی رفتار آپلود بر اساس ID بک‌آپ


می‌توانید رفتار آپلود را بر اساس ID بک‌آپ تغییر دهید. مثال: اگر بخواهید بک‌آپ ID=1 با SCP آپلود شود:


if [ "$id" = "1" ]; then
   # scp upload code
   exit 0;
fi

نکته: اگر گزینه "When: Now" انتخاب شود، ID ارسال نمی‌شود. اما اگر روی یک کرون موجود "Run Now" بزنید، ID ارسال می‌شود.


5. تبدیل ftp_upload.php به curl


DirectAdmin به‌صورت پیش‌فرض از PHP برای آپلود FTP استفاده می‌کند. برای دیباگ یا نیازهای خاص، می‌توانید آن را با curl جایگزین کنید.


5.1 کپی اسکریپت


cp -rp /usr/local/directadmin/scripts/ftp_upload.php \
/usr/local/directadmin/scripts/custom/ftp_upload.php

5.2 جایگزینی محتوا با نسخه curl


/bin/sh
ETH=eth0
CURL=/usr/local/bin/curl

result=`$CURL --interface $ETH -T $ftp_local_file \
-u $ftp_username:$ftp_password_esc_double_quote \
ftp://$ftp_ip$ftp_path$ftp_remote_file 2>&1`

if grep -qi "curl: (67) Access denied: 530" <<< "$result"; then
    echo "FTP access denied. Check login details."
    exit 1
fi
if grep -qi "curl: (6) Couldn't resolve host" <<< "$result"; then
    echo "Host could not be resolved."
    exit 1
fi
if grep -qi "curl: (9) Uploaded unaligned file size" <<< "$result"; then
    echo "File upload failed. Check path."
    exit 1
fi
if grep -qi "curl: Can't open" <<< "$result"; then
    echo "Can't open $ftp_local_file"
    exit 1
fi

مطمئن شوید ftp_path با اسلش انتهایی تمام می‌شود.


6. تبدیل اسکریپت به ncftpput


/bin/sh
/usr/bin/ncftpput -t 25 -m \
-u "$ftp_username" -p "$ftp_password_esc_double_quote" \
"$ftp_ip" "$ftp_path" "$ftp_local_file" 2>&1
RET=$?
exit $RET

7. روش اصلی PHP برای آپلود FTP


/usr/local/bin/php


این همان روش پیش‌فرض DirectAdmin است.


نوشته و پژوهش شده توسط دکتر شاهین صیامی