Cloning your WordPress to another server and another name

Da er jeg er ved at flytte rundt på et af mine data-centre, vil jeg gerne have en live backup af mine blogs, således at denne blog kunne findes under både http://storepeter.dk og http://storepeter.dk, så jeg kan teste den inden den tages i permanent drift.

Jeg kunne selvfølgelig klone min virtuel-maskine, men da internettet til mit datacenter i Danmark ikke er så god ville det tage lang tid, og det ville heller ikke ændre navnet til peter.storepeter.dk i stedet for peter.lorenzen.us.

Min måde at gøre det på er at oprette en splinter ny maskine (måske virtuel) som beskrevet tidligere i denne blog, og så overføre filerne og mysql-databasen og rette den til med de nye site-navn hvis CLONE er sat. Der laves først en exact klone, så klonen kunne tage over fra den originale ved simpelthen at lade peter.lorenzen.us pege på den (NOTE databasen skal ikke fixes), Hvis CLONE er sat laves der en klone med et andet navn, ved at pille lidt i mysql-databasen.

Skriptet kan også senere holde kopien og klonenen up-to-date

#!/bin/bash
#
# generate script to
# transfer /var/www and mysql to backupserver

CLONE=1

BLOGS="peter deborah"
RHOST="blogdk"
FROM=lorenzen.us
TO=storepeter.dk

OPTIONS=" -u root -pmit-hemmelige-password"
DUMP_OPTIONS=$OPTIONS
DUMP_OPTIONS="$DUMP_OPTIONS --all-databases"
DUMP_OPTIONS="$DUMP_OPTIONS --flush-privileges"

sudo rsync -av --delete /var/www/wordpress $RHOST:/var/www/.
mysqldump $DUMP_OPTIONS >/tmp/blog_mysqldump
for i in $BLOGS;do
        sudo rsync -av --delete /var/www/$i.$FROM $RHOST:/var/www/.
        if [ $CLONE = 1 ]; then
                sudo ssh $RHOSTS rsync -av --delete /var/www/$i.$FROM/. /var/www/$i.$TO
                (
                        echo "define('WP_HOME','http://$i.$TO');"
                        echo "define('WP_SITEURL','http://$i.$TO');"
                ) | sudo ssh $RHOST "cat >> /var/www/$i.$TO/wp-config.php"
                echo "UPDATE wp_options SET option_value = replace(option_value, 'http://$i.$FROM', 'http://$i.$TO') WHERE option_name = 'home' OR option_name = 'siteurl';" >>/tmp/blog_mysqldump
                echo "UPDATE wp_posts SET guid = replace(guid, 'http://$i.$FROM', 'http://$i.$TO');" >>/tmp/blog_mysqldump
                echo "UPDATE wp_posts SET post_content = replace(post_content, 'http://$i.$FROM', 'http://$i.$TO');" >>/tmp/blog_mysqldump
        fi
done

ssh $RHOST mysql $OPTIONS 

Med den rette sudo-opsætning og ssh-nøgler kan dette gøres uden at jeg skal taste passwords

PS: hvis du ligesom jeg har pillet i .htaccess for at undgå brute-force login-attacks, skal man lige rette lidt i den også.

PPS: eftersom wordpress gemmer parametre herunder URL for blog-en i mysql-databasen kan den samme host ikke umiddelbart servicere både peter.lorenzen.us og peter.storepeter.dk, men scriptet ovenfor er en god template for at lave et lille script der kan skifte frem og tilbage, mellem to domæner. Havde man nu haft studenter, var det en god øvelse, at sætte dem til.

Print Friendly, PDF & Email
This entry was posted in Linux, Web, Wordpress. Bookmark the permalink.