#!/bin/bash set -euo pipefail # set -x # Enable debug output # --- Configuration --- VAULT_DATA_DIR="${VAULT_DATA_DIR:-/srv/docker/vault/data/}" S3_BUCKET="${S3_BUCKET:-vault-backup}" MC_ALIAS="${MC_ALIAS:-synology}" # Pre-configured mc alias RETENTION_DAYS="${RETENTION_DAYS:-60}" TIMESTAMP=$(date +%Y%m%d-%H%M%S) BACKUP_FILE="/tmp/vault-backup-${TIMESTAMP}.tar.gz" log() { echo "[$(date -Iseconds)] $*"; } cleanup() { rm -f "${BACKUP_FILE}" } trap cleanup EXIT # --- Create backup --- log "Backing up ${VAULT_DATA_DIR}..." tar -czf "${BACKUP_FILE}" -C "$(dirname "${VAULT_DATA_DIR}")" "$(basename "${VAULT_DATA_DIR}")" BACKUP_SIZE=$(stat -c%s "${BACKUP_FILE}") log "Backup size: ${BACKUP_SIZE} bytes" # --- Upload to MinIO --- log "Uploading to ${MC_ALIAS}/${S3_BUCKET}..." set -x minio-cli cp --quiet "${BACKUP_FILE}" "${MC_ALIAS}/${S3_BUCKET}/vault-backup-${TIMESTAMP}.tar.gz" # --- Prune old backups --- log "Pruning backups older than ${RETENTION_DAYS} days..." minio-cli rm --quiet --recursive --force --older-than "${RETENTION_DAYS}d" "${MC_ALIAS}/${S3_BUCKET}/" log "Backup complete: vault-backup-${TIMESTAMP}.tar.gz"