#!/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 COUNT=\$(mc ls --recursive "backup/\${bucket}" 2>/dev/null | wc -l) if [ "\${COUNT}" -gt 0 ]; then echo " \${bucket}: \${COUNT} objects, mirroring..." mc mirror "backup/\${bucket}" "\${DIR}/minio/\${bucket}/" 2>&1 | tail -1 SIZE=\$(du -sh "\${DIR}/minio/\${bucket}/" 2>/dev/null | cut -f1) echo " \${bucket}: done (\${SIZE})" else echo " \${bucket}: empty, skipping" fi else echo " \${bucket}: not found, skipping" fi done echo "" echo "=== Backup Summary ===" echo " PostgreSQL: \$(du -h "\${DIR}/stonks.pgdump" | cut -f1)" MINIO_TOTAL=\$(du -sh "\${DIR}/minio/" 2>/dev/null | cut -f1) echo " MinIO total: \${MINIO_TOTAL}" 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 [ -d "\${DIR}/minio/\${bucket}" ]; then BSIZE=\$(du -sh "\${DIR}/minio/\${bucket}/" 2>/dev/null | cut -f1) BCOUNT=\$(find "\${DIR}/minio/\${bucket}/" -type f 2>/dev/null | wc -l) echo " \${bucket}: \${BSIZE} (\${BCOUNT} files)" fi done TOTAL=\$(du -sh "\${DIR}/" 2>/dev/null | cut -f1) echo " Total backup size: \${TOTAL}" 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 ==="