Files
2026-03-22 12:29:58 +01:00

61 lines
2.2 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
set -a
eval "$(grep -v '^#' "$REPO_ROOT/.env" | grep -v '^$' | grep '^[A-Za-z_][A-Za-z_0-9]*=' )"
set +a
set -a
eval "$(grep -v '^#' "$REPO_ROOT/nextcloud/.env" | grep -v '^$' | grep '^[A-Za-z_][A-Za-z_0-9]*=' )"
set +a
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 "$POSTGRES_USER" > "$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
# ------------------------------------------------------------------
# Caddy TLS certificates
# ------------------------------------------------------------------
echo " -> Archiving Caddy TLS data..."
tar -czf "$BACKUP_DIR/caddy-$DATE.tar.gz" \
-C "$DATA_ROOT" caddy/data
# ------------------------------------------------------------------
# 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 * * * $REPO_ROOT/scripts/backup.sh >> /var/log/backup.log 2>&1"