diff --git a/frontend/start.sh b/frontend/start.sh index de2d86c..338b8e4 100644 --- a/frontend/start.sh +++ b/frontend/start.sh @@ -1,47 +1,72 @@ #!/bin/sh set -e -echo "🔎 --- DIAGNÓSTICO DE REDE ---" -echo "🌐 Tentando resolver o host do banco..." -# Tenta descobrir o IP do host do banco -if command -v getent >/dev/null; then - echo "Host: $DATABASE_URL" - # Extrai o host da URL (tudo entre @ e :) - DB_HOST=$(echo $DATABASE_URL | sed -e 's/.*@//' -e 's/:.*//') - echo "🔍 Resolvendo IP para: $DB_HOST" - getent hosts $DB_HOST || echo "⚠️ Não foi possível resolver o nome do host via DNS interno." -else - echo "⚠️ 'getent' não disponível para diagnóstico." -fi +echo "🔎 --- SUPER DIAGNÓSTICO DE CONEXÃO ---" -# Função para esperar o banco de dados +# Extrai o host da URL +echo "🌐 DATABASE_URL configurada. Testando comunicação..." +DB_HOST=$(echo $DATABASE_URL | sed -e 's/.*@//' -e 's/:.*//') +DB_PORT=$(echo $DATABASE_URL | sed -e 's/.*://' -e 's/\/.*//' -e 's/\?.*//') + +echo "📡 Host detectado: $DB_HOST na porta: $DB_PORT" + +# Tenta um "ping" na porta do banco usando o próprio Node.js (porque nc pode não existir) +node -e " +const net = require('net'); +const client = net.createConnection({ host: '$DB_HOST', port: $DB_PORT }, () => { + console.log('✅ SUCESSO: A porta $DB_PORT está aberta no host $DB_HOST!'); + process.exit(0); +}); +client.on('error', (err) => { + console.log('❌ ERRO DE REDE: Não foi possível abrir conexão na porta $DB_PORT: ' + err.message); + process.exit(1); +}); +setTimeout(() => { console.log('⏱️ TIMEOUT: O banco não respondeu na porta $DB_PORT'); process.exit(1); }, 5000); +" || echo "⚠️ O banco nível de rede ainda não responde." + +# Função para tentar conectar com o Prisma e MOSTRAR o erro wait_for_db() { - echo "⏳ Aguardando banco de dados..." - max_retries=20 + echo "⏳ Tentando login no banco de dados..." + max_retries=10 count=0 - while ! ./node_modules/.bin/prisma db push --dry-run > /dev/null 2>&1; do + while true; do count=$((count + 1)) + echo "🔄 Tentativa $count/$max_retries..." + + # Tenta o dry-run e captura o erro real + PRISMA_ERR=$(./node_modules/.bin/prisma db push --dry-run 2>&1) + PRISMA_STATUS=$? + + if [ $PRISMA_STATUS -eq 0 ]; then + echo "✅ SUCESSO TOTAL! Banco de dados conectado e pronto." + break + fi + + echo "❌ FALHA NA CONEXÃO. O Prisma disse:" + echo "--------------------------------------------------" + echo "$PRISMA_ERR" | grep -E "P1001|P1002|P1003|P1010|P2002|Authentication|denied|Database" || echo "$PRISMA_ERR" + echo "--------------------------------------------------" + if [ $count -gt $max_retries ]; then - echo "❌ Erro: O Banco de Dados continua inalcançável após $max_retries tentativas." - echo "💡 DICA: Verifique se o Banco e o Site estão na MESMA 'Docker Network' no Dokploy." + echo "❌ Desistindo após $max_retries tentativas." exit 1 fi - echo "🔄 Tentativa $count/$max_retries: Banco ainda offline ou invisível..." - sleep 3 + + echo "😴 Aguardando 5s para tentar de novo..." + sleep 5 done - echo "✅ CONEXÃO ESTABELECIDA! Banco de dados encontrado." } if [ -n "$DATABASE_URL" ]; then wait_for_db - echo "🔄 Sincronizando tabelas do Prisma..." + echo "🔄 Sincronizando tabelas..." ./node_modules/.bin/prisma db push --accept-data-loss echo "🌱 Executando seed..." - ./node_modules/.bin/prisma db seed || echo "⚠️ Seed falhou (pode ser que os dados já existam)" + ./node_modules/.bin/prisma db seed || echo "⚠️ Seed ja existia ou falhou." else - echo "⚠️ DATABASE_URL vazia. O deploy vai falhar ou subir sem banco." + echo "⚠️ DATABASE_URL não encontrada." fi -echo "🚀 Subindo aplicação..." +echo "🚀 Iniciando aplicação..." exec node server.js