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*_*/
192 lines
5.9 KiB
Bash
Executable File
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
|