mirror of
				https://github.com/usmannasir/cyberpanel.git
				synced 2025-11-03 20:05:58 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			492 lines
		
	
	
		
			18 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			492 lines
		
	
	
		
			18 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
#!/bin/bash
 | 
						|
 | 
						|
#EasyEngine to CyberPanel migration script
 | 
						|
 | 
						|
sudoer=""
 | 
						|
server_port="22"
 | 
						|
user_name="root"
 | 
						|
RED='\033[0;31m'
 | 
						|
NC='\033[0m'
 | 
						|
DIR="/opt/easyengine"
 | 
						|
DIR_SSL="/opt/easyengine/services/nginx-proxy/certs"
 | 
						|
DIR_TMP="/opt/easyengine/tmp"
 | 
						|
SSL="0"
 | 
						|
owner_user=""
 | 
						|
owner_group=""
 | 
						|
 | 
						|
set_header() {
 | 
						|
if [[ -d /opt/easyengine/sites/${domains[$i]}/app/htdocs/wp-content ]] ; then
 | 
						|
ssh -o StrictHostKeyChecking=no root@$server_ip -p$server_port -i /root/.ssh/cyberpanel_migration_key "$sudoer wget -q -O /root/header.sh https://raw.githubusercontent.com/usmannasir/cyberpanel/stable/CPScripts/EasyEngine/header.sh ; $sudoer bash /root/header.sh ${domains[$i]}"
 | 
						|
fi
 | 
						|
}
 | 
						|
 | 
						|
fix_permission() {
 | 
						|
ssh_v="ssh -o StrictHostKeyChecking=no root@$server_ip -p$server_port -i /root/.ssh/cyberpanel_migration_key"
 | 
						|
echo -e "\nget the user and group on remote CyberPanel server...."
 | 
						|
owner_user=$(${ssh_v} stat -c '%U' /home/${domains[$i]})
 | 
						|
owner_group=$(${ssh_v} stat -c '%G' /home/${domains[$i]})
 | 
						|
#get user and group on remote server.
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
set_ssl_cyberpanel() {
 | 
						|
if [[ $SSL == "1" ]] ; then
 | 
						|
  echo -e "\nstarting certificate and private key transfer..."
 | 
						|
ssh_v="ssh -o StrictHostKeyChecking=no root@$server_ip -p$server_port -i /root/.ssh/cyberpanel_migration_key"
 | 
						|
${ssh_v} "rm -f /etc/letsencrypt/live/${domains[$i]}/fullchain.pem"
 | 
						|
${ssh_v} "rm -f /etc/letsencrypt/live/${domains[$i]}/privkey.pem"
 | 
						|
#remove current self-signed cert
 | 
						|
 | 
						|
rsync --stats -av -e "ssh -o StrictHostKeyChecking=no -p $server_port -i /root/.ssh/cyberpanel_migration_key" $cert_file root@$server_ip:/etc/letsencrypt/live/${domains[$i]}/fullchain.pem
 | 
						|
  if [[ $? == "0" ]] ; then
 | 
						|
    echo -e "\ncert file transferred...\n"
 | 
						|
  else
 | 
						|
    echo -e "\ncert file trasnfer failed..."
 | 
						|
    clean_up
 | 
						|
    exit
 | 
						|
  fi
 | 
						|
 | 
						|
rsync --stats -av -e "ssh -o StrictHostKeyChecking=no -p $server_port -i /root/.ssh/cyberpanel_migration_key" $key_file root@$server_ip:/etc/letsencrypt/live/${domains[$i]}/privkey.pem
 | 
						|
    if [[ $? == "0" ]] ; then
 | 
						|
      echo -e "\nkey file has been succesfully transferred to CyberPanel server...\n"
 | 
						|
    else
 | 
						|
      echo -e "\nkey file trasnfer failed..."
 | 
						|
      clean_up
 | 
						|
      exit
 | 
						|
    fi
 | 
						|
#rsync cert and key
 | 
						|
 | 
						|
echo -e "checking LiteSpeed status on remote Cyebrpanel server..."
 | 
						|
${ssh_v} "/usr/local/lsws/bin/lswsctrl stop"
 | 
						|
${ssh_v} "pkill lsphp"
 | 
						|
${ssh_v} "systemctl stop lsws"
 | 
						|
${ssh_v} "systemctl start lsws"
 | 
						|
check_string=$(${ssh_v} "ps -aux | grep litespeed | grep -v grep")
 | 
						|
  if echo $check_string | grep -q litespeed ; then
 | 
						|
    echo -e "\nrestart LiteSpeed successful..."
 | 
						|
  else
 | 
						|
    echo -e "LiteSpeed start failed..."
 | 
						|
  fi
 | 
						|
fi
 | 
						|
#restart LSWS to apply new cert
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
show_cyberpanel_site() {
 | 
						|
  echo -e "\nchecking current websites on remote CyberPanel server..."
 | 
						|
  ssh_v="ssh -o StrictHostKeyChecking=no root@$server_ip -p$server_port -i /root/.ssh/cyberpanel_migration_key"
 | 
						|
  $ssh_v "cyberpanel listWebsitesPretty"
 | 
						|
}
 | 
						|
 | 
						|
create_database() {
 | 
						|
  echo -e "\nstarting database creation on remote CyberPanel server..."
 | 
						|
  ssh_v="ssh -o StrictHostKeyChecking=no root@$server_ip -p$server_port -i /root/.ssh/cyberpanel_migration_key"
 | 
						|
 | 
						|
  check_string=$(${ssh_v} "cyberpanel createDatabase --databaseWebsite  ${domains[$i]} --dbName $WPDBNAME --dbUsername $WPDBUSER --dbPassword $WPDBPASS")
 | 
						|
  if echo $check_string | grep -q "None" ; then
 | 
						|
    echo -e "\ndatabase successfully created..."
 | 
						|
  else
 | 
						|
    echo -e "\ndatabase failed to create..."
 | 
						|
    clean_up
 | 
						|
    exit
 | 
						|
  fi
 | 
						|
 | 
						|
  check_string=$(${ssh_v} "mysql -u $WPDBUSER -p$WPDBPASS $WPDBNAME < /home/${domains[$i]}/$database_name ; if [ $? = 0 ] ; then echo "OK" ; fi")
 | 
						|
  if echo $check_string | grep -q "OK" ; then
 | 
						|
    echo -e "\nstarting  database import on remote CyberPanel..."
 | 
						|
    echo -e "\ndatabase successfully imported..."
 | 
						|
    ${ssh_v} rm -f /home/${domains[$i]}/$database_name
 | 
						|
  else
 | 
						|
    echo -e "\ndatabase import failed..."
 | 
						|
    ${ssh_v} rm -f /home/${domains[$i]}/$database_name
 | 
						|
    clean_up
 | 
						|
    exit
 | 
						|
  fi
 | 
						|
 | 
						|
#  ${ssh_v} sed -i 's|global-db:3306|localhost:3306|g' /home/${domains[$i]}/public_html/wp-config.php
 | 
						|
 | 
						|
  ${ssh_v} "sed -i 's|global-db:3306|/var/lib/mysql/mysql.sock|g' /home/${domains[$i]}/public_html/wp-config.php"
 | 
						|
  #set DB HOST to local unix socket for better performance.
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
clean_up() {
 | 
						|
#remove all the files created during operation
 | 
						|
echo -e "\nstarting clean up process..."
 | 
						|
ssh -o StrictHostKeyChecking=no root@$server_ip -p$server_port -i /root/.ssh/cyberpanel_migration_key "$sudoer wget -q -O /root/key.sh https://raw.githubusercontent.com/usmannasir/cyberpanel/stable/CPScripts/EasyEngine/key.sh ; $sudoer bash /root/key.sh disable"
 | 
						|
rm -f /root/.ssh/cyberpanel_migration_key
 | 
						|
rm -rf /opt/easyengine/tmp
 | 
						|
echo -e "\nclean up successful..."
 | 
						|
}
 | 
						|
 | 
						|
create_site_cyberpanel() {
 | 
						|
ssh_v="ssh -o StrictHostKeyChecking=no root@$server_ip -p$server_port -i /root/.ssh/cyberpanel_migration_key"
 | 
						|
echo -e "\nstarting to create ${domains[$i]} on remote CyberPanel server..."
 | 
						|
echo -e "\nyou may see error message on acme.sh but this is normal as actual DNS is not pointed to remote server.\n\n\n"
 | 
						|
check_string=$(${ssh_v} "cyberpanel createWebsite --package Default --owner admin --domainName ${domains[$i]} --email admin@${domains[$i]} --php 7.4 --ssl 1")
 | 
						|
  if echo $check_string | grep -q "None" ; then
 | 
						|
  echo -e "\nwebsite successfully created..."
 | 
						|
    ${ssh_v} "rm -f /home/${domains[$i]}/public_html/index.html"
 | 
						|
    ${ssh_v} "cat << EOF > /home/${domains[$i]}/public_html/.htaccess
 | 
						|
RewriteCond %{REQUEST_URI} (wp-config|readme|license|example)\.(txt|html) [NC,OR]
 | 
						|
RewriteCond %{REQUEST_URI} wp-content\/uploads\/.*php [NC,OR]
 | 
						|
RewriteCond %{REQUEST_URI} (^\.|/\.) [NC]
 | 
						|
RewriteRule .* - [F,L]
 | 
						|
#EasyEnine converted equivalent rule.
 | 
						|
 | 
						|
<IfModule mod_rewrite.c>
 | 
						|
RewriteEngine On
 | 
						|
RewriteBase /
 | 
						|
RewriteRule ^index\.php$ - [L]
 | 
						|
RewriteCond %{REQUEST_FILENAME} !-f
 | 
						|
RewriteCond %{REQUEST_FILENAME} !-d
 | 
						|
RewriteRule . /index.php [L]
 | 
						|
</IfModule>
 | 
						|
#WordPress default rule.
 | 
						|
EOF"
 | 
						|
#rewrite rule for similar effect on easyengine configuration.
 | 
						|
 | 
						|
  else
 | 
						|
    echo -e "\nfailed to create website..."
 | 
						|
    echo -e "\nplease check if ${domains[$i]} is already created on remote server, and delete it"
 | 
						|
    clean_up
 | 
						|
    exit
 | 
						|
  fi
 | 
						|
}
 | 
						|
 | 
						|
trasnfer_file() {
 | 
						|
ssh_v="ssh -o StrictHostKeyChecking=no root@$server_ip -p$server_port -i /root/.ssh/cyberpanel_migration_key"
 | 
						|
if [[ -f /opt/easyengine/sites/${domains[$i]}/app/wp-config.php ]] ; then
 | 
						|
  echo -e "\nstarting to transfer files..."
 | 
						|
  echo -e "\ndepends on your files , this may take a while..."
 | 
						|
  rsync --stats -av --chown=${owner_user}:${owner_group} -e "ssh -o StrictHostKeyChecking=no -p $server_port -i /root/.ssh/cyberpanel_migration_key" /opt/easyengine/sites/${domains[$i]}/app/wp-config.php root@$server_ip:/home/${domains[$i]}/public_html/wp-config.php
 | 
						|
  if [[ $? == "0" ]] ; then
 | 
						|
    echo -e "\nwp-config.php successfully transferred..."
 | 
						|
  else
 | 
						|
    echo -e "\nwp-config.php trasnfer failed..."
 | 
						|
    clean_up
 | 
						|
    exit
 | 
						|
  fi
 | 
						|
 | 
						|
rsync --stats -av --chown=${owner_user}:${owner_group} -e "ssh -o StrictHostKeyChecking=no -p $server_port -i /root/.ssh/cyberpanel_migration_key" /opt/easyengine/sites/${domains[$i]}/app/htdocs/ root@$server_ip:/home/${domains[$i]}/public_html/
 | 
						|
  if [[ $? == "0" ]] ; then
 | 
						|
    echo -e "\nsite files succesfully transferred..."
 | 
						|
  else
 | 
						|
    echo -e "\nsite files trasnfer failed..."
 | 
						|
    clean_up
 | 
						|
    exit
 | 
						|
  fi
 | 
						|
 | 
						|
rsync --stats -av -e "ssh -o StrictHostKeyChecking=no -p $server_port -i /root/.ssh/cyberpanel_migration_key" $OUTPUT/$database_name root@$server_ip:/home/${domains[$i]}/$database_name
 | 
						|
  if [[ $? == "0" ]] ; then
 | 
						|
    echo -e "\ndatabase dump successfully transferred..."
 | 
						|
  else
 | 
						|
    echo -e "\ndatabase dump trasnfer failed..."
 | 
						|
    clean_up
 | 
						|
    exit
 | 
						|
  fi
 | 
						|
 | 
						|
else
 | 
						|
  echo -e "\nthe script currently only works with Wordpress site..."
 | 
						|
  clean_up
 | 
						|
  exit
 | 
						|
fi
 | 
						|
}
 | 
						|
 | 
						|
export_cert() {
 | 
						|
echo -e "\nstarting to search certificates and private keys..."
 | 
						|
if [[ -f $DIR_SSL/${domains[$i]}.crt ]] && [[ -f $DIR_SSL/${domains[$i]}.key ]] ; then
 | 
						|
  echo -e "\n${domains[$i]} cert detected..."
 | 
						|
  echo -e "\n${domains[$i]} key detected..."
 | 
						|
  SSL="1"
 | 
						|
  cert_file="$DIR_SSL/${domains[$i]}.crt"
 | 
						|
  key_file="$DIR_SSL/${domains[$i]}.key"
 | 
						|
else
 | 
						|
  SSL="0"
 | 
						|
  echo -e "\n${domains[$i]} cert not found..."
 | 
						|
  echo -e "\n${domains[$i]} key not found..."
 | 
						|
fi
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
fetch_cyberpanel_key() {
 | 
						|
if [[ ! -d /root/.ssh ]] ; then
 | 
						|
  mkdir /root/.ssh
 | 
						|
  chmod 700 /root/.ssh
 | 
						|
fi
 | 
						|
echo -e "\nPlease input your CyberPanel server address"
 | 
						|
printf "%s" "Server Address: "
 | 
						|
read server_ip
 | 
						|
  if [[ $server_ip == "" ]] ; then
 | 
						|
    echo -e "\nPlease enter a valid address"
 | 
						|
    exit
 | 
						|
  fi
 | 
						|
echo -e "\nremote server is set to $server_ip..."
 | 
						|
echo -e "\nPlease input your CyberPanel server SSH port"
 | 
						|
echo -e "Press Enter key to use port 22 as default."
 | 
						|
printf "%s" "SSH port: "
 | 
						|
read server_port
 | 
						|
  re='^[0-9]+$'
 | 
						|
  if [[ $server_port == "" ]] ; then
 | 
						|
    server_port="22"
 | 
						|
  elif [[ ! $server_port =~ $re ]] ; then
 | 
						|
   echo -e "\nPlease input a valid port number."
 | 
						|
  fi
 | 
						|
echo -e "\nSSH port is set to $server_port..."
 | 
						|
echo -e "\nPlease input the user name , this must be root user or sudo user."
 | 
						|
echo -e "Press Enter key to use root user as default."
 | 
						|
printf "%s" "Username: "
 | 
						|
read user_name
 | 
						|
  if [[ $user_name == "" ]] ; then
 | 
						|
    echo -e "\nset username to root..."
 | 
						|
    user_name="root"
 | 
						|
    sudoer=""
 | 
						|
  elif [[ $user_name == "root" ]] ; then
 | 
						|
    sudoer=""
 | 
						|
  else
 | 
						|
    sudoer="sudo -S"
 | 
						|
  fi
 | 
						|
#ask user to input server IP , port and user name
 | 
						|
 | 
						|
echo -e "\nlogin username is set to $user_name"
 | 
						|
if grep -q "PRIVATE KEY" /root/.ssh/cyberpanel_migration_key 2>/dev/null ; then
 | 
						|
  status=$(ssh -o BatchMode=yes -o ConnectTimeout=5 -o StrictHostKeyChecking=no root@$server_ip -p$server_port -i /root/.ssh/cyberpanel_migration_key echo ok 2>&1)
 | 
						|
  if [[ $status == ok ]] ; then
 | 
						|
    echo -e "\nvalid key detected..."
 | 
						|
    return
 | 
						|
  else
 | 
						|
    echo -e "\nunable to connect to remote server..."
 | 
						|
    clean_up
 | 
						|
    exit
 | 
						|
  fi
 | 
						|
fi
 | 
						|
 | 
						|
echo -e "\nPlease input the password , if you are using public key authentication,please press Enter key."
 | 
						|
printf "%s" "Password: "
 | 
						|
stty -echo
 | 
						|
read password
 | 
						|
stty echo
 | 
						|
echo ""
 | 
						|
 | 
						|
if [[ $password == "" ]] ; then
 | 
						|
echo -e "\nPlease input the private key file with absolute path"
 | 
						|
echo -e "\ne.g. /root/.ssh/id_rsa"
 | 
						|
printf "%s" "key path: "
 | 
						|
read password
 | 
						|
fi
 | 
						|
 | 
						|
if [[ $password == "" ]] ; then
 | 
						|
echo -e "Please enter a valid path."
 | 
						|
exit
 | 
						|
fi
 | 
						|
 | 
						|
if [[ -f $password ]] ; then
 | 
						|
#check the input , if it's a file , consider it as key.
 | 
						|
  ssh -o StrictHostKeyChecking=no $user_name@$server_ip -p$server_port -i $password "$sudoer wget -q -O /root/key.sh https://raw.githubusercontent.com/usmannasir/cyberpanel/stable/CPScripts/EasyEngine/key.sh ; $sudoer bash /root/key.sh enable"
 | 
						|
  if [[ $? == "0" ]] ; then
 | 
						|
    ssh -o StrictHostKeyChecking=no $user_name@$server_ip -p$server_port -i $password "$sudoer cat /root/.ssh/cyberpanel_migration_key" > /root/.ssh/cyberpanel_migration_key
 | 
						|
      if [[ $? == "0" ]] ; then
 | 
						|
        chmod 400 /root/.ssh/cyberpanel_migration_key
 | 
						|
        status=$(ssh -o BatchMode=yes -o ConnectTimeout=5 -o StrictHostKeyChecking=no root@$server_ip -p$server_port -i /root/.ssh/cyberpanel_migration_key echo ok 2>&1)
 | 
						|
        if [[ $status == ok ]] ; then
 | 
						|
          echo -e "\nvalid key detected..."
 | 
						|
        else
 | 
						|
          echo -e "\nunabel to connect remote server..."
 | 
						|
          clean_up
 | 
						|
          exit
 | 
						|
        fi
 | 
						|
      else
 | 
						|
        clean_up
 | 
						|
        echo -e "\nunable to set remote key..."
 | 
						|
        exit
 | 
						|
      fi
 | 
						|
  else
 | 
						|
    echo -e "\nunable to set up the key, please manually set it up..."
 | 
						|
    clean_up
 | 
						|
    exit
 | 
						|
  fi
 | 
						|
else
 | 
						|
#if it's not file , consider it as password
 | 
						|
  sshpass -p "${password}" ssh -o StrictHostKeyChecking=no $user_name@$server_ip -p$server_port "$sudoer wget -q -O /root/key.sh https://raw.githubusercontent.com/usmannasir/cyberpanel/stable/CPScripts/EasyEngine/key.sh ; $sudoer bash /root/key.sh enable"
 | 
						|
  if [[ $? == "0" ]] ; then
 | 
						|
    sshpass -p "${password}" ssh -o StrictHostKeyChecking=no $user_name@$server_ip -p$server_port "$sudoer cat /root/.ssh/cyberpanel_migration_key" > /root/.ssh/cyberpanel_migration_key
 | 
						|
    chmod 400 /root/.ssh/cyberpanel_migration_key
 | 
						|
    status=$(ssh -o BatchMode=yes -o ConnectTimeout=5 -o StrictHostKeyChecking=no root@$server_ip -p$server_port -i /root/.ssh/cyberpanel_migration_key echo ok 2>&1)
 | 
						|
    if [[ $status == ok ]] ; then
 | 
						|
      echo -e "\nvalid key detected..."
 | 
						|
    else
 | 
						|
      echo -e "\nunabel to connect remote server..."
 | 
						|
      clean_up
 | 
						|
      exit
 | 
						|
    fi
 | 
						|
  else
 | 
						|
    echo -e "\nunable to set up the key, please manually set it up..."
 | 
						|
    clean_up
 | 
						|
    exit
 | 
						|
  fi
 | 
						|
fi
 | 
						|
}
 | 
						|
 | 
						|
install_lscwp() {
 | 
						|
ssh_v="ssh -o StrictHostKeyChecking=no root@$server_ip -p$server_port -i /root/.ssh/cyberpanel_migration_key"
 | 
						|
 | 
						|
$ssh_v "ls -l /usr/bin/wp"
 | 
						|
if [[ $? != "0" ]] ; then
 | 
						|
  $ssh_v "$sudoer wget -O /usr/bin/wp https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar"
 | 
						|
  $ssh_v "$sudoer chmod +x /usr/bin/wp"
 | 
						|
fi
 | 
						|
#install WP CLI if not yet installed.
 | 
						|
$ssh_v "sudo -u $owner_user -i -- wp --path=/home/${domains[$i]}/public_html plugin install litespeed-cache"
 | 
						|
echo -e "\nInstalling LiteSpeed Cache for WordPress..."
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
export_database() {
 | 
						|
WPDBNAME=`cat /opt/easyengine/sites/${domains[$i]}/app/wp-config.php | grep DB_NAME | cut -d \' -f 4`
 | 
						|
WPDBUSER=`cat /opt/easyengine/sites/${domains[$i]}/app/wp-config.php | grep DB_USER | cut -d \' -f 4`
 | 
						|
WPDBPASS=`cat /opt/easyengine/sites/${domains[$i]}/app/wp-config.php | grep DB_PASSWORD | cut -d \' -f 4`
 | 
						|
#get database name , user and password for mysqldump
 | 
						|
 | 
						|
echo -e "\nstarting to export database..."
 | 
						|
USER="root"
 | 
						|
PASSWORD=`cat /opt/easyengine/services/docker-compose.yml | grep MYSQL_ROOT_PASSWORD | awk -F'=' '{print $2}'`
 | 
						|
OUTPUT="$DIR_TMP/database"
 | 
						|
DOCKERDatabaseID=`docker ps | grep -e 'services_global-db' | cut -c1-12;`
 | 
						|
 | 
						|
databases=`docker exec $DOCKERDatabaseID bash -c "mysql -h localhost --user=$USER --password=$PASSWORD -e 'show databases;'" | tr -d "| " | grep -v Database`
 | 
						|
 | 
						|
for db in $databases; do
 | 
						|
    if [[ $db == "$WPDBNAME" ]] ; then
 | 
						|
    echo -e "\ndumping database for ${domains[$i]}..."
 | 
						|
        sudo docker exec $DOCKERDatabaseID bash -c "/usr/bin/mysqldump -u $USER -p$PASSWORD --databases $db" > $OUTPUT/$db.sql
 | 
						|
        database_name="$db.sql"
 | 
						|
          if [[ $? == "0" ]] ; then
 | 
						|
            echo -e "\ndatabase successfully exported..."
 | 
						|
          else
 | 
						|
            echo -e "\nfailed to export database..."
 | 
						|
            clean_up
 | 
						|
            exit
 | 
						|
          fi
 | 
						|
    fi
 | 
						|
done
 | 
						|
#credit to https://community.easyengine.io/t/cant-create-mysqldump/12306
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
check_dir () {
 | 
						|
if [[ ! -d /opt/easyengine/sites ]] ; then
 | 
						|
  echo -e "\ncan not detect sites directory..."
 | 
						|
  exit
 | 
						|
fi
 | 
						|
 | 
						|
if [[ -d $DIR_TMP ]] ; then
 | 
						|
  rm -rf $DIR_TMP
 | 
						|
fi
 | 
						|
  mkdir $DIR_TMP
 | 
						|
  mkdir $DIR_TMP/database
 | 
						|
}
 | 
						|
 | 
						|
show_help() {
 | 
						|
echo -e "\nEasyEngine to CyberPanel Migration Script"
 | 
						|
echo -e "\nThis script will do:"
 | 
						|
echo -e "\n1. Generate public key and private key for root user on remote CyberPanel server."
 | 
						|
echo -e "2. Find the Wordpress sites hosting on this EasyEngine server"
 | 
						|
echo -e "3. Export the site's database and its SSL cert/key if available and trasnfer to remote CyberPanel server."
 | 
						|
echo -e "4. Create website with same domain on remote CyberPanel server and its related database."
 | 
						|
echo -e "5. Import database dump and set up SSL cert/key if available"
 | 
						|
echo -e "6. Download LiteSpeed Cache plugin for Wordpress, but it will not be enabled until you activate it."
 | 
						|
echo -e "7. Install PHP extension sodium imagick redis and memcached."
 | 
						|
echo -e "8. Once the migration process is completed, previously generated key will be removed on remote CyberPanel server."
 | 
						|
echo -e "9. All the temporary generated files on this server will also be cleaned up."
 | 
						|
echo -e "\nOnce migration is completed, you can use local host file to override the DNS record to test site on remote CyberPanel server"
 | 
						|
echo -e "without effecting your live site"
 | 
						|
echo -e "\nNo file on this server will be touched.\n"
 | 
						|
read -rsn1 -p "Please press any key to continue..."
 | 
						|
}
 | 
						|
 | 
						|
db_length_check() {
 | 
						|
  ssh_v="ssh -o StrictHostKeyChecking=no root@$server_ip -p$server_port -i /root/.ssh/cyberpanel_migration_key"
 | 
						|
  output=$($ssh_v "$sudoer cat /usr/local/CyberCP/plogical/mysqlUtilities.py")
 | 
						|
  if echo $output | grep -q "should be 16 at max" ; then
 | 
						|
    echo -e "\nPlease upgrade your CyberPanel to latest first..."
 | 
						|
    clean_up
 | 
						|
    exit
 | 
						|
  fi
 | 
						|
}
 | 
						|
 | 
						|
check_dir
 | 
						|
#check if this is an easyengine server and create a temp dir for storing files during the process.
 | 
						|
 | 
						|
show_help
 | 
						|
 | 
						|
declare -a domains
 | 
						|
 | 
						|
for i in $(ls /opt/easyengine/sites);
 | 
						|
  do
 | 
						|
    domains=("${domains[@]}" "$i")
 | 
						|
  done
 | 
						|
 | 
						|
echo -e "\n\nsearching websites..."
 | 
						|
echo -e "\ntotal number of domains: ${#domains[@]}"
 | 
						|
echo -e "\ndomain list: ${domains[@]}"
 | 
						|
 | 
						|
dpkg -l sshpass > /dev/null
 | 
						|
echo -e "\n\nchecking necessary package..."
 | 
						|
  if [[ $? == "0" ]] ; then
 | 
						|
    echo -e "\nsshpass package already installed...\n"
 | 
						|
  else
 | 
						|
    apt update
 | 
						|
    DEBIAN_FRONTEND=noninteractive apt install -y sshpass
 | 
						|
    if [[ $? == "0" ]] ; then
 | 
						|
      echo -e "\nsshpass successfully installed...\n"
 | 
						|
    else
 | 
						|
      echo -e "\nunable to install sshpass...\n"
 | 
						|
      exit
 | 
						|
    fi
 | 
						|
  fi
 | 
						|
 | 
						|
fetch_cyberpanel_key
 | 
						|
#function to get cyberpanel server key so future SSH command won't require password input.
 | 
						|
 | 
						|
db_length_check
 | 
						|
 | 
						|
tLen=${#domains[@]}
 | 
						|
#get the domain list and number of domains.
 | 
						|
 | 
						|
for (( i=0; i<${tLen}; i++ ));
 | 
						|
  do
 | 
						|
    # ${domains[$i]}  , domain name variable
 | 
						|
    #create a file to save variable to source in cyberpanel server to read it.
 | 
						|
 | 
						|
    export_database
 | 
						|
    #dump all sites' database
 | 
						|
 | 
						|
    export_cert
 | 
						|
    #find the cert for this domain
 | 
						|
 | 
						|
    create_site_cyberpanel
 | 
						|
 | 
						|
    fix_permission
 | 
						|
 | 
						|
    trasnfer_file
 | 
						|
 | 
						|
    create_database
 | 
						|
 | 
						|
    set_header
 | 
						|
 | 
						|
    install_lscwp
 | 
						|
 | 
						|
    set_ssl_cyberpanel
 | 
						|
  done
 | 
						|
#for loop to run each function for each domain.
 | 
						|
 | 
						|
ssh -o StrictHostKeyChecking=no root@$server_ip -p$server_port -i /root/.ssh/cyberpanel_migration_key "$sudoer wget -q -O /root/ext.sh https://raw.githubusercontent.com/usmannasir/cyberpanel/stable/CPScripts/EasyEngine/ext.sh ; $sudoer bash /root/ext.sh"
 | 
						|
#install some php ext
 | 
						|
 | 
						|
show_cyberpanel_site
 | 
						|
 | 
						|
clean_up
 | 
						|
#remove all the files in tmp dir after script is done.
 | 
						|
exit
 |