diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3398630 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +dockerBuildAndPush.sh \ No newline at end of file diff --git a/BackupSideCar.Dockerfile b/BackupSideCar.Dockerfile new file mode 100644 index 0000000..ba53d74 --- /dev/null +++ b/BackupSideCar.Dockerfile @@ -0,0 +1,14 @@ +FROM alpine:3.17 + +# Setup correct TZ +RUN apk add alpine-conf +RUN /sbin/setup-timezone -z UTC + +RUN apk add restic curl + +WORKDIR /app + +COPY ./src/entry.sh /app/ +COPY ./src/backup.sh /app/ + +CMD [ "/bin/sh", "entry.sh" ] diff --git a/src/backup.sh b/src/backup.sh new file mode 100644 index 0000000..4e6722b --- /dev/null +++ b/src/backup.sh @@ -0,0 +1,40 @@ +#!/bin/sh + +GOTIFYURL="$GOTIFYHOST/message?token=$GOTIFYTOKEN" + +echo "$(date +"%Y-%m-%dT%T") - Starting backup" + +restic backup \ + --verbose \ + $SOURCEDIR + +RESTIC_BACKUP_RETURN=$? + +if [ $RESTIC_BACKUP_RETURN -eq 0 ]; then + MSG_BACKUP_SUCCESS="Backup successful" + echo "$(date +"%Y-%m-%dT%T") - $MSG_BACKUP_SUCCESS" + curl -s -X POST "$GOTIFYURL" -F "title=$GOTIFYTOPIC" -F "message=$MSG_BACKUP_SUCCESS" +else + MSG_BACKUP_ERR="Backup failed with error code $RESTIC_BACKUP_RETURN" + echo "$(date +"%Y-%m-%dT%T") - MSG_BACKUP_ERR" + curl -s -X POST "$GOTIFYURL" -F "title=$GOTIFYTOPIC" -F "message=$MSG_BACKUP_ERR" + exit $RESTIC_BACKUP_RETURN +fi + + +MSG_PURGE_START="$(date +"%Y-%m-%dT%T") - Removing old backups" +echo $MSG_PURGE_START + +restic forget --keep-last $KEEPLAST --prune +RESTIC_PURGE_RETURN=$? + +if [ $RESTIC_PURGE_RETURN -eq 0 ]; then + echo "$(date +"%Y-%m-%dT%T") - Purge successful" +else + MSG_PURGE_ERR="Purge failed with error code $MSG_PURGE_ERR" + echo "$(date +"%Y-%m-%dT%T") - $MSG_PURGE_ERR" + curl -s -X POST "$GOTIFYURL" -F "title=$GOTIFYTOPIC" -F "message=$MSG_PURGE_ERR" + exit $RESTIC_PURGE_RETURN +fi + +echo "$(date +"%Y-%m-%dT%T") - Going back to sleep..." diff --git a/src/entry.sh b/src/entry.sh new file mode 100644 index 0000000..6878b47 --- /dev/null +++ b/src/entry.sh @@ -0,0 +1,18 @@ +#!/bin/sh + +mkdir /etc/cron.d +touch /etc/cron.d/backup +echo "$INTERVAL /bin/sh /app/backup.sh" > /etc/cron.d/backup + +# change ownership and make the cron known to crontab +chmod 0644 /etc/cron.d/backup && crontab /etc/cron.d/backup + + +if [ $RUNONSTART = 'true' ]; then + echo $(date +"%Y-%m-%dT%T") "- Running initial backup" + /bin/sh /app/backup.sh +fi + +# Wait until infinity +echo $(date +"%Y-%m-%dT%T") "- Starting cron" +crond -f \ No newline at end of file