Files
nextcloud-selfhosted/scripts/restore.sh

78 lines
2.7 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
source "$REPO_ROOT/.env"
DATA_ROOT="${DATA_ROOT:-/opt/docker-data}"
BACKUP_DIR="/opt/backups"
# ------------------------------------------------------------------
# Usage
# ------------------------------------------------------------------
if [ $# -lt 1 ]; then
echo "Usage: $0 <date>"
echo " e.g.: $0 2026-03-22"
echo ""
echo "Expects these files in $BACKUP_DIR:"
echo " nextcloud-db-<date>.sql"
echo " nextcloud-data-<date>.tar.gz"
echo " gitea-<date>.tar.gz"
exit 1
fi
DATE="$1"
DB_DUMP="$BACKUP_DIR/nextcloud-db-$DATE.sql"
NC_ARCHIVE="$BACKUP_DIR/nextcloud-data-$DATE.tar.gz"
GITEA_ARCHIVE="$BACKUP_DIR/gitea-$DATE.tar.gz"
for f in "$DB_DUMP" "$NC_ARCHIVE" "$GITEA_ARCHIVE"; do
if [ ! -f "$f" ]; then
echo "ERROR: $f not found."
exit 1
fi
done
echo "==> Restoring from backup date: $DATE"
echo " This will overwrite current data. Press Ctrl+C within 5s to abort."
sleep 5
# ------------------------------------------------------------------
# Stop services
# ------------------------------------------------------------------
echo "==> Stopping services..."
docker compose -f "$REPO_ROOT/nextcloud/docker-compose.yml" --env-file "$REPO_ROOT/.env" down
docker compose -f "$REPO_ROOT/gitea/docker-compose.yml" --env-file "$REPO_ROOT/.env" down
# ------------------------------------------------------------------
# Restore Nextcloud data
# ------------------------------------------------------------------
echo "==> Restoring Nextcloud data..."
tar -xzf "$NC_ARCHIVE" -C "$DATA_ROOT"
# ------------------------------------------------------------------
# Restore Gitea data
# ------------------------------------------------------------------
echo "==> Restoring Gitea data..."
tar -xzf "$GITEA_ARCHIVE" -C "$DATA_ROOT"
# ------------------------------------------------------------------
# Start Postgres and restore DB
# ------------------------------------------------------------------
echo "==> Starting Postgres for DB restore..."
docker compose -f "$REPO_ROOT/nextcloud/docker-compose.yml" --env-file "$REPO_ROOT/.env" up -d postgres
echo " -> Waiting for Postgres to be ready..."
sleep 5
echo "==> Restoring Nextcloud database..."
docker exec -i nextcloud-postgres psql -U nextcloud < "$DB_DUMP"
# ------------------------------------------------------------------
# Start all services
# ------------------------------------------------------------------
echo "==> Starting all services..."
docker compose -f "$REPO_ROOT/nextcloud/docker-compose.yml" --env-file "$REPO_ROOT/.env" up -d
docker compose -f "$REPO_ROOT/gitea/docker-compose.yml" --env-file "$REPO_ROOT/.env" up -d
echo "==> Restore complete."