135 lines
3.7 KiB
Bash
135 lines
3.7 KiB
Bash
#!/bin/bash
|
|
set -e
|
|
|
|
# ============================================
|
|
# CONFIG
|
|
# ============================================
|
|
BASE_DIR="/home/Dejan/Docker/Netbird-compose"
|
|
BACKUP_DIR="${BASE_DIR}/backup"
|
|
|
|
cd "$BASE_DIR"
|
|
|
|
# ============================================
|
|
# SELECT BACKUP FILE
|
|
# ============================================
|
|
if [[ -n "$1" ]]; then
|
|
BACKUP_FILE="$1"
|
|
# If a relative path is passed, prepend BACKUP_DIR if file not found
|
|
if [[ ! -f "$BACKUP_FILE" ]]; then
|
|
if [[ -f "${BACKUP_DIR}/$BACKUP_FILE" ]]; then
|
|
BACKUP_FILE="${BACKUP_DIR}/$BACKUP_FILE"
|
|
fi
|
|
fi
|
|
else
|
|
# Auto-select latest backup
|
|
BACKUP_FILE=$(ls -1t "${BACKUP_DIR}"/netbird_backup_*.tar.gz 2>/dev/null | head -n 1 || true)
|
|
fi
|
|
|
|
if [[ -z "$BACKUP_FILE" || ! -f "$BACKUP_FILE" ]]; then
|
|
echo "ERROR: Backup file not found."
|
|
echo "Usage: $0 [path/to/netbird_backup_*.tar.gz]"
|
|
exit 1
|
|
fi
|
|
|
|
echo "[*] Using backup file: $BACKUP_FILE"
|
|
|
|
# ============================================
|
|
# PREPARE TEMP DIR
|
|
# ============================================
|
|
TIMESTAMP=$(date +"%Y-%m-%d_%H-%M-%S")
|
|
TEMP_DIR="/tmp/netbird_restore_${TIMESTAMP}"
|
|
|
|
echo "[*] Creating temp directory: $TEMP_DIR"
|
|
mkdir -p "$TEMP_DIR"
|
|
|
|
echo "[*] Extracting backup archive..."
|
|
tar -xzf "$BACKUP_FILE" -C "$TEMP_DIR"
|
|
|
|
# ============================================
|
|
# STOP CURRENT STACK
|
|
# ============================================
|
|
echo "[*] Stopping current NetBird stack (if running)..."
|
|
docker compose down || true
|
|
|
|
# ============================================
|
|
# RESTORE DOCKER VOLUMES
|
|
# ============================================
|
|
VOLUMES=(
|
|
"netbird_zdb_data"
|
|
"netbird_management"
|
|
"netbird_zitadel_certs"
|
|
)
|
|
|
|
for VOL in "${VOLUMES[@]}"; do
|
|
VOL_ARCHIVE="${TEMP_DIR}/${VOL}.tar.gz"
|
|
if [[ ! -f "$VOL_ARCHIVE" ]]; then
|
|
echo "[!] WARNING: Volume archive not found for ${VOL} at ${VOL_ARCHIVE}, skipping..."
|
|
continue
|
|
fi
|
|
|
|
echo "[*] Ensuring Docker volume exists: $VOL"
|
|
if ! docker volume ls -q | grep -q "^${VOL}$"; then
|
|
docker volume create "$VOL" >/dev/null
|
|
fi
|
|
|
|
echo "[*] Restoring volume: $VOL"
|
|
docker run --rm \
|
|
-v "${VOL}:/volume" \
|
|
-v "${TEMP_DIR}:/backup" \
|
|
alpine sh -c "cd /volume && tar -xzf /backup/$(basename "$VOL_ARCHIVE")"
|
|
done
|
|
|
|
# ============================================
|
|
# RESTORE CONFIG FILES
|
|
# ============================================
|
|
echo "[*] Restoring configuration files to ${BASE_DIR}..."
|
|
|
|
# docker-compose.yml
|
|
if [[ -f "${TEMP_DIR}/docker-compose.yml" ]]; then
|
|
cp -a "${TEMP_DIR}/docker-compose.yml" "${BASE_DIR}/"
|
|
fi
|
|
|
|
# *.env files
|
|
if ls "${TEMP_DIR}"/*.env >/dev/null 2>&1; then
|
|
cp -a "${TEMP_DIR}"/*.env "${BASE_DIR}/"
|
|
fi
|
|
|
|
# management.json
|
|
if [[ -f "${TEMP_DIR}/management.json" ]]; then
|
|
cp -a "${TEMP_DIR}/management.json" "${BASE_DIR}/"
|
|
fi
|
|
|
|
# turnserver.conf
|
|
if [[ -f "${TEMP_DIR}/turnserver.conf" ]]; then
|
|
cp -a "${TEMP_DIR}/turnserver.conf" "${BASE_DIR}/"
|
|
fi
|
|
|
|
# machinekey directory
|
|
if [[ -d "${TEMP_DIR}/machinekey" ]]; then
|
|
rm -rf "${BASE_DIR}/machinekey"
|
|
cp -a "${TEMP_DIR}/machinekey" "${BASE_DIR}/"
|
|
fi
|
|
|
|
# traefik-stack directory (if present in backup)
|
|
if [[ -d "${TEMP_DIR}/traefik-stack" ]]; then
|
|
rm -rf "${BASE_DIR}/traefik-stack"
|
|
cp -a "${TEMP_DIR}/traefik-stack" "${BASE_DIR}/"
|
|
fi
|
|
|
|
# ============================================
|
|
# CLEAN UP TEMP
|
|
# ============================================
|
|
echo "[*] Cleaning up temporary directory..."
|
|
rm -rf "$TEMP_DIR"
|
|
|
|
# ============================================
|
|
# START STACK
|
|
# ============================================
|
|
echo "[*] Starting NetBird stack..."
|
|
docker compose up -d
|
|
|
|
echo "=========================================================="
|
|
echo "Restore completed from: $BACKUP_FILE"
|
|
echo "NetBird + Zitadel stack should now be running again."
|
|
echo "=========================================================="
|