#!/bin/bash #apt update && apt install sshpass -y set -a # export variables from config.txt test source config.txt set +a # stop exporting DATE="$(date +%Y-%m-%d_%H-%M-%S)" echo $DATE #1. We are on the source (e.g. main) systemctl is-active --quiet platform5.service && systemctl stop platform5 systemctl is-active --quiet platform6.service && systemctl stop platform6 Backup_name=$SOURCE_DB_NAME.migration.$DATE.sql echo "backup name:" $Backup_name db_backup() { echo EVENT_STORE=$EVENT_STORE if [[ "$EVENT_STORE" == 0 ]]; then echo Making backup without event_store PGPASSWORD="$SOURCE_DB_PASSWORD" pg_dump -Fc -T event_store -U postgres $SOURCE_DB_NAME > /var/backups/$SOURCE_DB_NAME.migration.$DATE.sql elif [[ "$EVENT_STORE" == 1 ]]; then echo Making backup with event_store PGPASSWORD="$SOURCE_DB_PASSWORD" pg_dump -Fc -U postgres $SOURCE_DB_NAME > /var/backups/$SOURCE_DB_NAME.migration.$DATE.sql elif [[ "$EVENT_STORE" == 2 ]]; then echo "don't make db backup" else echo "EVENT_STORE value must be 0 or 1 or 2" && exit fi } send_backup() { if [[ "$EVENT_STORE" == 0 ]] or [[ "$EVENT_STORE" == 1 ]]; then echo "send dump to the destination" echo Sending db backup to destination server cd /var/backups/ && yes | sshpass -p "$DESTINATION_DATABASE_PASSWORD" scp -P $DESTINATION_DATABASE_PORT -o StrictHostKeyChecking=no $SOURCE_DB_NAME.migration.$DATE.sql $DESTINATION_DATABASE_USER@$DESTINATION_DATABASE_IP:~/ cd - else echo "no backup, nothing to send" && exit fi } create_db() { sed -e "s/DESTINATION_DB_NAME/${DESTINATION_DB_NAME}/" \ -e "s/DESTINATION_POSTGRES_PASSWORD/${DESTINATION_POSTGRES_PASSWORD}/"\ create_db.sh.template > create_db.sh sshpass -p "$DESTINATION_DATABASE_PASSWORD" ssh -p $DESTINATION_DATABASE_PORT $DESTINATION_DATABASE_USER@$DESTINATION_DATABASE_IP 'bash -s' < create_db.sh } #restore_db(){ # if [[ "$EVENT_STORE" == 0 ]] or [[ "$EVENT_STORE" == 1 ]]; then # fi #} db_backup send_backup create_db #restore_db evt_full_rsync(){ echo "send $SOURCE_EVT to the destination" sshpass -p "$DESTINATION_PASSWORD" rsync -e "ssh -p $DESTINATION_PORT" -avz --ignore-existing $SOURCE_PLATFORM_PATH/bin/storage/1/$SOURCE_EVT/ $DESTINATION_USER@$DESTINATION_IP:$DESTINATION_PLATFORM_PATH/bin/storage/1/$SOURCE_EVT/ } evt_common_files_rsync(){ echo "send files from $SOURCE_EVT/common to the destination" sshpass -p "$DESTINATION_PASSWORD" ssh $DESTINATION_USER@$DESTINATION_IP -p $DESTINATION_PORT "mkdir -p $DESTINATION_PLATFORM_PATH/bin/storage/1/$SOURCE_EVT/common/" sshpass -p "$DESTINATION_PASSWORD" rsync -e "ssh -p $DESTINATION_PORT" -avz --ignore-existing -f"- */" -f"+ *" $SOURCE_PLATFORM_PATH/bin/storage/1/$SOURCE_EVT/common/ $DESTINATION_USER@$DESTINATION_IP:$DESTINATION_PLATFORM_PATH/bin/storage/1/$SOURCE_EVT/common/ } fonts_rsync(){ echo "send fonts to the destination" sshpass -p "$DESTINATION_PASSWORD" ssh $DESTINATION_USER@$DESTINATION_IP -p $DESTINATION_PORT "mkdir -p $DESTINATION_PLATFORM_PATH/bin/storage/1/fonts/" sshpass -p "$DESTINATION_PASSWORD" rsync -e "ssh -p $DESTINATION_PORT" -avz --ignore-existing $SOURCE_PLATFORM_PATH/bin/storage/1/fonts/ $DESTINATION_USER@$DESTINATION_IP:$DESTINATION_PLATFORM_PATH/bin/storage/1/fonts/ } if [[ "$EVT_COMMON" == 0 ]]; then echo "Качаю файлы из evt/common" evt_common_files_rsync elif [[ "$EVT_COMMON" == 1 ]]; then echo "Качаю evt целиком" evt_full_rsync elif [[ "$EVT_COMMON" == 2 ]]; then echo "Не скачиваю ничего из storage" evt_full_rsync else echo "EVENT_COMMON value must be 0 or 1 or 2" && exit fi #Создание БД на локалке sed -e "s/DESTINATION_DB_NAME/${DESTINATION_DB_NAME}/" \ -e "s/DESTINATION_POSTGRES_PASSWORD/${DESTINATION_POSTGRES_PASSWORD}/"\ create_db.sh.template > create_db.sh sshpass -p "$DESTINATION_DATABASE_PASSWORD" ssh -p $DESTINATION_DATABASE_PORT $DESTINATION_DATABASE_USER@$DESTINATION_DATABASE_IP 'bash -s' < create_db.sh #evt_full_rsync #evt_common_files_rsync #fonts_rsync systemctl is-active --quiet platform5.service && systemctl start platform5 systemctl is-active --quiet platform6.service && systemctl start platform6