This commit is contained in:
2026-03-22 12:05:01 +01:00
parent befb32129f
commit 58625602c9
4 changed files with 212 additions and 0 deletions

48
backup.sh Executable file
View File

@@ -0,0 +1,48 @@
#!/usr/bin/env bash
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source "$SCRIPT_DIR/.env"
DATA_ROOT="${DATA_ROOT:-/opt/docker-data}"
BACKUP_DIR="/opt/backups"
DATE=$(date +%Y-%m-%d)
KEEP_DAYS=7
mkdir -p "$BACKUP_DIR"
echo "==> Starting backup ($DATE)..."
# ------------------------------------------------------------------
# Nextcloud Postgres dump
# ------------------------------------------------------------------
echo " -> Dumping Nextcloud Postgres..."
docker exec nextcloud-postgres pg_dumpall -U nextcloud > "$BACKUP_DIR/nextcloud-db-$DATE.sql"
# ------------------------------------------------------------------
# Nextcloud data
# ------------------------------------------------------------------
echo " -> Archiving Nextcloud data..."
tar -czf "$BACKUP_DIR/nextcloud-data-$DATE.tar.gz" \
-C "$DATA_ROOT" nextcloud/data nextcloud/html/config
# ------------------------------------------------------------------
# Gitea data
# ------------------------------------------------------------------
echo " -> Archiving Gitea data..."
tar -czf "$BACKUP_DIR/gitea-$DATE.tar.gz" \
-C "$DATA_ROOT" gitea/data gitea/config
# ------------------------------------------------------------------
# Rotate old backups
# ------------------------------------------------------------------
echo " -> Removing backups older than $KEEP_DAYS days..."
find "$BACKUP_DIR" -type f -name "*.sql" -mtime +$KEEP_DAYS -delete
find "$BACKUP_DIR" -type f -name "*.tar.gz" -mtime +$KEEP_DAYS -delete
echo "==> Backup complete. Files in $BACKUP_DIR:"
ls -lh "$BACKUP_DIR"/*"$DATE"* 2>/dev/null || echo " (no files found)"
echo ""
echo "To schedule daily backups, add to crontab (crontab -e):"
echo " 0 3 * * * $SCRIPT_DIR/backup.sh >> /var/log/backup.log 2>&1"