Last active
October 5, 2023 06:08
-
-
Save tacone/2c5fe9e5ad54a95b83ad to your computer and use it in GitHub Desktop.
Quick script to sync your dev box to a production Wordpress
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# Syncronize a local Wordpress installation with a remote one. | |
# | |
# | |
# Requires wp-cli.phar installed somewhere. | |
WP_CLI=/usr/local/bin/wp | |
# Remote settings | |
SSH_USER=root | |
SSH_PORT=22 | |
SSH_HOST=example.com | |
DOMAIN=$SSH_HOST | |
DB_NAME=test | |
DB_USER=$SSH_USER; | |
DB_PASS=secret | |
DB_HOST=localhost | |
REMOTE_PATH=/var/www/example.com/public | |
# Local settings | |
LOCAL_DOMAIN=example.dev | |
LOCAL_DB_NAME=$DB_NAME | |
LOCAL_DB_USER=root | |
LOCAL_DB_PASS= | |
LOCAL_PATH=/var/www/example.dev | |
mysql-import () { | |
IMPORT_FILE=$1 | |
DATABASE=$2 | |
DATE=`date +%Y-%m-%d-%H-%M-%S` | |
BACKUP_FILE="/tmp/$DATABASE-$DATE.sql" | |
OPTS=${@:3} | |
USAGE="Usage: mysql-import [FILE] [DATABASE] [other mysql options...]" | |
if [[ $1 = '--help' || -z "$DATABASE" || -z "$IMPORT_FILE" ]] | |
then | |
echo $USAGE | |
return 1 | |
fi | |
if [ ! -f "$IMPORT_FILE" ] | |
then | |
echo "File $IMPORT_FILE has not been found. Please review the usage:" | |
echo | |
echo $USAGE | |
return 1 | |
fi | |
echo "Before being replaced current database will be backupped to:" | |
echo $BACKUP_FILE | |
echo | |
if [ $? -gt 0 ] | |
then | |
echo | |
echo "Import aborted." | |
return 1 | |
fi | |
echo | |
echo "Backing up database..." | |
mysqldump $DATABASE ${OPTS} > $BACKUP_FILE | |
if [ $? -gt 0 ] | |
then | |
echo | |
echo "Backup failed." | |
return 1 | |
fi | |
echo "done" | |
echo "dropping existing database..." | |
mysql ${OPTS} -e"DROP DATABASE IF EXISTS $DATABASE; CREATE DATABASE $DATABASE" | |
if [ $? -gt 0 ] | |
then | |
echo | |
echo "Error! Your database may now be in an inconsistent state." | |
echo "Please try again or manually import the backup file at: $BACKUP_FILE" | |
return 1 | |
fi | |
echo "done" | |
echo | |
echo "importing the new database" | |
mysql ${OPTS} $DATABASE < $IMPORT_FILE | |
if [ $? -gt 0 ] | |
then | |
echo | |
echo "Error! Your database may now be in an inconsistent state." | |
echo "Please try again or manually import the backup file at: $BACKUP_FILE" | |
return 1 | |
fi | |
echo "done" | |
} | |
echo | |
echo "---> Downloading Database dump from production, it will take a while..." | |
echo | |
ssh -p $SSH_PORT $SSH_USER@$SSH_HOST "mysqldump $DB_NAME -u$DB_USER -p$DB_PASS -h $DB_HOST | gzip -c" > /tmp/$DB_NAME.sql.gz | |
echo | |
echo "---> Unzipping" | |
echo | |
gzip -d -f /tmp/$DB_NAME.sql.gz | |
echo | |
echo "---> Importing the data into the database" | |
echo | |
mysql-import /tmp/$DB_NAME.sql $LOCAL_DB_NAME -u$LOCAL_DB_USER -p$LOCAL_DB_PASS | |
echo | |
echo "---> Configuring Wordpress for the current environment" | |
echo | |
cd $LOCAL_PATH | |
$WP_CLI search-replace $REMOTE_PATH $LOCAL_PATH | |
$WP_CLI search-replace www.$DOMAIN $LOCAL_DOMAIN | |
$WP_CLI search-replace $DOMAIN $LOCAL_DOMAIN | |
echo | |
echo "---> Syncing uploads" | |
echo | |
rsync -e "ssh -p$SSH_PORT" -avz $SSH_USER@$SSH_HOST:$REMOTE_PATH/wp-content/uploads/ wp-content/uploads |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment