ecom-store/scripts/backups/restore-vault.sh
Iris Florencio 9c2f7ff7b4 chore: triagem de arquivos untracked (60+ → 0)
Adiciona ao repo os scripts e configs reais do motor que estavam fora do git,
e remove arquivos legados/abandonados.

Adicionados (30):
- scripts/docker-compose.m5.yml, openwa-compose.yml, minio-compose.yml
- scripts/openwa.env (sem secrets)
- scripts/{entrypoint,saleor-entrypoint,saleor-start}.sh
- scripts/{chatwoot-setup,compliance-check,health-check,resumo-diario}.sh
- scripts/{insert_workflow,telegram_user_login,telegram_user_monitor}.py
- scripts/requirements.txt
- scripts/traefik-conf/{traefik.yml,dynamic-config.yml}
- scripts/compliance/, scripts/calculators/, scripts/backups/
- scripts/{README.md,README-INSTALL.md,WHATSAPP-SETUP.md,.gitignore}
- .gitignore (atualizado)

Removidos (ja' em backup/untracked-lixo-2026-07-06/):
- agents/, crm/, hermes_skills_backup/, api-complive/, docs/ (legados)
- scripts/{wrapper.py,wrapper.sh}
- scripts/docker-compose.m5.yml.backup, traefik-conf/routes.yml.bak2
- scripts/saleor-media/RSA_*.{bak,old_*}
- scripts/n8n-workflows/webhook-saleor.json.bak2
- scripts/backups/20260622_0300/saleor_db.sql
- integracao_completa.sh, monitoramento_vps.sh
- ruvector.db (vazio)

Ignorados via .gitignore:
- vault/ (Obsidian KB)
- skills/ (duplicado de ~/.hermes/skills/)
- scripts/{saleor-media,traefik-acme,yt-pub-livesx,minio,n8n-workflows,skills}/
- scripts/backups/2026*_*/
2026-07-06 18:50:26 -03:00

192 lines
5.9 KiB
Bash
Executable File

#!/bin/bash
# ============================================================
# restore-vault.sh — Restaurar backup do Vault Obsidian
# Uso: ./restore-vault.sh [YYYYMMDD_HHMMSS]
# ./restore-vault.sh list → lista backups disponíveis
# ./restore-vault.sh latest → restaura o mais recente
# ============================================================
set -e
VAULT_DIR="C:/Users/Iris/Vaults/ecommerce-kb"
BACKUP_DIR="C:/Users/Iris/backups/vault"
LOG_FILE="$BACKUP_DIR/restore.log"
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'
log() {
echo -e "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE"
}
# Mostrar ajuda
show_help() {
cat << EOF
${GREEN}restore-vault.sh — Restaurar Vault Obsidian${NC}
${YELLOW}Uso:${NC}
$0 list Lista backups disponíveis
$0 latest Restaura o backup mais recente
$0 <timestamp> Restaura backup específico (ex: 20250617_020000)
$0 dry-run <timestamp> Simula restauração (sem sobrescrever)
${YELLOW}Exemplos:${NC}
$0 list
$0 latest
$0 20250617_020000
${YELLOW}Arquivos de backup:${NC}
$BACKUP_DIR/vault_YYYYMMDD_HHMMSS.tar.gz
EOF
}
# Listar backups disponíveis
list_backups() {
log "${BLUE}=== BACKUPS DISPONÍVEIS ===${NC}"
echo ""
if ls "$BACKUP_DIR"/vault_*.tar.gz 1>/dev/null 2>&1; then
echo -e "${GREEN}ID | Timestamp | Tamanho | Data${NC}"
echo -e "${GREEN}----|---------------------|---------|----------------${NC}"
ID=1
for file in $(ls -t "$BACKUP_DIR"/vault_*.tar.gz); do
TIMESTAMP=$(basename "$file" | sed 's/vault_\(.*\)\.tar\.gz/\1/')
SIZE=$(du -h "$file" | cut -f1)
DATE=$(date -r "$file" '+%Y-%m-%d %H:%M:%S' 2>/dev/null || echo "unknown")
printf "${GREEN}%3d | %s | %6s | %s${NC}\n" "$ID" "$TIMESTAMP" "$SIZE" "$DATE"
ID=$((ID + 1))
done
echo ""
log "Total: $(ls "$BACKUP_DIR"/vault_*.tar.gz | wc -l) backup(s)"
else
log "${RED}Nenhum backup encontrado em $BACKUP_DIR${NC}"
exit 1
fi
}
# Restaurar backup específico
restore_backup() {
local TIMESTAMP="$1"
local DRY_RUN="${2:-false}"
# Encontrar arquivo de backup
if [ -n "$TIMESTAMP" ]; then
BACKUP_FILE="$BACKUP_DIR/vault_${TIMESTAMP}.tar.gz"
else
# Pegar o mais recente
BACKUP_FILE=$(ls -t "$BACKUP_DIR"/vault_*.tar.gz 2>/dev/null | head -1)
TIMESTAMP=$(basename "$BACKUP_FILE" | sed 's/vault_\(.*\)\.tar\.gz/\1/')
fi
if [ ! -f "$BACKUP_FILE" ]; then
log "${RED}ERRO: Backup não encontrado: $(basename "$BACKUP_FILE")${NC}"
log "Use '$0 list' para ver backups disponíveis"
exit 1
fi
log "${YELLOW}=== INICIANDO RESTAURAÇÃO ===${NC}"
log "Backup: $(basename "$BACKUP_FILE")"
log "Tamanho: $(du -h "$BACKUP_FILE" | cut -f1)"
log "MD5: $(md5sum "$BACKUP_FILE" | cut -d' ' -f1)"
if [ "$DRY_RUN" = "true" ]; then
log "${YELLOW}[DRY-RUN] Simulando extração...${NC}"
tar -tzf "$BACKUP_FILE" | head -20
log "${YELLOW}[DRY-RUN] Total de arquivos: $(tar -tzf "$BACKUP_FILE" | wc -l)${NC}"
return
fi
# Perguntar confirmação
echo ""
read -p "Isso irá substituir o vault atual em $VAULT_DIR. Continuar? (s/N): " CONFIRM
if [ "$CONFIRM" != "s" ] && [ "$CONFIRM" != "S" ]; then
log "Resturação cancelada pelo usuário"
exit 0
fi
# Criar backup do estado atual antes de restaurar
if [ -d "$VAULT_DIR" ]; then
PRE_RESTORE="$BACKUP_DIR/pre_restore_${DATE}_$(date +%Y%m%d_%H%M%S).tar.gz"
log "Criando backup do estado atual..."
tar -czf "$PRE_RESTORE" -C "$(dirname "$VAULT_DIR")" "$(basename "$VAULT_DIR")" 2>/dev/null || true
log "Backup de segurança: $(basename "$PRE_RESTORE")"
fi
# Extrair backup
log "Extraindo backup..."
# Backup do vault atual (se existir)
if [ -d "$VAULT_DIR" ]; then
TEMP_VAULT="${VAULT_DIR}_temp_$$"
mv "$VAULT_DIR" "$TEMP_VAULT"
fi
# Extrair novo backup
mkdir -p "$VAULT_DIR"
if tar -xzf "$BACKUP_FILE" -C "$(dirname "$VAULT_DIR")"; then
# O tar extrai para ecommerce-kb/ dentro do diretório pai
EXTRACTED_DIR="$(dirname "$VAULT_DIR")/$(basename "$VAULT_DIR")"
if [ -d "$EXTRACTED_DIR" ] && [ "$EXTRACTED_DIR" != "$VAULT_DIR" ]; then
# Mover conteúdo extraído para o local correto
mv "$EXTRACTED_DIR"/* "$VAULT_DIR/" 2>/dev/null || true
rm -rf "$EXTRACTED_DIR"
fi
# Limpar vault temporário
if [ -n "$TEMP_VAULT" ]; then
rm -rf "$TEMP_VAULT"
fi
log "${GREEN}=== RESTAURAÇÃO CONCLUÍDA COM SUCESSO ===${NC}"
log "Vault restaurado: $VAULT_DIR"
log "Arquivos: $(find "$VAULT_DIR" -type f 2>/dev/null | wc -l)"
log "Backup usado: $(basename "$BACKUP_FILE")"
# Atualizar status
if [ -f "$BACKUP_DIR/latest_status.json" ]; then
log "Arquivo de status atualizado."
fi
else
# Restaurar estado anterior em caso de erro
if [ -n "$TEMP_VAULT" ]; then
mv "$TEMP_VAULT" "$VAULT_DIR"
fi
log "${RED}ERRO: Falha ao extrair backup${NC}"
exit 1
fi
}
# ==================== MAIN ====================
case "${1:-}" in
list|l|ls)
list_backups
;;
latest)
restore_backup ""
;;
dry-run)
if [ -z "$2" ]; then
log "${RED}ERRO: Especifique o timestamp para dry-run${NC}"
exit 1
fi
restore_backup "$2" "true"
;;
help|-h|--help)
show_help
;;
"")
if [ -f "$BACKUP_DIR/latest_status.json" ]; then
cat "$BACKUP_DIR/latest_status.json"
fi
echo ""
show_help
;;
*)
restore_backup "$1"
;;
esac