sync volume script
This commit is contained in:
parent
4498d1ed4b
commit
1a5e3a7836
57
scripts/sync_volume.sh
Normal file
57
scripts/sync_volume.sh
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Sync docker volumes between two servers
|
||||||
|
|
||||||
|
VERSION="1.0.0"
|
||||||
|
SOURCE=$1
|
||||||
|
DESTINATION=$2
|
||||||
|
set -e
|
||||||
|
if [ -z "$SOURCE" ]; then
|
||||||
|
echo "Source server is not specified."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
if [ -z "$DESTINATION" ]; then
|
||||||
|
echo "Destination server is not specified."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
SOURCE_USER=$(echo $SOURCE | cut -d@ -f1)
|
||||||
|
SOURCE_SERVER=$(echo $SOURCE | cut -d: -f1 | cut -d@ -f2)
|
||||||
|
SOURCE_PORT=$(echo $SOURCE | cut -d: -f2 | cut -d/ -f1)
|
||||||
|
SOURCE_VOLUME_NAME=$(echo $SOURCE | cut -d/ -f2)
|
||||||
|
|
||||||
|
if ! [[ "$SOURCE_PORT" =~ ^[0-9]+$ ]]; then
|
||||||
|
echo "Invalid source port: $SOURCE_PORT"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
DESTINATION_USER=$(echo $DESTINATION | cut -d@ -f1)
|
||||||
|
DESTINATION_SERVER=$(echo $DESTINATION | cut -d: -f1 | cut -d@ -f2)
|
||||||
|
DESTINATION_PORT=$(echo $DESTINATION | cut -d: -f2 | cut -d/ -f1)
|
||||||
|
DESTINATION_VOLUME_NAME=$(echo $DESTINATION | cut -d/ -f2)
|
||||||
|
|
||||||
|
if ! [[ "$DESTINATION_PORT" =~ ^[0-9]+$ ]]; then
|
||||||
|
echo "Invalid destination port: $DESTINATION_PORT"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Generating backup file to ./$SOURCE_VOLUME_NAME.tgz"
|
||||||
|
ssh -p $SOURCE_PORT $SOURCE_USER@$SOURCE_SERVER "docker run -v $SOURCE_VOLUME_NAME:/volume --rm --log-driver none loomchild/volume-backup backup -c pigz -v" >./$SOURCE_VOLUME_NAME.tgz
|
||||||
|
echo ""
|
||||||
|
if [ -f "./$SOURCE_VOLUME_NAME.tgz" ]; then
|
||||||
|
echo "Uploading backup file to $DESTINATION_SERVER:~/$DESTINATION_VOLUME_NAME.tgz"
|
||||||
|
scp -P $DESTINATION_PORT ./$SOURCE_VOLUME_NAME.tgz $DESTINATION_USER@$DESTINATION_SERVER:~/$DESTINATION_VOLUME_NAME.tgz
|
||||||
|
echo ""
|
||||||
|
echo "Restoring backup file on remote ($DESTINATION_SERVER:/~/$DESTINATION_VOLUME_NAME.tgz)"
|
||||||
|
ssh -p $DESTINATION_PORT $DESTINATION_USER@$DESTINATION_SERVER "docker run -i -v $DESTINATION_VOLUME_NAME:/volume --log-driver none --rm loomchild/volume-backup restore -c pigz -vf < ~/$DESTINATION_VOLUME_NAME.tgz"
|
||||||
|
echo ""
|
||||||
|
echo "Deleting backup file on remote ($DESTINATION_SERVER:/~/$DESTINATION_VOLUME_NAME.tgz)"
|
||||||
|
ssh -p $DESTINATION_PORT $DESTINATION_USER@$DESTINATION_SERVER "rm ~/$DESTINATION_VOLUME_NAME.tgz"
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "Local file ./$SOURCE_VOLUME_NAME.tgz is not deleted."
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "WARNING: If you are copying a database volume, you need to set the right users/passwords on the destination service's environment variables."
|
||||||
|
echo "Why? Because we are copying the volume as-is, so the database credentials will bethe same as on the source volume."
|
||||||
|
fi
|
||||||
|
|
Loading…
Reference in New Issue
Block a user