Initial commit: management

This commit is contained in:
jtricerolph 2026-07-01 12:09:54 +00:00
commit ab329d497b
8 changed files with 243 additions and 0 deletions

46
backup/backup.sh Normal file
View file

@ -0,0 +1,46 @@
#!/bin/sh
set -e
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR=/backups
PG_HOST=10.10.10.100
mkdir -p "$BACKUP_DIR/postgres/daily" "$BACKUP_DIR/postgres/weekly" "$BACKUP_DIR/volumes"
log() { echo "[$(date '+%H:%M:%S')] $1"; }
# ── PostgreSQL dumps ──────────────────────────────────────────────────────────
log "Starting PostgreSQL backups..."
for DB in $BACKUP_DATABASES; do
OUTFILE="$BACKUP_DIR/postgres/daily/${DB}_${TIMESTAMP}.sql.gz"
PGPASSWORD="$PG_SUPERPASS" pg_dump -h "$PG_HOST" -U postgres "$DB" | gzip > "$OUTFILE"
log " $DB$(du -sh "$OUTFILE" | cut -f1)"
done
# Weekly full dump on Sundays
if [ "$(date +%u)" = "7" ]; then
log "Weekly full dump..."
PGPASSWORD="$PG_SUPERPASS" pg_dumpall -h "$PG_HOST" -U postgres \
| gzip > "$BACKUP_DIR/postgres/weekly/full_${TIMESTAMP}.sql.gz"
fi
# ── Retention cleanup ─────────────────────────────────────────────────────────
find "$BACKUP_DIR/postgres/daily" -name "*.gz" -mtime +7 -delete
find "$BACKUP_DIR/postgres/weekly" -name "*.gz" -mtime +28 -delete
log "Retention cleanup done"
# ── Rsync to remote ───────────────────────────────────────────────────────────
if [ -n "$BACKUP_REMOTE" ]; then
log "Syncing to $BACKUP_REMOTE..."
rsync -az --delete \
-e "ssh -i /root/.ssh/id_ed25519 -o StrictHostKeyChecking=no" \
"$BACKUP_DIR/" "$BACKUP_REMOTE"
log "Sync complete"
fi
# ── Uptime Kuma heartbeat ─────────────────────────────────────────────────────
if [ -n "$KUMA_PUSH_URL" ]; then
wget -qO- "$KUMA_PUSH_URL?status=up&msg=Backup+OK&ping=" > /dev/null 2>&1 || true
fi
log "Backup complete"