#!/usr/bin/env bash set -euo pipefail APP_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" BACKUP_ROOT="${BACKUP_ROOT:-/var/backups/database-kesiswaan}" ENV_FILE="${ENV_FILE:-$APP_DIR/.env}" TIMESTAMP="${TIMESTAMP:-$(date '+%Y-%m-%d-%H%M%S')}" RETENTION_DAYS="${RETENTION_DAYS:-14}" KEEP_ENV_BACKUP="${KEEP_ENV_BACKUP:-true}" abort() { printf '[ERROR] %s\n' "$1" >&2 exit 1 } log() { printf '[%s] %s\n' "$(date '+%Y-%m-%d %H:%M:%S')" "$1" } [[ -f "$ENV_FILE" ]] || abort "File .env tidak ditemukan di $ENV_FILE" mkdir -p "$BACKUP_ROOT/manifests" "$BACKUP_ROOT/env" DB_BACKUP="$(BACKUP_ROOT="$BACKUP_ROOT" ENV_FILE="$ENV_FILE" TIMESTAMP="$TIMESTAMP" RETENTION_DAYS="$RETENTION_DAYS" "$APP_DIR/scripts/backup-database-kesiswaan.sh")" FILES_BACKUP="$(BACKUP_ROOT="$BACKUP_ROOT" TIMESTAMP="$TIMESTAMP" RETENTION_DAYS="$RETENTION_DAYS" "$APP_DIR/scripts/backup-dokumen-kesiswaan.sh")" ENV_BACKUP="" if [[ "$KEEP_ENV_BACKUP" == "true" ]]; then ENV_BACKUP="$BACKUP_ROOT/env/env-${TIMESTAMP}.backup" cp "$ENV_FILE" "$ENV_BACKUP" chmod 600 "$ENV_BACKUP" || true find "$BACKUP_ROOT/env" -type f -name '*.backup' -mtime +"$RETENTION_DAYS" -delete || true fi MANIFEST_FILE="$BACKUP_ROOT/manifests/backup-${TIMESTAMP}.txt" { echo "timestamp=$TIMESTAMP" echo "database_backup=$DB_BACKUP" echo "files_backup=$FILES_BACKUP" echo "env_backup=${ENV_BACKUP:-not_saved}" echo "host=$(hostname)" echo "app_dir=$APP_DIR" } > "$MANIFEST_FILE" find "$BACKUP_ROOT/manifests" -type f -name 'backup-*.txt' -mtime +"$RETENTION_DAYS" -delete || true log "Backup penuh selesai" printf 'Database: %s\n' "$DB_BACKUP" printf 'Dokumen : %s\n' "$FILES_BACKUP" if [[ -n "$ENV_BACKUP" ]]; then printf '.env : %s\n' "$ENV_BACKUP" fi printf 'Manifest: %s\n' "$MANIFEST_FILE"