PARA.AI / scripts /init-postgres.sh
caarleexx's picture
Rename init-postgres.sh to scripts/init-postgres.sh
eecfd1e verified
raw
history blame
4.88 kB
#!/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 "=================================================="