Compare commits
9 Commits
0253fbebcd
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
293814277d
|
|||
|
f03097f83b
|
|||
|
458ce5534b
|
|||
|
1ebd6512d8
|
|||
|
5b23ca2243
|
|||
|
e551d60679
|
|||
|
18cef1c84e
|
|||
|
9b56614763
|
|||
|
6caf3686d4
|
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
docker-compose.yaml
|
||||
config/
|
||||
@@ -6,7 +6,7 @@ RUN \
|
||||
|
||||
COPY rootfs /
|
||||
|
||||
HEALTHCHECK --interval=2m --timeout=3s \
|
||||
HEALTHCHECK --interval=1m --timeout=3s --start-period=20s --retries=1 \
|
||||
CMD /app/healthcheck.sh || exit 1
|
||||
|
||||
ENTRYPOINT [ "/sbin/tini", "/app/entrypoint.sh" ]
|
||||
|
||||
@@ -35,6 +35,7 @@ services:
|
||||
MARIADB_DATABASE: my-db
|
||||
CRONTAB: "15 */4 * * *"
|
||||
COMPRESSION: gzip # gzip | bzip2 | xz | zstd
|
||||
KEEP_SUCCESFUL_DAYS: 15 # default is 30
|
||||
RCLONE_REMOTE: myremote
|
||||
RCLONE_PATH: /backups
|
||||
RCLONE_CONFIG_FILE: /config/rclone.conf
|
||||
|
||||
@@ -1,10 +1,7 @@
|
||||
#!/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}
|
||||
@@ -14,18 +11,26 @@ COMPRESSION=${COMPRESSION:-gzip}
|
||||
RCLONE_CONFIG_FILE=${RCLONE_CONFIG_FILE:-/config/rclone.conf}
|
||||
RCLONE_REMOTE=${RCLONE_REMOTE:-myremote}
|
||||
RCLONE_PATH=${RCLONE_PATH:-/backups}
|
||||
KEEP_SUCCESFUL_DAYS=${KEEP_SUCCESFUL_DAYS:-30}
|
||||
|
||||
TMPDIR=$(mktemp -d)
|
||||
DEST_FILENAME=$(date +%Y-%m-%d_%H-%M-%S).sql
|
||||
BACKUP_FILE="${TMPDIR}/${DEST_FILENAME}"
|
||||
|
||||
RCLONE_DEST_PATH="${RCLONE_PATH}/$(date +%Y-%m-%d)"
|
||||
|
||||
trap cleanup EXIT
|
||||
cleanup() {
|
||||
# rm -rf "${TMPDIR}"
|
||||
rm -rf "${TMPDIR}"
|
||||
echo "Removed temporary file"
|
||||
}
|
||||
|
||||
trap interrupt INT
|
||||
interrupt() {
|
||||
echo "Backup interrupted"
|
||||
echo "interrupted" > "${STATUS_FILE}"
|
||||
exit 1
|
||||
}
|
||||
|
||||
if [ ! -f "${RCLONE_CONFIG_FILE}" ]; then
|
||||
echo "Rclone config file not found"
|
||||
exit 1
|
||||
@@ -51,7 +56,12 @@ copy_failed() {
|
||||
exit 1
|
||||
}
|
||||
|
||||
COMPRESSOR=cat
|
||||
delete_failed() {
|
||||
echo "Cleanup delete failed"
|
||||
exit 1
|
||||
}
|
||||
|
||||
COMPRESSOR="cat"
|
||||
if [ "${COMPRESSION}" = "gzip" ]; then
|
||||
COMPRESSOR="gzip"
|
||||
BACKUP_FILE="${BACKUP_FILE}.gz"
|
||||
@@ -85,9 +95,9 @@ mariadb-dump \
|
||||
--quick \
|
||||
--triggers \
|
||||
--tz-utc -v \
|
||||
--host=${MARIADB_HOST} \
|
||||
--port=${MARIADB_PORT} \
|
||||
--user=${MARIADB_USER} \
|
||||
--host="${MARIADB_HOST}" \
|
||||
--port="${MARIADB_PORT}" \
|
||||
--user="${MARIADB_USER}" \
|
||||
--password="${MARIADB_PASSWORD}" \
|
||||
--databases "${MARIADB_DATABASE}" | "${COMPRESSOR}" > "${BACKUP_FILE}" || dump_failed
|
||||
|
||||
@@ -96,12 +106,27 @@ echo "Copying backup to remote"
|
||||
|
||||
rclone \
|
||||
-v --config "${RCLONE_CONFIG_FILE}" \
|
||||
mkdir "${RCLONE_REMOTE}:${RCLONE_PATH}" || mkdir_failed
|
||||
mkdir "${RCLONE_REMOTE}:${RCLONE_DEST_PATH}" || mkdir_failed
|
||||
|
||||
rclone \
|
||||
-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 "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"
|
||||
|
||||
@@ -4,4 +4,5 @@ CRONTAB=${CRONTAB:-"0 12 * * *"}
|
||||
|
||||
echo "${CRONTAB} /app/backup.sh" > /etc/crontabs/root
|
||||
|
||||
crond -f
|
||||
echo "Starting cron"
|
||||
crond -f -d 7
|
||||
|
||||
Reference in New Issue
Block a user