feat: configurar replicacao automatica Gitea, GitHub e banco para marcos-vps
This commit is contained in:
Executable
+112
@@ -0,0 +1,112 @@
|
||||
#!/bin/bash
|
||||
# ==============================================================================
|
||||
# SCRIPT DE REPLICAÇÃO AUTOMÁTICA: HOSTINGER -> MARCOS-VPS (TRACKSTEEL DB)
|
||||
# ==============================================================================
|
||||
# Sincroniza schemas de negócio (TS_ERP, gpi, tracksteel, rdo) e storage
|
||||
# da VPS Hostinger local para o Supabase na Marcos-VPS (100.97.2.16).
|
||||
# ==============================================================================
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
CYAN='\033[0;36m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
RED='\033[0;31m'
|
||||
NC='\033[0m'
|
||||
|
||||
LOG_DIR="/root/Apps/TrackSteelAPP/scripts/logs"
|
||||
mkdir -p "$LOG_DIR"
|
||||
LOG_FILE="$LOG_DIR/sync_db_$(date +'%Y%m%d').log"
|
||||
|
||||
log() {
|
||||
local msg="[$(date +'%Y-%m-%d %H:%M:%S')] $1"
|
||||
echo -e "$1"
|
||||
echo "$msg" >> "$LOG_FILE"
|
||||
}
|
||||
|
||||
log "\n${CYAN}======================================================${NC}"
|
||||
log "${CYAN}🔄 Iniciando Replicação de Banco de Dados -> marcos-vps${NC}"
|
||||
log "${CYAN}======================================================${NC}"
|
||||
|
||||
# Configurações de Conexão
|
||||
DEST_IP="100.97.2.16"
|
||||
SRC_DB_CONTAINER="supabase-db-h0oggskgs0ws0sco8kc4s8ws"
|
||||
DEST_DB_CONTAINER="supabase-db-rjbxu55kggzc59d4cmo133cf"
|
||||
|
||||
# Teste de conectividade SSH
|
||||
log "${YELLOW}📡 Verificando conexão com marcos-vps ($DEST_IP)...${NC}"
|
||||
if ! ssh -o BatchMode=yes -o ConnectTimeout=5 "root@$DEST_IP" "true" 2>/dev/null; then
|
||||
log "${RED}❌ ERRO: Não foi possível conectar via SSH à marcos-vps ($DEST_IP). Replicação abortada.${NC}"
|
||||
exit 1
|
||||
fi
|
||||
log "${GREEN}✅ Conectividade com marcos-vps confirmada.${NC}"
|
||||
|
||||
# Lista de Schemas a sincronizar
|
||||
SCHEMAS=('TS_ERP' 'gpi' 'tracksteel' 'rdo')
|
||||
|
||||
for schema in "${SCHEMAS[@]}"; do
|
||||
# Verifica se o schema existe no banco local
|
||||
EXISTS=$(docker exec "$SRC_DB_CONTAINER" psql -U postgres -d postgres -tAc \
|
||||
"SELECT 1 FROM pg_namespace WHERE nspname = '$schema';" 2>/dev/null || echo "0")
|
||||
|
||||
if [ "$EXISTS" = "1" ]; then
|
||||
log "${YELLOW}📦 Sincronizando schema: $schema...${NC}"
|
||||
TMP_DUMP="/tmp/sync_${schema}_$$.dump"
|
||||
|
||||
# 1. Gerar Dump local comprimido
|
||||
docker exec -i "$SRC_DB_CONTAINER" pg_dump -U postgres -d postgres -n "\"$schema\"" -Fc > "$TMP_DUMP"
|
||||
|
||||
# 2. Transferir para marcos-vps via SCP
|
||||
scp -q -o BatchMode=yes -o ConnectTimeout=5 "$TMP_DUMP" "root@$DEST_IP:$TMP_DUMP"
|
||||
|
||||
# 3. Restaurar dentro do container de destino
|
||||
ssh -o BatchMode=yes -o ConnectTimeout=5 "root@$DEST_IP" \
|
||||
"docker cp '$TMP_DUMP' '$DEST_DB_CONTAINER:$TMP_DUMP' && \
|
||||
docker exec '$DEST_DB_CONTAINER' pg_restore -U postgres -d postgres --clean --if-exists --no-owner --no-privileges '$TMP_DUMP' && \
|
||||
rm -f '$TMP_DUMP' && \
|
||||
docker exec '$DEST_DB_CONTAINER' rm -f '$TMP_DUMP'"
|
||||
|
||||
# 4. Limpar arquivo local
|
||||
rm -f "$TMP_DUMP"
|
||||
log "${GREEN} ↳ Schema $schema replicado com sucesso.${NC}"
|
||||
fi
|
||||
done
|
||||
|
||||
# Sincronização de Metadados de Storage (buckets e objects)
|
||||
log "${YELLOW}📁 Sincronizando metadados de Storage (buckets & objects)...${NC}"
|
||||
STORAGE_SQL="/tmp/sync_storage_$$.sql"
|
||||
docker exec -i "$SRC_DB_CONTAINER" pg_dump -U postgres -d postgres -t storage.buckets -t storage.objects --data-only --on-conflict-do-nothing > "$STORAGE_SQL" 2>/dev/null || true
|
||||
|
||||
if [ -s "$STORAGE_SQL" ]; then
|
||||
scp -q -o BatchMode=yes -o ConnectTimeout=5 "$STORAGE_SQL" "root@$DEST_IP:$STORAGE_SQL"
|
||||
ssh -o BatchMode=yes -o ConnectTimeout=5 "root@$DEST_IP" \
|
||||
"docker exec -i '$DEST_DB_CONTAINER' psql -U postgres -d postgres < '$STORAGE_SQL' >/dev/null 2>&1 && rm -f '$STORAGE_SQL'"
|
||||
rm -f "$STORAGE_SQL"
|
||||
log "${GREEN} ↳ Metadados de storage sincronizados.${NC}"
|
||||
else
|
||||
rm -f "$STORAGE_SQL"
|
||||
fi
|
||||
|
||||
# Sincronização de arquivos físicos de Storage (MinIO)
|
||||
SRC_STORAGE="/data/coolify/services/h0oggskgs0ws0sco8kc4s8ws/volumes/storage/"
|
||||
DEST_STORAGE="/data/coolify/services/rjbxu55kggzc59d4cmo133cf/volumes/storage/"
|
||||
|
||||
if [ -d "$SRC_STORAGE" ]; then
|
||||
log "${YELLOW}☁️ Sincronizando arquivos físicos do Storage (MinIO)...${NC}"
|
||||
rsync -aqz --delete -e "ssh -o BatchMode=yes -o ConnectTimeout=5" "$SRC_STORAGE" "root@$DEST_IP:$DEST_STORAGE" || true
|
||||
log "${GREEN} ↳ Arquivos do Storage espelhados com sucesso.${NC}"
|
||||
fi
|
||||
|
||||
# Validação final de tabelas em TS_ERP
|
||||
ORIG_COUNT=$(docker exec "$SRC_DB_CONTAINER" psql -U postgres -d postgres -tAc "SELECT count(*) FROM pg_tables WHERE schemaname = 'TS_ERP';")
|
||||
DEST_COUNT=$(ssh -o BatchMode=yes -o ConnectTimeout=5 "root@$DEST_IP" "docker exec '$DEST_DB_CONTAINER' psql -U postgres -d postgres -tAc \"SELECT count(*) FROM pg_tables WHERE schemaname = 'TS_ERP';\"")
|
||||
|
||||
log "${CYAN}📊 Validação de Integridade:${NC}"
|
||||
log " - Tabelas TS_ERP (Origem Hostinger): $ORIG_COUNT"
|
||||
log " - Tabelas TS_ERP (Destino marcos-vps): $DEST_COUNT"
|
||||
|
||||
if [ "$ORIG_COUNT" = "$DEST_COUNT" ]; then
|
||||
log "${GREEN}✨ Replicação de banco concluída com 100% de paridade!${NC}\n"
|
||||
else
|
||||
log "${RED}⚠️ ATENÇÃO: Contagem de tabelas diferente entre origem e destino!${NC}\n"
|
||||
fi
|
||||
@@ -22,14 +22,25 @@ else
|
||||
git commit -m "$MSG"
|
||||
fi
|
||||
|
||||
echo -e "${CYAN}📤 Sincronizando com o repositório remoto (git push)...${NC}"
|
||||
git push
|
||||
echo -e "${CYAN}📤 Sincronizando com os repositórios remotos (Gitea e GitHub)...${NC}"
|
||||
git push origin main
|
||||
|
||||
echo -e "${YELLOW}🔄 Disparando Deploy via API Oficial no Coolify...${NC}"
|
||||
echo -e "\n${YELLOW}🔄 Disparando Deploy via API Oficial no Coolify (Hostinger)...${NC}"
|
||||
COOLIFY_TOKEN="19|ZJKUbBgyeNGcKrVkMI5gJ1uMHDC39d9VIShHL473a60d9882"
|
||||
TRACKSTEEL_UUID="i8o44gggg00o88ccc8oo48kk"
|
||||
curl -s -X GET "https://painel.reifonas.cloud/api/v1/deploy?uuid=${TRACKSTEEL_UUID}&force=false" \
|
||||
-H "Authorization: Bearer $COOLIFY_TOKEN"
|
||||
echo -e "\n${GREEN}🚀 Deploy local (Hostinger) engatilhado com sucesso!${NC}"
|
||||
|
||||
echo -e "\n${GREEN}🚀 Deploy oficial via API engatilhado com sucesso!${NC}"
|
||||
echo -e "${GREEN}🏁 Ciclo concluído com sucesso.${NC}\n"
|
||||
echo -e "\n${YELLOW}🌐 Sincronizando código e atualizando app na marcos-vps (100.97.2.16)...${NC}"
|
||||
ssh -o BatchMode=yes -o ConnectTimeout=5 root@100.97.2.16 \
|
||||
"cd /root/Apps/TracksteelApp && git pull origin main && docker restart tracksteel-app" \
|
||||
&& echo -e "${GREEN}✅ App na marcos-vps atualizado com sucesso!${NC}" \
|
||||
|| echo -e "${YELLOW}⚠️ Aviso: Falha ao atualizar app na marcos-vps via SSH.${NC}"
|
||||
|
||||
echo -e "\n${YELLOW}🗄️ Replicando Banco de Dados e Storage para marcos-vps...${NC}"
|
||||
if [ -f "/root/Apps/TrackSteelAPP/scripts/sync_db_to_marcos.sh" ]; then
|
||||
/root/Apps/TrackSteelAPP/scripts/sync_db_to_marcos.sh
|
||||
fi
|
||||
|
||||
echo -e "\n${GREEN}🏁 Ciclo completo de deploy e replicação concluído com sucesso!${NC}\n"
|
||||
|
||||
Reference in New Issue
Block a user