scripts/backup/autobackup_remote.sh

80 lines
1.6 KiB
Bash

#!/bin/bash
files=("/etc/nginx" "/etc/wireguard" "/etc/matrix-synapse" "/opt")
names=()
DBs=("synapse")
now=$(date +"%s")
week_day=$(date +"%A")
dir="/mnt/backups"
backup_dir="${dir}/${now}"
remoteUser="foxbackup"
localUser="foxbackup"
localPostgreUser="postgres"
host="42.42.42.3"
port=2244
if [ $UID != "0" ]; then
echo "You must run it as sudo."
exit 1
fi
remoteExecuce() {
sudo -iu $localUser ssh -p $port $remoteUser@$host "$*"
}
log() {
echo "[$(date)] $*" >> ./autobackup_log.txt
echo "[$(date)] $*"
}
backupDb() {
sudo -iu $localPostgreUser pg_dump -Fc "$1" | sudo -iu $localUser ssh -p $port $remoteUser@$host "pv > \"${backup_dir}/${1}.dump\""
}
backupDir() {
tar cpf - "${2}" | sudo -iu $localUser ssh -p $port $remoteUser@$host "pv > \"${backup_dir}/${1}.tar\""
}
startBackup() {
log "#===#Starting backup#===#"
#if [[ $week_day == "Sunday" ]]; then
# backup_dir="${dir}/${now}_full"
# files+=("/var/www")
# DBs+=("peertube_prod")
#fi
remoteExecuce mkdir -p "${backup_dir}"
for name in ${files[@]}; do
IFS="/"
temp="${name}"
read -rasplitIFS<<< "${temp}"
len=${#splitIFS[@]}
names+=(${splitIFS[$len-1]})
IFS=''
done
length=${#files[@]}
i=0
while [ $i -lt $length ]; do
log "Backing up dir ${files[$i]}"
echo $i
backupDir ${names[$i]} ${files[$i]}
i=$(( $i + 1 ))
done
for db in ${DBs[@]}; do
log "Backing up DB ${db}"
backupDb ${db}
done
log "All is backed up, cleaning up old backups and finishing"
remoteExecuce "${dir}/autobackup.sh"
log "All is done."
}
startBackup
#====how to restore====#
#pg_restore -d postgres --clean --create "file backup"