اسکریپت انتقال اکانت‌های سی‌پنل به دایرکت‌ادمین

همونطور که اطلاع دارید با افزایش نجومی هزینه‌های لایسنس سی‌پنل خیلی از سرویس‌دهنده‌ها تصمیم دارن سی‌پنل رو از سرورهاشون حذف کنن و دایرکت‌ادمین رو جایگزین اون کنن.

طبیعتا تنها راه انجام این انتقال اینه که سرور جدیدی با کنترل‌پنل دایرکت‌ادمین ستاپ بشه و اکانت‌ها از سی‌پنل به دایرکت ادمین منتقل و ریستور بشن.

خبر خوب این که دایرکت‌ادمین اخیرا اسکریپت تبدیل بکاپ سی‌پنل به دایرکت‌ادمین رو تو نسخه جدیدش اضافه کرده و اگر شما فول بکاپ سی‌پنل رو با فرمت اسم cpmove-user.tar.gz روی دایرکت‌ادمین ریستور کنید، بصورت خودکار به فول بکاپ دایرکت‌ادمین تبدیل و ریستور می‌شه.

یک راه انتقال اینه که از همه اکانت‌های سی‌پنل فول بکاپ بگیرید، به یکباره همه رو به سرور دایرکت‌ادمین انتقال بدید و در نهایت همه اکانت‌ها رو یک جا ریستور بزنید.

این کار اشکالاتی داره…

  • اول این که تهیه فول بکاپ از همه اکانت‌ها دیسک رو تا حد زیادی اشغال می‌کنه. شما یک فول بکاپ از همه اکانت‌ها رو سرور سی‌پنل دارید، و دو فول بکاپ هم روی سرور دایرکت‌ادمین خواهید داشت. (یکی بکاپ‌های سی‌پنل و دیگری بکاپ‌های تبدیل شده به دایرکت ادمین)
  • پروسه تهیه فول بکاپ از همه اکانت‌ها زمان‌بره، چه برسه به این که این بکاپ‌ها بخوان به دایرکت‌ادمین هم منتقل بشن و تازه اونجا شروع به ریستور کنن. با این حساب اطلاعات وارد شده توسط کاربرها تو مدت نقل و انتقال از بین می‌ره.
  • وقتی ریستور همه اکانت ها همزمان انجام بشه، عیب یابی سخت می‌شه، تا زمانی که ریستور بکاپ ها به اتمام نرسه، دایرکت ادمین لاگی از وضعیت ریستور و خطاهای احتمالی اعلام نمی‌کنه.
  • احتمالا سایت‌ها داون تایم زیادی خواهند داشت و این موضوع کاربرها رو ناراضی می‌کنه!

خب چه باید کرد؟ هرکس به طریقی به هر حال این انتقال رو مدیریت می‌کنه، من برای انجام این کار اسکریپتی نوشتم که انتقال بکاپ‌ها رو تک تک انجام می‌ده. به این صورت که:

  • از هر اکانت روی سی‌پنل فول بکاپ می‌گیره. (فول بکاپ شامل همه اطلاعات اکانت روی سی‌پنل به جز دایرکتوری public_html هست)
  • فول بکاپ رو به دایرکت‌ادمین انتقال می‌ده و ریستور می‌کنه.
  • محتوای دایرکتوری public_html یوزر سی‌پنل رو به public_html یوزر دایرکت ادمین انتقال می‌ده.
  • IP اکانت رو روی سرور سی‌پنلی به IP سرور دایرکت‌ادمین تغییر می‌ده تا داون تایم به کمترین حد ممکن برسه.
  • بعد از انتقال، اکانت رو روی سی‌پنل ساسپند می‌کنه تا کاربر بعد انتقال دیگه تغییراتی روی اکانت سی‌پنلی نده.
  • فول بکاپ سی‌پنل هر اکانت رو بعد از انتقال از هر دو سرور سی‌پنل و دایرکت‌ادمین حذف می‌کنه تا فضا کمتر اشغال بشه.
  • با توجه به این که ریستور تک تک انجام می‌شه، بعد ریستور هر اکانت لاگش تو دایرکت‌ادمین درج می‌شه تا اگر اشکالی هست بشه سریعا رفع کرد.
  • و هزاران هزار جایزه نقدی و غیرنقدی دیگر…

خب، اسکریپت رو این پایین یا تو این لینک می‌تونید ببینید:

#!/bin/sh
#You can get the script updates from  https://bit.ly/2ktJVHn

DEST="192.168.1.1" #Your DirectAdmin Server IP
PORT="22" #Your Directadmin Server ssh Port
cd /var/cpanel/users
for USER in *; do
if [ "$USER" != "system" ]
then
       echo "starting transfer process for $USER"
	sleep 2

        #backup cpanel account (public_html excluded) and transfer to directadmin server.
        /scripts/pkgacct $USER --skippublichtml
        rsync -av -e "ssh -p $PORT" /home/cpmove-$USER.tar.gz root@$DEST:/backup/

	#Restore backup in directadmin server.
	ssh -p $PORT root@$DEST "
		chown admin.admin /backup/
		chown admin.admin /backup/cpmove-$USER.tar.gz
		echo 'action=restore&ip%5Fchoice=select&ip=$DEST&local%5Fpath=%2Fbackup&owner=admin&select%30=cpmove-$USER.tar.gz&type=admin&value=multiple&when=now&where=local' >> /usr/local/directadmin/data/task.queue
		echo "backup is restoring in DirectAdmin!"
		sleep 2
		while \$(grep -Fq "action=restore" /usr/local/directadmin/data/task.queue 2>/dev/null); do printf "%s""$i" .; sleep 2; done;
		while \$(test ! -d /home/$USER/public_html); do printf "%s""$i" .; sleep 2; done;
		printf '\n'
		echo "backup restoration completed in DirectAdmin!"
		sleep 2
	"
	
	#transfer public_html files and dirs to destinaton server	
	rsync -av -e "ssh -p $PORT" /home/$USER/public_html/ root@$DEST:/home/$USER/public_html/
	ssh -p $PORT root@$DEST "
		chown -R $USER.$USER /home/$USER/public_html/
		find /home/$USER/public_html/ -type d -exec chmod 755 {} \;
	"

	#remove backup files in order to free space
	ssh -p $PORT root@$DEST "rm /backup/cpmove-$USER.tar.gz"
	rm /home/cpmove-$USER.tar.gz

	#change user ip in order to transfer site loading to destination server.
	/usr/local/cpanel/bin/setsiteip -u $USER $DEST	

	/scripts/suspendacct $USER "User transferred to Direct Admin."

	echo "transfer process for $USER has been completed!"
	sleep 2
	printf '\n'
fi
done

چند نکته که برای استفاده از اسکریپت حتما باید بهش توجه داشته باشید:

  • به جای مقدار 192.168.1.1 روی اسکریپت باید IP سرور دایرکت‌ادمین رو واردکنید.
  • اگر سرور شما از پورتی به جز 22 برای اتصال ssh استفاده می‌کنه، به جای مقدار 22 روی اسکریپت باید این پورت رو قرار بدید.
  • حتما و حتما قبل از شروع انتقال، IP سرور دایرکت ادمین رو از بخش Add a New IP Address روی پنل WHM به سی‌پنل اضافه کنید، در غیر اینصورت تغییر IP اکانت‌ها بعد انتقال به IP دایرکت‌ادمین انجام نمی‌شه. اگر کلا می‌خواید تغییر IP انجام نشه، لاین زیر رو از اسکریپت حذف کنید:
    /usr/local/cpanel/bin/setsiteip -u $USER $DEST
  • اگر می‌خواید بعد از انتقال، اکانت روی سی‌پنل ساسپند نشه، لاین زیر رو از اسکریپت حذف کنید:
    /scripts/suspendacct $USER "User transferred to Direct Admin."
  • حتما و حتما قبل از انتقال چک کنید که همه، تکرار می‌کنم همه اکانت‌ها آنساسپند باشن. اگر اکانتی ساسپند باشه، انتقال روی اون اکانت گیر می‌کنه و دیگه پیش نمی‌ره.

در نظر داشته باشید برای برقراری ارتباط ssh بین دو سرور لازمه که اتصال توسط کلید ssh صورت بگیره و نه پسورد. برای این منظور کافیه که محتویات فایل زیر رو از سرور سی‌پنل،

cat /root/.ssh/id_rsa.pub

به انتهای فایل زیر رو سرور دایرکت‌ادمین اضافه کنید.

nano /root/.ssh/authorized_keys

اگر فایل اول روی سرور سی‌پنل شما وجود نداشت، با دستور زیر می‌تونید اون رو ایجاد کنید:

ssh-keygen

برای استفاده از این اسکریپت نیازی نیست حرفه‌ای باشید، حتی اگر اولین بارتون هست که می‌خواید یک بش اسکریپت رو روی سرورتون اجرا کنید می‌تونید به شکل زیر عمل کنید:

اول با دستور زیر یک فایل بسازید، (مثلا به اسم xfer-cp-accts-to-da.sh)

nano xfer-cp-accts-to-da.sh

بعد از اجرای دستور بالا، محتویات اسکریپت رو بعد از اعمال تغییرات لازم توی ترمینال کپی کنید و با استفاده از ctrl+x تغییرات رو ذخیره کنید.

سپس با دستور زیر به فایل پرمیشن لازم برای اجرا شدن رو بدید:

chmod 0755 transfer-cp-to-da.sh

و در نهایت با اجرای دستور زیر، اسکریپت رو اجرا کنید:

./transfer-cp-to-da.sh

بی‌صبرانه منتظر شنیدن اشکالات احتمالی گزارش شده توسط شما هستم!

و تمام!

منتشرشده توسط

FaЯshid

وب‌هاستینگ شغل مورد علاقمه و سعی می‌کنم بیشتر توی این حوزه بنویسم

3 دیدگاه در “اسکریپت انتقال اکانت‌های سی‌پنل به دایرکت‌ادمین”

  1. سلام اقا فرشید تشکر از اسکریپت و توضیحات شما، خواستم از شما راهنمایی بگیرم که بهتر نیست از لایسنس روت سیپنل استفاده کنیم اغلب شرکت ها از این نوع لایسنس دارن استفاده می کنن؟ شما از سیپنل به دایرکت مهاجرت کردید و از نظر فروش هاست دایرکت ادمین مشتری هست یا به مشکل بر خواهیم خورد؟ تشکر

    1. سلام
      متاسفانه همینطوره و اکثر شرکت‌های هاستینگ از لایسنس اشتراکی سی‌پنل استفاده می‌کنن که قانونی نیست. این که با مهاجرت به دایرکت‌ادمین مشکلی در فروش ایجاد می‌شه یا نه بحث من نبوده و صرفا اسکریپت رو به این علت تهیه کردم که انتقال به سادگی انجام بشه
      اگر نظر من رو می‌خواید من ترجیح می‌دم از لایسنس قانونی با مشتری کمتر استفاده کنم تا این که با نقض کپی رایت مشتری‌هام رو نگه دارم

پاسخی بگذارید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *