Files
docker-backup-gpg-s3/backup.sh
Matthias Bilger c72a1f81ce
All checks were successful
continuous-integration/drone/push Build is passing
updated healthcheck call
2021-05-27 10:08:07 +02:00

104 lines
3.0 KiB
Bash

#!/bin/sh
BACKUP_DATE=$(date +"%Y-%m-%d")
BACKUP_BASENAME=$S3_BUCKET_NAME$BACKUP_DATE.tar
SKIP_XZ=${ONLY_TAR:-0}
month_day=`date +"%d"`
if [ $SKIP_XZ -ne 0 ]; then
TAR_PARAM=
BACKUP_FILENAME=daily_$BACKUP_BASENAME
BACKUP_FILENAME_MONTHLY=monthly_$BACKUP_BASENAME
else
TAR_PARAM=-J
BACKUP_FILENAME=daily_$BACKUP_BASENAME.xz
BACKUP_FILENAME_MONTHLY=monthly_$BACKUP_BASENAME.xz
fi
rm -f ~/$BACKUP_FILENAME.gpg ~/$BACKUP_FILENAME
healthchck_fail(){
if [ -n "$HEALTHCHECK_URL" ]; then
curl -X POST --data "$*" --retry 3 $HEALTHCHECK_URL/fail --silent --output /dev/null
exit 1
fi
}
healthchck_start(){
if [ -n "$HEALTHCHECK_URL" ]; then
curl -X POST --data "$*" --retry 3 $HEALTHCHECK_URL/start --silent --output /dev/null
fi
}
healthchck_ok(){
if [ -n "$HEALTHCHECK_URL" ]; then
curl -X POST --data "$*" --retry 3 $HEALTHCHECK_URL --silent --output /dev/null
fi
}
healthchck_start "Starting Backup"
cd /backup
TAR_RETRIES=3
while [ $TAR_RETRIES -gt 0 ]; do
echo "make archive"
tar -c ${TAR_PARAM} ${TAR_EXTRA_PARAM} -f ~/$BACKUP_FILENAME ./* || healthchck_fail "TAR Failed"
if [ $? -ne 0 ]; then
TAR_RETRIES=$(($TAR_RETRIES-1))
else
TAR_RETRIES=0
fi
done
cd /
echo " done"
RECIPIENT=$(echo "$GPG_RECIPIENT" | sed "s/,/ --recipient /")
echo "encrypting"
gpg --batch --trust-model always --enable-progress-filter --output ~/$BACKUP_FILENAME.gpg --encrypt --recipient $RECIPIENT ~/$BACKUP_FILENAME || healthchck_fail "Encryption Failed"
rm ~/$BACKUP_FILENAME
echo "uploading"
if [ "$USE_SFTP" -eq 1 ]; then
echo "use sftp"
cd ~/
sshpass -e sftp -oBatchMode=no ${SFTP_EXTRA} -b - ${SFTP_USER}@${SFTP_HOST} << !
cd ${SFTP_PATH}
put ${BACKUP_FILENAME}.gpg
bye
!
if [ "$month_day" -eq 1 ] ; then
echo "make monthly backup"
sshpass -e sftp -oBatchMode=no ${SFTP_EXTRA} -b - ${SFTP_USER}@${SFTP_HOST} << !
cd ${SFTP_PATH}
cp ${BACKUP_FILENAME}.gpg ${BACKUP_FILENAME_MONTHLY}.gpg
bye
!
fi
rm ~/$BACKUP_FILENAME.gpg
else
AWS_ENDPOINT_OPTION=
AWS_STORAGECLASS_OPTION="--storage-class DEEP_ARCHIVE"
if [ "$AWS_USE_MINIO" -eq 1 ] ; then
aws configure set default.s3.signature_version s3v4
AWS_ENDPOINT_OPTION="--endpoint-url https://${MINIO_ENDPOINT}"
AWS_STORAGECLASS_OPTION=
fi
echo aws ${AWS_ENDPOINT_OPTION} s3 cp ~/$BACKUP_FILENAME.gpg s3://$S3_BUCKET_NAME/$BACKUP_FILENAME.gpg ${AWS_STORAGECLASS_OPTION} || healthchck_fail "Upload Failed"
aws ${AWS_ENDPOINT_OPTION} s3 cp --no-progress ~/$BACKUP_FILENAME.gpg s3://$S3_BUCKET_NAME/$BACKUP_FILENAME.gpg ${AWS_STORAGECLASS_OPTION} || healthchck_fail "Upload Failed"
rm ~/$BACKUP_FILENAME.gpg
echo "done"
# On first month day do
if [ "$AWS_USE_MINIO" -eq 1 ]; then
echo "no monthly"
else
if [ "$month_day" -eq 1 ] ; then
echo "make monthly backup"
aws ${AWS_ENDPOINT_OPTIOM} s3 cp s3://$S3_BUCKET_NAME/$BACKUP_FILENAME.gpg s3://$S3_BUCKET_NAME/$BACKUP_FILENAME_MONTHLY.gpg --storage-class DEEP_ARCHIVE || healthchck_fail "failed to create monthly backup"
fi
fi
fi
healthchck_ok "Success"