generated from john/python-template
V6.1 continue refining backup: switch to Synology Drive Client for remote backup
Quality Gate / gate (push) Failing after 1m10s
Quality Gate / gate (push) Failing after 1m10s
This commit is contained in:
@@ -3,7 +3,9 @@ set -eu
|
||||
|
||||
COMPOSE_FILE="${COMPOSE_FILE:-docker-compose.production.yml}"
|
||||
ENV_FILE="${ENV_FILE:-.env.production}"
|
||||
BACKUP_DIR="${BACKUP_DIR:-./data/backups}"
|
||||
BACKUP_DIR="${BACKUP_DIR:-${DATABASE_BACKUP_DIR:-./data/backups}}"
|
||||
APP_DATA_BACKUP_DIR="${APP_DATA_BACKUP_DIR:-${BACKUP_DIR}/data}"
|
||||
UPLOADS_BACKUP_DIR="${UPLOADS_BACKUP_DIR:-${BACKUP_DIR}/uploads}"
|
||||
RETENTION_DAYS="${BACKUP_RETENTION_DAYS:-14}"
|
||||
SYNOLOGY_BACKUP_DIR="${SYNOLOGY_BACKUP_DIR:-}"
|
||||
|
||||
@@ -66,6 +68,23 @@ find "${BACKUP_DIR}" -type f \( \
|
||||
-name 'backup-*.manifest' \
|
||||
\) -mtime +"${RETENTION_DAYS}" -delete
|
||||
|
||||
# Always keep a rolling incremental mirror of uploaded files in BACKUP_DIR.
|
||||
mkdir -p "${APP_DATA_BACKUP_DIR}"
|
||||
if [ -d /app/data ]; then
|
||||
cp -a /app/data/. "${APP_DATA_BACKUP_DIR}/"
|
||||
fi
|
||||
|
||||
mkdir -p "${UPLOADS_BACKUP_DIR}/documents" "${UPLOADS_BACKUP_DIR}/photos"
|
||||
if [ -f /app/uploads/homepage.md ] && [ ! -f "${UPLOADS_BACKUP_DIR}/homepage.md" ]; then
|
||||
cp /app/uploads/homepage.md "${UPLOADS_BACKUP_DIR}/homepage.md"
|
||||
fi
|
||||
if [ -d /app/uploads/documents ]; then
|
||||
cp -an /app/uploads/documents/. "${UPLOADS_BACKUP_DIR}/documents/"
|
||||
fi
|
||||
if [ -d /app/uploads/photos ]; then
|
||||
cp -an /app/uploads/photos/. "${UPLOADS_BACKUP_DIR}/photos/"
|
||||
fi
|
||||
|
||||
if [ -n "${SYNOLOGY_BACKUP_DIR}" ]; then
|
||||
mkdir -p "${SYNOLOGY_BACKUP_DIR}"
|
||||
|
||||
@@ -89,21 +108,6 @@ if [ -n "${SYNOLOGY_BACKUP_DIR}" ]; then
|
||||
--entrypoint sh app -lc \
|
||||
"if [ -d /app/data/logs ]; then tar -C /app/data/logs -czf /backup/${logs_file} .; else : > /backup/${logs_file}; fi"
|
||||
|
||||
# 3) Sync uploads incrementally to Synology (copy only new files).
|
||||
docker compose --env-file "${ENV_FILE}" -f "${COMPOSE_FILE}" run --rm --no-deps \
|
||||
-v "${SYNOLOGY_BACKUP_DIR}:/backup" \
|
||||
--entrypoint sh app -lc '
|
||||
mkdir -p /backup/uploads/documents /backup/uploads/photos;
|
||||
if [ -f /app/uploads/homepage.md ] && [ ! -f /backup/uploads/homepage.md ]; then
|
||||
cp /app/uploads/homepage.md /backup/uploads/homepage.md;
|
||||
fi;
|
||||
if [ -d /app/uploads/documents ]; then
|
||||
cp -an /app/uploads/documents/. /backup/uploads/documents/;
|
||||
fi;
|
||||
if [ -d /app/uploads/photos ]; then
|
||||
cp -an /app/uploads/photos/. /backup/uploads/photos/;
|
||||
fi
|
||||
'
|
||||
else
|
||||
if [ -d /app/data/logs ]; then
|
||||
tar -C /app/data/logs -czf "${SYNOLOGY_BACKUP_DIR}/${logs_file}" .
|
||||
@@ -111,16 +115,8 @@ if [ -n "${SYNOLOGY_BACKUP_DIR}" ]; then
|
||||
: > "${SYNOLOGY_BACKUP_DIR}/${logs_file}"
|
||||
fi
|
||||
|
||||
mkdir -p "${SYNOLOGY_BACKUP_DIR}/uploads/documents" "${SYNOLOGY_BACKUP_DIR}/uploads/photos"
|
||||
if [ -f /app/uploads/homepage.md ] && [ ! -f "${SYNOLOGY_BACKUP_DIR}/uploads/homepage.md" ]; then
|
||||
cp /app/uploads/homepage.md "${SYNOLOGY_BACKUP_DIR}/uploads/homepage.md"
|
||||
fi
|
||||
if [ -d /app/uploads/documents ]; then
|
||||
cp -an /app/uploads/documents/. "${SYNOLOGY_BACKUP_DIR}/uploads/documents/"
|
||||
fi
|
||||
if [ -d /app/uploads/photos ]; then
|
||||
cp -an /app/uploads/photos/. "${SYNOLOGY_BACKUP_DIR}/uploads/photos/"
|
||||
fi
|
||||
mkdir -p "${SYNOLOGY_BACKUP_DIR}/uploads"
|
||||
cp -an "${UPLOADS_BACKUP_DIR}/." "${SYNOLOGY_BACKUP_DIR}/uploads/"
|
||||
fi
|
||||
|
||||
cp "${BACKUP_DIR}/${manifest_file}" "${SYNOLOGY_BACKUP_DIR}/${manifest_file}"
|
||||
@@ -137,12 +133,14 @@ fi
|
||||
echo "Created backup set:"
|
||||
echo " ${BACKUP_DIR}/${postgres_file}"
|
||||
echo " ${BACKUP_DIR}/${manifest_file}"
|
||||
echo " ${APP_DATA_BACKUP_DIR}/ (incremental app data mirror)"
|
||||
echo " ${UPLOADS_BACKUP_DIR}/ (incremental uploads mirror)"
|
||||
if [ -n "${SYNOLOGY_BACKUP_DIR}" ]; then
|
||||
echo "Synology artifacts:"
|
||||
echo " ${SYNOLOGY_BACKUP_DIR}/${postgres_file}"
|
||||
echo " ${SYNOLOGY_BACKUP_DIR}/${config_file}"
|
||||
echo " ${SYNOLOGY_BACKUP_DIR}/${logs_file}"
|
||||
echo " ${SYNOLOGY_BACKUP_DIR}/uploads/{homepage.md,documents/,photos/} (incremental)"
|
||||
echo " ${SYNOLOGY_BACKUP_DIR}/uploads/ (copied from local incremental mirror)"
|
||||
echo " ${SYNOLOGY_BACKUP_DIR}/${manifest_file}"
|
||||
else
|
||||
echo "SYNOLOGY_BACKUP_DIR not set; skipped Synology copy."
|
||||
|
||||
Reference in New Issue
Block a user