#!/usr/bin/env bash set -euo pipefail APP_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" BACKUP_ROOT="${BACKUP_ROOT:-/var/backups/database-kesiswaan}" TIMESTAMP="${TIMESTAMP:-$(date '+%Y-%m-%d-%H%M%S')}" RETENTION_DAYS="${RETENTION_DAYS:-14}" SOURCE_DIR="${SOURCE_DIR:-$APP_DIR/storage/app/public}" abort() { printf '[ERROR] %s\n' "$1" >&2 exit 1 } log() { printf '[%s] %s\n' "$(date '+%Y-%m-%d %H:%M:%S')" "$1" } require_bin() { command -v "$1" >/dev/null 2>&1 || abort "Binary '$1' tidak ditemukan." } [[ -d "$SOURCE_DIR" ]] || abort "Folder sumber dokumen tidak ditemukan di $SOURCE_DIR" require_bin tar TARGET_DIR="$BACKUP_ROOT/files" mkdir -p "$TARGET_DIR" TARGET_FILE="$TARGET_DIR/storage-public-${TIMESTAMP}.tar.gz" log "Memulai backup dokumen dari '$SOURCE_DIR'" tar -czf "$TARGET_FILE" -C "$SOURCE_DIR" . find "$TARGET_DIR" -type f -name '*.tar.gz' -mtime +"$RETENTION_DAYS" -delete || true log "Backup dokumen selesai: $TARGET_FILE" printf '%s\n' "$TARGET_FILE"