Spaces:
Runtime error
Runtime error
File size: 4,878 Bytes
b3b94f2 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 |
#!/bin/bash
# ============================================================================
# Script de inicialização do PostgreSQL dentro do container Docker
# para.AI API v3.0 - Hugging Face Spaces
# ============================================================================
set -e
echo "=================================================="
echo "🐘 Inicializando PostgreSQL local..."
echo "=================================================="
# Variáveis
POSTGRES_USER="${POSTGRES_USER:-para_ai}"
POSTGRES_PASSWORD="${POSTGRES_PASSWORD:-para_ai_temp}"
POSTGRES_DB="${POSTGRES_DB:-para_ai}"
PGDATA="/var/lib/postgresql/data"
# Verificar se já foi inicializado
if [ -d "$PGDATA/base" ]; then
echo "✅ PostgreSQL já inicializado (dados existem)"
else
echo "📦 Inicializando cluster PostgreSQL..."
# Criar diretório de dados
mkdir -p "$PGDATA"
chown -R postgres:postgres "$PGDATA"
chmod 700 "$PGDATA"
# Inicializar cluster como usuário postgres
su - postgres -c "/usr/lib/postgresql/15/bin/initdb -D $PGDATA --encoding=UTF8 --locale=C"
echo "✅ Cluster criado"
fi
# Configurar pg_hba.conf para aceitar conexões locais
cat > "$PGDATA/pg_hba.conf" << EOF
# TYPE DATABASE USER ADDRESS METHOD
local all all trust
host all all 127.0.0.1/32 md5
host all all ::1/128 md5
host all all 0.0.0.0/0 md5
EOF
# Configurar postgresql.conf
cat >> "$PGDATA/postgresql.conf" << EOF
# Configurações para ambiente Docker/HF Spaces
listen_addresses = '*'
port = 5432
max_connections = 50
shared_buffers = 128MB
work_mem = 4MB
maintenance_work_mem = 64MB
effective_cache_size = 256MB
log_destination = 'stderr'
logging_collector = off
log_min_messages = warning
log_min_error_statement = error
EOF
echo "✅ Configurações aplicadas"
# Iniciar PostgreSQL em background
echo "🚀 Iniciando servidor PostgreSQL..."
su - postgres -c "/usr/lib/postgresql/15/bin/pg_ctl -D $PGDATA -l /var/log/postgresql/postgresql.log start"
# Aguardar PostgreSQL ficar pronto
echo "⏳ Aguardando PostgreSQL ficar pronto..."
for i in {1..30}; do
if su - postgres -c "psql -l" &> /dev/null; then
echo "✅ PostgreSQL está pronto!"
break
fi
echo " Tentativa $i/30..."
sleep 1
done
# Verificar se ficou pronto
if ! su - postgres -c "psql -l" &> /dev/null; then
echo "❌ PostgreSQL não iniciou corretamente!"
cat /var/log/postgresql/postgresql.log
exit 1
fi
# Criar usuário se não existir
echo "👤 Criando usuário $POSTGRES_USER..."
su - postgres -c "psql -tc \"SELECT 1 FROM pg_user WHERE usename = '$POSTGRES_USER'\" | grep -q 1" || su - postgres -c "psql -c \"CREATE USER $POSTGRES_USER WITH PASSWORD '$POSTGRES_PASSWORD';\"" && echo "✅ Usuário criado"
# Criar database se não existir
echo "🗄️ Criando database $POSTGRES_DB..."
su - postgres -c "psql -lqt | cut -d \| -f 1 | grep -qw $POSTGRES_DB" || su - postgres -c "psql -c \"CREATE DATABASE $POSTGRES_DB OWNER $POSTGRES_USER;\"" && echo "✅ Database criado"
# Dar permissões
su - postgres -c "psql -c \"GRANT ALL PRIVILEGES ON DATABASE $POSTGRES_DB TO $POSTGRES_USER;\""
# Executar DDL se arquivo existir
if [ -f "/app/database/init_db.sql" ]; then
echo "📜 Executando DDL..."
PGPASSWORD=$POSTGRES_PASSWORD psql -h localhost -U $POSTGRES_USER -d $POSTGRES_DB -f /app/database/init_db.sql
echo "✅ DDL executado"
else
echo "⚠️ Arquivo init_db.sql não encontrado"
fi
# Executar seed data se arquivo existir
if [ -f "/app/scripts/seed_data.sql" ]; then
echo "🌱 Inserindo dados de teste..."
PGPASSWORD=$POSTGRES_PASSWORD psql -h localhost -U $POSTGRES_USER -d $POSTGRES_DB -f /app/scripts/seed_data.sql
echo "✅ Seed data inserido"
fi
# Mostrar status
echo ""
echo "=================================================="
echo "✅ PostgreSQL inicializado com sucesso!"
echo "=================================================="
echo "📊 Informações:"
echo " Host: localhost"
echo " Port: 5432"
echo " Database: $POSTGRES_DB"
echo " User: $POSTGRES_USER"
echo ""
# Mostrar estatísticas
echo "📈 Estatísticas:"
PGPASSWORD=$POSTGRES_PASSWORD psql -h localhost -U $POSTGRES_USER -d $POSTGRES_DB -c "
SELECT
'Tribunais' as tabela, COUNT(*)::text as registros FROM tribunais
UNION ALL
SELECT 'Usuários', COUNT(*)::text FROM usuarios
UNION ALL
SELECT 'Acórdãos', COUNT(*)::text FROM acordaos
UNION ALL
SELECT 'Decisões', COUNT(*)::text FROM decisoes;
" 2>/dev/null || echo " (tabelas ainda não criadas)"
echo ""
echo "✅ Pronto para iniciar API!"
echo "=================================================="
|