#!/usr/bin/env bash # Stonks Oracle Backup — PostgreSQL + MinIO → NFS # Usage: bash scripts/backup.sh set -euo pipefail NAMESPACE="stonks-oracle" NFS_SERVER="192.168.42.8" NFS_PATH="/volume1/Kubernetes/stonks" BACKUP_NAME="stonks-backup-$(date +%Y%m%d-%H%M%S)" JOB_NAME="stonks-backup" echo "=== Stonks Oracle Backup: ${BACKUP_NAME} ===" # Clean up any previous backup job kubectl delete job ${JOB_NAME} -n ${NAMESPACE} --ignore-not-found=true 2>/dev/null || true cat </dev/null for bucket in stonks-raw-market stonks-raw-news stonks-raw-filings stonks-normalized stonks-llm-prompts stonks-llm-results stonks-lakehouse stonks-audit; do if mc ls "backup/\${bucket}" >/dev/null 2>&1; then echo " Mirroring \${bucket}..." mc mirror --quiet "backup/\${bucket}" "\${DIR}/minio/\${bucket}/" 2>/dev/null || echo " (empty or error)" else echo " Bucket \${bucket} not found, skipping" fi done echo "[3/3] Writing manifest..." cat > "\${DIR}/manifest.json" <&1 || { echo "Backup job failed or timed out. Logs:" kubectl logs job/${JOB_NAME} -n ${NAMESPACE} 2>&1 | tail -20 exit 1 } echo "" kubectl logs job/${JOB_NAME} -n ${NAMESPACE} 2>&1 | tail -10 echo "" echo "=== Backup ${BACKUP_NAME} complete ==="