Files
termi-blog/deploy/scripts/backup/backup-media.sh

32 lines
1.1 KiB
Bash

#!/usr/bin/env bash
set -euo pipefail
BACKUP_DIR="${BACKUP_DIR:-./backups/media}"
RETENTION_DAYS="${RETENTION_DAYS:-14}"
TIMESTAMP="$(date -u +%Y%m%dT%H%M%SZ)"
mkdir -p "${BACKUP_DIR}"
if [[ -n "${MEDIA_S3_SOURCE:-}" ]]; then
TARGET_DIR="${BACKUP_DIR}/media-${TIMESTAMP}"
mkdir -p "${TARGET_DIR}"
aws s3 sync "${MEDIA_S3_SOURCE}" "${TARGET_DIR}" ${AWS_EXTRA_ARGS:-}
ln -sfn "$(basename "${TARGET_DIR}")" "${BACKUP_DIR}/latest"
find "${BACKUP_DIR}" -maxdepth 1 -mindepth 1 -type d -name 'media-*' -mtime +"${RETENTION_DAYS}" -exec rm -rf {} +
echo "Media backup synced from ${MEDIA_S3_SOURCE} to ${TARGET_DIR}"
exit 0
fi
SOURCE_DIR="${MEDIA_SOURCE_DIR:-./uploads}"
FILE_PATH="${BACKUP_DIR}/media-${TIMESTAMP}.tar.gz"
if [[ ! -d "${SOURCE_DIR}" ]]; then
echo "Set MEDIA_SOURCE_DIR or MEDIA_S3_SOURCE before running this script" >&2
exit 1
fi
tar -czf "${FILE_PATH}" -C "${SOURCE_DIR}" .
ln -sfn "$(basename "${FILE_PATH}")" "${BACKUP_DIR}/latest.tar.gz"
find "${BACKUP_DIR}" -type f -name 'media-*.tar.gz' -mtime +"${RETENTION_DAYS}" -delete
echo "Media backup written to ${FILE_PATH}"