Raja's Exocortex

Remote Borg Backup of Postgres and App

Borg backup of Advincare applicaton installed in Kumaran Medical Center infra. Backup target is remote on rsync.net.

#!/bin/bash

# Filename: /usr/local/sbin/borg-advincare.sh

# Backup postgres databases in directory format suitable for borg-backup
# pg_dump uses default gzip, borg uses no compression
# This backup is done remotely on rsync.net servers
# This must not execute in parallel with local borg backup by borg-advincare.sh
#
# This script also integrates with healthchecks.io to indicate job status
#
# /etc/crontab entry:
#    # Run a borg backup of advincare DB and files to rsync.net ever hour at 25 mins
#    25 *  * * *   root onerror /usr/local/sbin/borg-advincare-remote.sh

PG_DUMP='/usr/bin/pg_dump'
STAGING_DIR='/srv/postgres-backup'
APP_FILE_DIR='/srv/Advincare'

BORG='/usr/local/bin/borg'
REMOTE_REPO='3441@rsync.kumaranmedical.com:advincare-backup'
# We need to set this to call borg 1.x on rsync.net server side
export BORG_REMOTE_PATH=/usr/local/bin/borg1/borg1

DBNAME='advincare'

WGET='wget -O /dev/null -q'
HC_PING='http://hc.kmc.local/ping/d06ee6e9-2913-4d1d-ac1a-e8f83c9fcc04'

# Indicate job start
${WGET} "${HC_PING}/start"

# Abort when any command fails
set -euo pipefail

echo Starting pg_dump of $DBNAME at `date`
  rm -rf ${STAGING_DIR}/${DBNAME}
  echo $PG_DUMP -U backup_user -h localhost -F d -f ${STAGING_DIR}/${DBNAME} ${DBNAME}
       $PG_DUMP -U backup_user -h localhost -F d -f ${STAGING_DIR}/${DBNAME} ${DBNAME}
echo Completed pg_dump of $DBNAME at `date`

echo
echo

echo Starting REMOTE borg create of $DBNAME and files at `date`
  echo $BORG create -s -C none ${REMOTE_REPO}::${DBNAME}-{now} ${STAGING_DIR}/${DBNAME} ${APP_FILE_DIR}
       $BORG create -s -C none ${REMOTE_REPO}::${DBNAME}-{now} ${STAGING_DIR}/${DBNAME} ${APP_FILE_DIR}
echo Completed REMOTE borg create of $DBNAME and files at `date`

# Indicate job end
${WGET} "${HC_PING}"