Skip to main content

promoting a drupal instance

solution: run my stupid script ;-)

issue:
At my small company we maintain our own Drupal hosting and content (what a pain).  Anyhow - I suggested that they utilize a "promotion" methodology whereas they do their dev/testing in a DEV/TEST environment, and then I could push the content from one environment to the other.

In this case, I have 2 environments, 2 vhosts, 2 databases, 2 etc...
test   and    www

If you run this script, it generates the command to run to go through the activity.


#!/bin/bash
# 20120224 - I don't need a script id?


TODAY=`date +%Y%m%d`
BACKUPDIR=/backups/${TODAY}
clear
echo ""
echo "You need to cut-and-paste the following output into a terminal to complete the promotion"
echo "########################################################################################"
echo ""
echo "mkdir -p ${BACKUPDIR}"


# THESE ARE JUST POINTERS TO MAKE IT EASY TO UPDATE WHICH ENVIRONMENT 
# GETS REPLICATED AND TO WHICH DIRECTORY IT SHOULD BE REPLICATED TO
SRC="test"
DEST="www"
dbPASSWORD="kissmypass"


# BACKUP THE EXISTING DATABASE(s)
echo "mysqldump -uroot -p${dbPASSWORD} --databases ${DEST} > ${BACKUPDIR}/mysqldump_${DEST}.sql "
echo "mysqldump -uroot -p${dbPASSWORD} --databases ${SRC} > ${BACKUPDIR}/mysqldump_${SRC}.sql "
echo "ls -lh ${BACKUPDIR}"


# COPY THE "web content" FIRST 
echo "service httpd stop"
echo "rm -rf /var/www/vhosts/${DEST}.example.com "
echo "cp -Rp /var/www/vhosts/${SRC}.example.com /var/www/vhosts/${DEST}.example.com "
echo "chown -R apache:apache /var/www/vhosts/; chmod -R 775 /var/www/vhosts"
echo "restorecon -RFvv /var/www/vhosts"


# UPDATE THE DATABASE CONNECTOR CONFIG TO POINT TO NEW SITE
echo "sed -i -e 's/localhost\/${SRC}/localhost\/${DEST}/g' /var/www/vhosts/${DEST}.example.com/sites/default/settings.php "
echo "sed -i -e 's/http\:\/\/${SRC}/http\:\/\/${DEST}/g' /var/www/vhosts/${DEST}.example.com/sites/default/settings.php"


echo "cp ${BACKUPDIR}/mysqldump_${SRC}.sql /tmp/mysqldump_${DEST}.sql"


# modify the SRC copy to become DEST
# THE next line may, or may not, be necessary
echo "sed -i -e 's/Database: ${SRC}/Database: ${DEST}/g' /tmp/mysqldump_${DEST}.sql"
echo "sed -i -e 's/Current Database: \`${SRC}\`/Current Database: \`${DEST}\`/g' /tmp/mysqldump_${DEST}.sql"
echo "sed -i -e 's/USE \`${SRC}\`/USE \`${DEST}\`/g' /tmp/mysqldump_${DEST}.sql"
echo "sed -i -e 's/\`${SRC}\`/\`${DEST}\`/g' /tmp/mysqldump_${DEST}.sql"


# DROP THE DATABASE {DEST}
echo "echo \"drop database ${DEST};\" | mysql -uroot -p${dbPASSWORD}"


# IMPORT the SRC Database (modified to be DEST) as the DEST Database
echo "mysql -uroot -p${dbPASSWORD} < /tmp/mysqldump_${DEST}.sql "
echo "service httpd start"
echo ""


# PROVIDE NOTES
echo "# Update the website from the admin portal"
echo "#  http://www.example.com/users/"
echo "#  Site Configuration"
echo "#       |--  Site Information"
echo "#       |--  YUI Common Settings"
echo ""


exit 0





The output will be:

You need to cut-and-paste the following output into a terminal to complete the promotion
########################################################################################


mkdir -p /backups/20120224
mysqldump -uroot -pkissmypass --databases www > /backups/20120224/mysqldump_www.sql 
mysqldump -uroot -pkissmypass --databases test > /backups/20120224/mysqldump_test.sql 
ls -lh /backups/20120224
service httpd stop
rm -rf /var/www/vhosts/www.example.com 
cp -Rp /var/www/vhosts/test.example.com /var/www/vhosts/www.example.com 
chown -R apache:apache /var/www/vhosts/; chmod -R 775 /var/www/vhosts
restorecon -RFvv /var/www/vhosts
sed -i -e 's/localhost\/test/localhost\/www/g' /var/www/vhosts/www.example.com/sites/default/settings.php 
sed -i -e 's/http\:\/\/test/http\:\/\/www/g' /var/www/vhosts/www.example.com/sites/default/settings.php
cp /backups/20120224/mysqldump_test.sql /tmp/mysqldump_www.sql
sed -i -e 's/Database: test/Database: www/g' /tmp/mysqldump_www.sql
sed -i -e 's/Current Database: `test`/Current Database: `www`/g' /tmp/mysqldump_www.sql
sed -i -e 's/USE `test`/USE `www`/g' /tmp/mysqldump_www.sql
sed -i -e 's/`test`/`www`/g' /tmp/mysqldump_www.sql
echo "drop database www;" | mysql -uroot -pkissmypass
mysql -uroot -pkissmypass < /tmp/mysqldump_www.sql 
service httpd start


# Update the website from the admin portal
#  http://www.example.com/users/
#  Site Configuration
#       |--  Site Information
#       |--  YUI Common Settings



You will also need to login to Drupal portal and update the values under System Configuration.




Comments