electric-horses-infra/stacks/forgejo/backup.sh

30 lines
848 B
Bash
Raw Normal View History

#!/bin/bash
# Forgejo Backup — nightly cron
# Runs pg_dump + tar of /data, retention 14 days.
# Schedule: 0 3 * * * /opt/ai-apps/forgejo/backup.sh >> /opt/ai-apps/forgejo/backup.log 2>&1
set -euo pipefail
TS=$(date +%Y%m%d-%H%M%S)
DEST=/opt/backups/forgejo
mkdir -p "$DEST"
echo "[$(date -Iseconds)] backup start"
# Postgres dump
docker exec forgejo-db pg_dump -U forgejo forgejo | gzip > "$DEST/forgejo-db-$TS.sql.gz"
echo " db dump: $(ls -lh $DEST/forgejo-db-$TS.sql.gz | awk '{print $5}')"
# Data volume tar
docker run --rm \
-v forgejo_forgejo-data:/data:ro \
-v "$DEST":/backup \
alpine \
tar -czf "/backup/forgejo-data-$TS.tar.gz" -C /data .
echo " data tar: $(ls -lh $DEST/forgejo-data-$TS.tar.gz | awk '{print $5}')"
# Retention: 14 days
find "$DEST" -type f -mtime +14 -delete
echo "[$(date -Iseconds)] backup complete"