initial release
All checks were successful
Container Publish / on-success-skip (push) Has been skipped
Container Publish / build-image (arm64) (push) Successful in 36s
Container Publish / build-image (amd64) (push) Successful in 55s
Container Publish / update docker manifest (push) Successful in 11s

This commit is contained in:
2025-12-14 21:27:17 +01:00
commit 0253fbebcd
8 changed files with 954 additions and 0 deletions

107
rootfs/app/backup.sh Executable file
View File

@@ -0,0 +1,107 @@
#!/bin/sh
set -o pipefail
STATUS_FILE=/last_backup_status.txt
MARIADB_HOST=${MARIADB_HOST:-db}
MARIADB_USER=${MARIADB_USER:-root}
MARIADB_PORT=${MARIADB_PORT:-3306}
MARIADB_PASSWORD=${MARIADB_PASSWORD:-1StrongPassword}
MARIADB_DATABASE=${MARIADB_DATABASE:-my-db}
COMPRESSION=${COMPRESSION:-gzip}
RCLONE_CONFIG_FILE=${RCLONE_CONFIG_FILE:-/config/rclone.conf}
RCLONE_REMOTE=${RCLONE_REMOTE:-myremote}
RCLONE_PATH=${RCLONE_PATH:-/backups}
TMPDIR=$(mktemp -d)
DEST_FILENAME=$(date +%Y-%m-%d_%H-%M-%S).sql
BACKUP_FILE="${TMPDIR}/${DEST_FILENAME}"
trap cleanup EXIT
cleanup() {
# rm -rf "${TMPDIR}"
echo "Removed temporary file"
}
if [ ! -f "${RCLONE_CONFIG_FILE}" ]; then
echo "Rclone config file not found"
exit 1
fi
echo "Backup started"
dump_failed() {
echo "Database dump failed"
echo "dump failed" > "${STATUS_FILE}"
exit 1
}
mkdir_failed() {
echo "Backup mkdir failed"
echo "mkdir failed" > "${STATUS_FILE}"
exit 1
}
copy_failed() {
echo "Backup copy failed"
echo "copy failed" > "${STATUS_FILE}"
exit 1
}
COMPRESSOR=cat
if [ "${COMPRESSION}" = "gzip" ]; then
COMPRESSOR="gzip"
BACKUP_FILE="${BACKUP_FILE}.gz"
DEST_FILENAME="${DEST_FILENAME}.gz"
fi
if [ "${COMPRESSION}" = "bzip2" ]; then
COMPRESSOR="bzip2"
BACKUP_FILE="${BACKUP_FILE}.bz2"
DEST_FILENAME="${DEST_FILENAME}.bz2"
fi
if [ "${COMPRESSION}" = "xz" ]; then
COMPRESSOR="xz"
BACKUP_FILE="${BACKUP_FILE}.xz"
DEST_FILENAME="${DEST_FILENAME}.xz"
fi
if [ "${COMPRESSION}" = "zstd" ]; then
COMPRESSOR="zstd"
BACKUP_FILE="${BACKUP_FILE}.zst"
DEST_FILENAME="${DEST_FILENAME}.zst"
fi
echo "Dumping database into: ${BACKUP_FILE}"
mariadb-dump \
--add-drop-table \
--add-drop-trigger \
--add-locks \
--disable-keys \
--lock-all-tables \
--quick \
--triggers \
--tz-utc -v \
--host=${MARIADB_HOST} \
--port=${MARIADB_PORT} \
--user=${MARIADB_USER} \
--password="${MARIADB_PASSWORD}" \
--databases "${MARIADB_DATABASE}" | "${COMPRESSOR}" > "${BACKUP_FILE}" || dump_failed
echo "Copying backup to remote"
rclone \
-v --config "${RCLONE_CONFIG_FILE}" \
mkdir "${RCLONE_REMOTE}:${RCLONE_PATH}" || mkdir_failed
rclone \
-v --config "${RCLONE_CONFIG_FILE}" \
copy "${BACKUP_FILE}" "${RCLONE_REMOTE}:${RCLONE_PATH}" || copy_failed
echo "success" > "${STATUS_FILE}"
echo "Backup completed"

7
rootfs/app/entrypoint.sh Executable file
View File

@@ -0,0 +1,7 @@
#!/bin/sh
CRONTAB=${CRONTAB:-"0 12 * * *"}
echo "${CRONTAB} /app/backup.sh" > /etc/crontabs/root
crond -f

13
rootfs/app/healthcheck.sh Executable file
View File

@@ -0,0 +1,13 @@
#!/bin/sh
STATUS_FILE=/last_backup_status.txt
if [ ! -f "${STATUS_FILE}" ]; then
exit 0
fi
if [ "$(cat "${STATUS_FILE}")" != "success" ]; then
exit 1
fi
exit 0