#!/bin/sh # Script de inicialização otimizado echo "🔎 --- CONFIGURAÇÃO DE AMBIENTE ---" # Extrai os dados da URL usando Node para o diagnóstico export DB_HOST=$(node -e "try { const u = new URL(process.env.DATABASE_URL); console.log(u.hostname); } catch(e) { console.log('error'); }") export DB_PORT=$(node -e "try { const u = new URL(process.env.DATABASE_URL); console.log(u.port || '5432'); } catch(e) { console.log('5432'); }") echo "📡 Host: $DB_HOST | Porta: $DB_PORT" wait_for_db() { echo "⏳ Sincronizando com o banco de dados..." max_retries=15 count=0 while [ $count -lt $max_retries ]; do count=$((count + 1)) echo "🔄 Tentativa $count/$max_retries..." # Tenta rodar o push diretamente (o comando correto é sem --dry-run) PRISMA_OUTPUT=$(./node_modules/.bin/prisma db push --accept-data-loss 2>&1) EXIT_CODE=$? if [ $EXIT_CODE -eq 0 ]; then echo "✅ SUCESSO: Tabelas sincronizadas e banco conectado!" echo "$PRISMA_OUTPUT" return 0 fi echo "❌ FALHA NO PRISMA:" echo "----------------------------------------------------------------" echo "$PRISMA_OUTPUT" | head -n 20 echo "----------------------------------------------------------------" echo "😴 Aguardando 5s para nova tentativa..." sleep 5 done return 1 } if [ -n "$DATABASE_URL" ]; then if wait_for_db; then echo "🌱 Executando seed..." ./node_modules/.bin/prisma db seed || echo "⚠️ Seed já configurado ou falhou." else echo "❌ FALHA CRÍTICA: Não foi possível sincronizar com o banco." exit 1 fi else echo "⚠️ DATABASE_URL não encontrada. O site pode falhar." fi # --- DIAGNÓSTICO DE REDE (S3) --- if [ ! -z "$S3_ENDPOINT" ]; then echo "📡 Testando conexão S3 em $S3_ENDPOINT na porta ${S3_PORT:-9000}..." node -e " const net = require('net'); const s3Host = '$S3_ENDPOINT'; const s3Port = parseInt('${S3_PORT:-9000}'); const client = net.createConnection({ host: s3Host, port: s3Port, timeout: 5000 }, () => { console.log('✅ REDE S3 OK: A porta ' + s3Port + ' está aberta!'); process.exit(0); }); client.on('error', (err) => { console.log('❌ REDE S3 ERRO: ' + err.message); process.exit(1); }); client.on('timeout', () => { console.log('❌ REDE S3 TIMEOUT: O host ' + s3Host + ' não respondeu.'); process.exit(1); }); " || echo "⚠️ Aviso: Não foi possível confirmar o S3, mas continuaremos..." fi echo "🚀 Iniciando Octto Engenharia..." exec node server.js