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
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:
@@ -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
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
Reference in New Issue
Block a user