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 "=================================================="