80 lines
2.5 KiB
Bash
80 lines
2.5 KiB
Bash
#!/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
|