Ga naar inhoud

Sync Script

  1. Maak in de site folder een nieuwe map aan genaamd β€˜scripts’
  2. Maak hierin een bestand met de naam sync.sh en copy de code erin:
#!/bin/bash
# Syncing Trellis & Bedrock-based WordPress environments with WP-CLI aliases
# Version 1.2.0
# Copyright (c) Ben Word
DEVDIR="web/app/uploads/"
DEVSITE="http://PROJECTNAAM.lndo.site"
PRODDIR="PROJECTNAAM@web01-exonet.lemone.network:/home/PROJECTNAAM/public/shared/uploads/"
PRODSITE="https://PROJECTNAAM.nl"
LOCAL=false
SKIP_DB=false
SKIP_ASSETS=false
POSITIONAL_ARGS=()
while [[ $# -gt 0 ]]; do
case $1 in
--skip-db)
SKIP_DB=true
shift
;;
--skip-assets)
SKIP_ASSETS=true
shift
;;
--local)
LOCAL=true
shift
;;
--*)
echo "Unknown option $1"
exit 1
;;
*)
POSITIONAL_ARGS+=("$1")
shift
;;
esac
done
set -- "${POSITIONAL_ARGS[@]}"
if [ $# != 2 ]
then
echo "Usage: $0 [[--skip-db] [--skip-assets] [--local]] [ENV_FROM] [ENV_TO]"
exit;
fi
FROM=$1
TO=$2
bold=$(tput bold)
normal=$(tput sgr0)
case "$1-$2" in
test-development) DIR="down ⬇️ " FROMSITE=$TESTSITE; FROMDIR=$TESTDIR; TOSITE=$DEVSITE; TODIR=$DEVDIR; ;;
accept-development) DIR="down ⬇️ " FROMSITE=$ACCEPTSITE; FROMDIR=$ACCEPTDIR; TOSITE=$DEVSITE; TODIR=$DEVDIR; ;;
production-development) DIR="down ⬇️ " FROMSITE=$PRODSITE; FROMDIR=$PRODDIR; TOSITE=$DEVSITE; TODIR=$DEVDIR; ;;
development-test) DIR="up ⬆️ " FROMSITE=$DEVSITE; FROMDIR=$DEVDIR; TOSITE=$TESTSITE; TODIR=$TESTDIR; ;;
accept-test) DIR="horizontally ↔️ "; FROMSITE=$ACCEPTSITE; FROMDIR=$ACCEPTDIR; TOSITE=$TESTSITE; TODIR=$TESTDIR; ;;
production-test) DIR="horizontally ↔️ "; FROMSITE=$PRODSITE; FROMDIR=$PRODDIR; TOSITE=$TESTSITE; TODIR=$TESTDIR; ;;
accept-production) DIR="horizontally ↔️ "; FROMSITE=$ACCEPTSITE; FROMDIR=$ACCEPTDIR; TOSITE=$PRODSITE; TODIR=$PRODDIR; ;;
production-accept) DIR="horizontally ↔️ "; FROMSITE=$PRODSITE; FROMDIR=$PRODDIR; TOSITE=$ACCEPTSITE; TODIR=$ACCEPTDIR; ;;
*) echo "usage: $0 [[--skip-db] [--skip-assets] [--local]] test development | accept development | production development | development test | accept test | production test | accept production | production accept" && exit 1 ;;
esac
if [ "$SKIP_DB" = false ]
then
DB_MESSAGE=" - ${bold}reset the $TO database${normal} ($TOSITE)"
fi
if [ "$SKIP_ASSETS" = false ]
then
ASSETS_MESSAGE=" - sync ${bold}$DIR${normal} from $FROM ($FROMSITE)?"
fi
if [ "$SKIP_DB" = true ] && [ "$SKIP_ASSETS" = true ]
then
echo "Nothing to synchronize."
exit;
fi
echo
echo "Would you really like to "
echo $DB_MESSAGE
echo $ASSETS_MESSAGE
read -r -p " [y/N] " response
if [[ "$response" =~ ^([yY][eE][sS]|[yY])$ ]]; then
# Change to site directory
cd ../ &&
echo
# Make sure both environments are available before we continue
availfrom() {
local AVAILFROM
if [[ "$LOCAL" = true && $FROM == "development" ]]; then
AVAILFROM=$(lando wp option get home 2>&1)
else
AVAILFROM=$(wp "@$FROM" option get home 2>&1)
fi
if [[ $AVAILFROM == *"Error"* ]]; then
echo "❌ Unable to connect to $FROM"
exit 1
else
echo "βœ… Able to connect to $FROM"
fi
};
availfrom
availto() {
local AVAILTO
if [[ "$LOCAL" = true && $TO == "development" ]]; then
AVAILTO=$(lando wp option get home 2>&1)
else
AVAILTO=$(wp "@$TO" option get home 2>&1)
fi
if [[ $AVAILTO == *"Error"* ]]; then
echo "❌ Unable to connect to $TO $AVAILTO"
exit 1
else
echo "βœ… Able to connect to $TO"
fi
};
availto
if [ "$SKIP_DB" = false ]
then
echo "Syncing database..."
# Export/import database, run search & replace
if [[ "$LOCAL" = true && $TO == "development" ]]; then
lando wp db export --default-character-set=utf8mb4 &&
lando wp db reset --yes &&
wp "@$FROM" db export --default-character-set=utf8mb4 - | lando wp db import - &&
lando wp search-replace "$FROMSITE" "$TOSITE" --all-tables-with-prefix
elif [[ "$LOCAL" = true && $FROM == "development" ]]; then
wp "@$TO" db export --default-character-set=utf8mb4 &&
wp "@$TO" db reset --yes &&
lando wp db export --default-character-set=utf8mb4 - | wp "@$TO" db import - &&
wp "@$TO" search-replace "$FROMSITE" "$TOSITE" --all-tables-with-prefix
else
wp "@$TO" db export --default-character-set=utf8mb4 &&
wp "@$TO" db reset --yes &&
wp "@$FROM" db export --default-character-set=utf8mb4 - | wp "@$TO" db import - &&
wp "@$TO" search-replace "$FROMSITE" "$TOSITE" --all-tables-with-prefix
fi
fi
if [ "$SKIP_ASSETS" = false ]
then
echo "Syncing assets..."
# Sync uploads directory
chmod -R 755 web/app/uploads/ &&
if [[ $DIR == "horizontally"* ]]; then
[[ $FROMDIR =~ ^(.*): ]] && FROMHOST=${BASH_REMATCH[1]}
[[ $FROMDIR =~ ^(.*):(.*)$ ]] && FROMDIR=${BASH_REMATCH[2]}
[[ $TODIR =~ ^(.*): ]] && TOHOST=${BASH_REMATCH[1]}
[[ $TODIR =~ ^(.*):(.*)$ ]] && TODIR=${BASH_REMATCH[2]}
ssh -o ForwardAgent=yes $FROMHOST "rsync -aze 'ssh -o StrictHostKeyChecking=no' --progress $FROMDIR $TOHOST:$TODIR"
else
rsync -az --progress "$FROMDIR" "$TODIR"
fi
fi
# Basecamp notification when sync direction is up or horizontal
if [[ $DIR != "down"* ]]; then
USER="$(git config user.name)"
curl -d content="πŸ”„ Sync from ${FROMSITE} to ${TOSITE} by ${USER} complete" https://3.basecamp.com/4125991/integrations/YFacUHR2mWaJ6mkx7uNEZSsb/buckets/30244614/chats/5597771539/lines
fi
echo -e "\nπŸ”„ Sync from $FROM to $TO complete.\n\n ${bold}$TOSITE${normal}\n"
fi
  1. Druk op CMD + F en zoek naar PROJECTNAAM, vervang deze text voor de naam van het project (b.v. doldersum, hetccv etc)
  2. Controleer of de volgende velden kloppen:
  • DEVSITE
  • PRODDIR
  • PRODSITE
  1. Open vervolgens wp-cli.yml en voeg daaraan toe:
@production:
ssh: PROJECTNAAM@web01-exonet.lemone.network:/home/PROJECTNAAM/public/current
  1. Vervang ook hier PROJECTNAAM voor de naam van het project

  2. Ga in je terminal naar de /site/scripts folder en run de volgende commands:

  • Terminal window
    chmod 744 sync.sh
  • Terminal window
    sh ./sync.sh production development --local