retention
All checks were successful
Container Publish / on-success-skip (push) Has been skipped
Container Publish / build-image (arm64) (push) Successful in 35s
Container Publish / build-image (amd64) (push) Successful in 50s
Container Publish / update docker manifest (push) Successful in 10s
Vulnerability Scan / Daily Vulnerability Scan (arm64) (push) Successful in 9s
Vulnerability Scan / Daily Vulnerability Scan (amd64) (push) Successful in 49s

This commit is contained in:
2025-12-16 13:51:50 +01:00
parent f03097f83b
commit 293814277d
2 changed files with 25 additions and 3 deletions

View File

@@ -35,6 +35,7 @@ services:
MARIADB_DATABASE: my-db MARIADB_DATABASE: my-db
CRONTAB: "15 */4 * * *" CRONTAB: "15 */4 * * *"
COMPRESSION: gzip # gzip | bzip2 | xz | zstd COMPRESSION: gzip # gzip | bzip2 | xz | zstd
KEEP_SUCCESFUL_DAYS: 15 # default is 30
RCLONE_REMOTE: myremote RCLONE_REMOTE: myremote
RCLONE_PATH: /backups RCLONE_PATH: /backups
RCLONE_CONFIG_FILE: /config/rclone.conf RCLONE_CONFIG_FILE: /config/rclone.conf

View File

@@ -11,11 +11,12 @@ COMPRESSION=${COMPRESSION:-gzip}
RCLONE_CONFIG_FILE=${RCLONE_CONFIG_FILE:-/config/rclone.conf} RCLONE_CONFIG_FILE=${RCLONE_CONFIG_FILE:-/config/rclone.conf}
RCLONE_REMOTE=${RCLONE_REMOTE:-myremote} RCLONE_REMOTE=${RCLONE_REMOTE:-myremote}
RCLONE_PATH=${RCLONE_PATH:-/backups} RCLONE_PATH=${RCLONE_PATH:-/backups}
KEEP_SUCCESFUL_DAYS=${KEEP_SUCCESFUL_DAYS:-30}
TMPDIR=$(mktemp -d) TMPDIR=$(mktemp -d)
DEST_FILENAME=$(date +%Y-%m-%d_%H-%M-%S).sql DEST_FILENAME=$(date +%Y-%m-%d_%H-%M-%S).sql
BACKUP_FILE="${TMPDIR}/${DEST_FILENAME}" BACKUP_FILE="${TMPDIR}/${DEST_FILENAME}"
RCLONE_PATH="${RCLONE_PATH}/$(date +%Y-%m-%d)" RCLONE_DEST_PATH="${RCLONE_PATH}/$(date +%Y-%m-%d)"
trap cleanup EXIT trap cleanup EXIT
cleanup() { cleanup() {
@@ -55,6 +56,11 @@ copy_failed() {
exit 1 exit 1
} }
delete_failed() {
echo "Cleanup delete failed"
exit 1
}
COMPRESSOR="cat" COMPRESSOR="cat"
if [ "${COMPRESSION}" = "gzip" ]; then if [ "${COMPRESSION}" = "gzip" ]; then
COMPRESSOR="gzip" COMPRESSOR="gzip"
@@ -100,12 +106,27 @@ echo "Copying backup to remote"
rclone \ rclone \
-v --config "${RCLONE_CONFIG_FILE}" \ -v --config "${RCLONE_CONFIG_FILE}" \
mkdir "${RCLONE_REMOTE}:${RCLONE_PATH}" || mkdir_failed mkdir "${RCLONE_REMOTE}:${RCLONE_DEST_PATH}" || mkdir_failed
rclone \ rclone \
-v --config "${RCLONE_CONFIG_FILE}" \ -v --config "${RCLONE_CONFIG_FILE}" \
copy "${BACKUP_FILE}" "${RCLONE_REMOTE}:${RCLONE_PATH}" || copy_failed copy "${BACKUP_FILE}" "${RCLONE_REMOTE}:${RCLONE_DEST_PATH}" || copy_failed
echo "success" > "${STATUS_FILE}" echo "success" > "${STATUS_FILE}"
echo "Backup completed" echo "Backup completed"
echo "Cleaning up old backups"
rclone \
-v --config "${RCLONE_CONFIG_FILE}" \
lsd "${RCLONE_REMOTE}:${RCLONE_PATH}" | \
awk '{print $5}' | sort -r | tail -n +$((KEEP_SUCCESFUL_DAYS + 1)) \
| while read -r line; do
echo "Deleting backup: ${line}"
rclone \
-v --config "${RCLONE_CONFIG_FILE}" \
purge "${RCLONE_REMOTE}:${RCLONE_PATH}/${line}" || delete_failed
done
echo "Cleanup completed"