Spaces:
Runtime error
Runtime error
| # ============================================================================ | |
| # 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 "==================================================" | |