#!/bin/bash # Script de sauvegarde des données critiques LeCoffre Node # Sauvegarde Bitcoin, BlindBit, SDK Storage et SDK Signer set -e # Couleurs pour l'affichage RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color BACKUP_DIR="./backups" TIMESTAMP=$(date +%Y%m%d_%H%M%S) BACKUP_NAME="lecoffre_backup_${TIMESTAMP}" HOST_UID=$(id -u) HOST_GID=$(id -g) echo -e "${BLUE}========================================${NC}" echo -e "${BLUE} LeCoffre Node - Data Backup${NC}" echo -e "${BLUE}========================================${NC}" echo # Créer le répertoire de sauvegarde mkdir -p "$BACKUP_DIR" echo -e "${YELLOW}Creating backup: $BACKUP_NAME${NC}" # Fonction pour sauvegarder un volume Docker backup_volume() { local volume_name=$1 local backup_path=$2 local description=$3 echo -e "${BLUE}Backing up $description...${NC}" if docker volume inspect "$volume_name" >/dev/null 2>&1; then docker run --rm \ -e HOST_UID="$HOST_UID" -e HOST_GID="$HOST_GID" \ -v "$volume_name":/source:ro \ -v "$(pwd)/$BACKUP_DIR/$BACKUP_NAME":/backup \ alpine:latest \ sh -c "mkdir -p /backup$backup_path && cp -r /source/* /backup$backup_path/ 2>/dev/null || true && chmod -R 755 /backup$backup_path 2>/dev/null || true && chown -R \$HOST_UID:\$HOST_GID /backup$backup_path 2>/dev/null || true" echo -e "${GREEN}✓ $description backed up${NC}" else echo -e "${YELLOW}⚠ Volume $volume_name not found${NC}" fi } # Créer le répertoire de sauvegarde mkdir -p "$BACKUP_DIR/$BACKUP_NAME" # Sauvegarder les volumes critiques backup_volume "4nk_node_bitcoin_data" "/bitcoin" "Bitcoin Signet Data" backup_volume "4nk_node_blindbit_data" "/blindbit" "BlindBit Oracle Data" backup_volume "4nk_node_sdk_data" "/sdk" "SDK Relay Data" backup_volume "4nk_node_sdk_storage_data" "/sdk_storage" "SDK Storage Data" backup_volume "4nk_node_grafana_data" "/grafana" "Grafana Data" backup_volume "4nk_node_loki_data" "/loki" "Loki Data" # Créer une archive compressée echo -e "${BLUE}Creating compressed archive...${NC}" cd "$BACKUP_DIR" tar -czf "${BACKUP_NAME}.tar.gz" "$BACKUP_NAME" --ignore-failed-read 2>/dev/null || true rm -rf "$BACKUP_NAME" || sudo rm -rf "$BACKUP_NAME" || true cd .. # Afficher les informations de sauvegarde BACKUP_SIZE=$(du -h "$BACKUP_DIR/${BACKUP_NAME}.tar.gz" | cut -f1) echo echo -e "${GREEN}✅ Backup completed successfully!${NC}" echo -e "${GREEN}Backup file: $BACKUP_DIR/${BACKUP_NAME}.tar.gz${NC}" echo -e "${GREEN}Backup size: $BACKUP_SIZE${NC}" echo echo -e "${BLUE}To restore this backup:${NC}" echo -e "${YELLOW} ./scripts/restore-data.sh $BACKUP_NAME${NC}" echo