Ako vam je dosadilo ponavljanje kloniranja wordpress instanci na cpanelu, može se iskoristiti ovakva skripta.
Naravno, treba testirati da nije nešto drugačije podešeno na određenom serveru
#!/bin/bash
# cloning wp from one domain to another domain or subdomain or to the same domain on another cpanel user
#
# Prepare to have created new domain and cpanel user that is owner of the new domain.
#
# usage (interactive questions):
# ./wpclone.sh
echo "Enter created cpanel (linux) user name for wp destination?"
read new_cpanel_user
echo "Enter the old domain name - source of wp"
read old_domain
echo "Enter domain name for destination wp? (leave blank if the same as \"old\" domain name)"
read new_domain
if [[ $new_domain == "" ]]
then
new_domain=$old_domain
fi
# source of wp
source_user=$(grep $old_domain /etc/userdomains | awk '{print $2}'| tail -n 1)
source_dir=$(grep documentroot /var/cpanel/userdata/$source_user/$old_domain | awk '{print $2}')
# destination_wp assumed to live in public_html directory, change it if you need so (it will be prompted)
user_home=$(grep $new_cpanel_user /etc/passwd | awk -F':' '{ print $6}')
destination_wp=$user_home/'public_html'
echo "Destination path will be $destination_wp. If this is ok, leave blank and press Enter. For other destination directory, enter the name of the directory - relative path within $user_home (directory must exist)"
read dest_dir
echo $dest_dir
# remove / on the end of destination path if exists
if [[ -n $dest_dir ]]
then
cc="${dest_dir: -1}"
echo $cc
if [[ $cc == "/" ]]
then
dest="${dest_dir:0:-1}"
else
dest=$dest_dir
fi
else
dest="public_html"
fi
destination_wp=$user_home/$dest
# confirm to continue function
prompt_confirm() {
while true; do
read -r -n 1 -p "${1:-Continue?} [y/n]: " REPLY
case $REPLY in
[yY]) echo ; return 0 ;;
[nN]) echo ; return 1 ;;
*) printf " \033[31m %s \n\033[0m" "invalid input, y/n?"
esac
done
}
# confirm if we are good to go
prompt_confirm "Input is following:
Destination cpanel user: $new_cpanel_user
Destination domain name: $new_domain
Source wp directory: $source_dir
Old domain name: $old_domain
Destination path for wp: $destination_wp
Continue? " || exit 0
check_source=$(ls $source_dir)
if [ -z "$check_source" ]
then
echo "Fatal error: No proper source of wordpress"
exit;
fi
##################### so much of validation, if you didn't give proper input data that you confirmed, sorry. #############################
#password generator, 16 characters ( -c 16)
genpasswd() {
tr -dc A-Za-z0-9 < /dev/urandom | head -c 16 | xargs
}
echo "copying files..."
rsync -av $source_dir/ $destination_wp/
#fix permissions
chown $new_cpanel_user.nobody $destination_wp
chmod 750 $destination_wp
chown -R $new_cpanel_user. $destination_wp/* $destination_wp/.htaccess $destination_wp/.ftpquota $destination_wp/.well-known
# cpanel API - generate db_name, db_user, give all privileges to db_name
user_size=${#new_cpanel_user}
if [ $user_size > 8 ]
then
db_prefix=$(echo $new_cpanel_user | cut -c 1-8)
else
db_prefix=$new_cpanel_user
fi
db2=$db_prefix'_wpwppr'
db_user2=$db_prefix'_wpwppr'
db_pass2=$(genpasswd)
cpapi2 --user=$new_cpanel_user MysqlFE createdb db=$db2
uapi --user=$new_cpanel_user Mysql create_user name=$db2 password=$db_pass2
uapi --user=$new_cpanel_user Mysql set_privileges_on_database user=$db_user2 database=$db2 privileges=ALL PRIVILEGES
# prepare wp-config.php connection string
db1=$( grep DB_NAME $destination_wp/wp-config.php | awk -F "'" '{ print $4}')
# mysqldump and restore in second db
echo "database dump and restore..."
mysqldump $db1 > db_backup_tmp.sql
mysql $db2 < db_backup_tmp.sql
RESULT=$?
if [ $RESULT -eq 0 ]; then
echo "Db import successfull."
else
echo "mysqldump and import not successfull. Check the rest of the process manually."
echo "Exit..."
exit;
fi
rm db_backup_tmp.sql
db_user=$( grep DB_USER $destination_wp/wp-config.php | awk -F "'" '{ print $4}')
# replace db name, db user
sed -i -e "s/$db1/$db2/g" $destination_wp/wp-config.php
sed -i -e "s/$db_user/$db_user2/g" $destination_wp/wp-config.php
#optional , if there is a cache path in wp-config
wp_cache=$(grep WPCACHEHOME $destination_wp/wp-config.php )
if [ ! -z "$wp_cache" ]
then
sed -i "/WPCACHEHOME/d" $destination_wp/wp-config.php
wp_cache2="define( \'WPCACHEHOME\', \'$destination_wp/wp-content/plugins/wp-super-cache/\' );"
sed -i "24i $wp_cache2" $destination_wp/wp-config.php
fi
# delete password line as password may have characters not easy to replace
sed -i "/DB_PASSWORD/d" $destination_wp/wp-config.php
wp_pass="define(\'DB_PASSWORD\', \'$db_pass2\');"
# append line with new db_user password, somewhere between 25 and 31 line
sed -i "31i $wp_pass" $destination_wp/wp-config.php
#db search and replace php script if "new_domain" is other then "old_domain
if [[ $old_domain != $new_domain ]]
then
wget https://github.com/interconnectit/Search-Replace-DB/archive/master.zip
unzip master.zip -d $destination_wp/
rm -f master.zip
echo "Search and replace $old_domain with $new_domain data in database..."
# replace $old_domain with $new_domain in database
$(php $destination_wp/Search-Replace-DB-master/srdb.cli.php -h localhost -n $db2 -u $db_user2 -p $db_pass2 -s $old_domain -r $new_domain)
# replace directory path from old and new wp source
$(php $destination_wp/Search-Replace-DB-master/srdb.cli.php -h localhost -n $db2 -u $db_user2 -p $db_pass2 -s $source_dir -r $destination_wp)
rm -fr $destination_wp/Search-Replace-DB-master/
fi
echo "##################"
echo "Done! Check it out"
Source i detalji na githubu: https://github.com/franko108/wpclone