Files
database-kesiswaan/scripts/backup-full-kesiswaan.sh
T

54 lines
1.7 KiB
Bash
Executable File

#!/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"