61 lines
2.2 KiB
Bash
Executable File
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"
|