rag_template / docs /NEON_SETUP.md
Guilherme Favaron
Sync: Complete project update (Phase 6) - API, Metadata, Eval, Docs
a686b1b

A newer version of the Gradio SDK is available: 6.12.0

Upgrade

Configuracao Neon.tech

Neon e um PostgreSQL serverless com suporte nativo a pgvector, ideal para desenvolvimento e producao.

Vantagens

  • Free tier generoso (10GB storage)
  • Database branching (copie seu banco para testes)
  • Autoscaling automatico
  • Connection pooling integrado
  • Cold start rapido
  • API completa

Setup Passo a Passo

1. Criar Conta

  1. Acesse neon.tech
  2. Clique em "Sign Up" (pode usar GitHub)
  3. Complete o cadastro

2. Criar Projeto

  1. No dashboard, clique em "Create Project"

  2. Escolha:

    • Nome do projeto: rag-template (ou seu nome)
    • Regiao: Escolha a mais proxima (ex: us-east-1)
    • PostgreSQL version: 15 ou superior
  3. Clique em "Create Project"

3. Habilitar pgvector

Neon ja vem com pgvector disponivel. Voce so precisa habilitar a extensao:

  1. Va para o SQL Editor no dashboard
  2. Execute o seguinte comando:
CREATE EXTENSION IF NOT EXISTS vector;
  1. Verifique a instalacao:
SELECT * FROM pg_extension WHERE extname = 'vector';

4. Obter Connection String

  1. No dashboard do seu projeto, va para Connection Details
  2. Copie a Connection String (formato completo)

Ela tera este formato:

postgresql://user:password@ep-xxx-xxx.us-east-1.aws.neon.tech/neondb?sslmode=require

Importante: Guarde esta string com seguranca! Ela contem sua senha.

5. Configurar .env

  1. No diretorio do projeto, copie o arquivo de exemplo:
cp .env.example .env
  1. Abra .env e adicione a connection string:
DATABASE_URL=postgresql://user:password@ep-xxx.us-east-1.aws.neon.tech/neondb?sslmode=require
  1. Adicione outras variaveis necessarias:
# Neon Database
DATABASE_URL=postgresql://user:password@ep-xxx.us-east-1.aws.neon.tech/neondb?sslmode=require

# Hugging Face (obrigatorio)
HF_TOKEN=seu_token_aqui

# Opcional: outros providers
OPENAI_API_KEY=
ANTHROPIC_API_KEY=
OLLAMA_BASE_URL=

6. Testar Conexao

Execute o script de teste:

python -c "from src.database import DatabaseManager; db = DatabaseManager(); print('Conexao OK!' if db.test_connection() else 'Falha na conexao')"

Se ver "Conexao OK!", tudo esta configurado!


Branching (Feature Unica do Neon)

O Neon permite criar "branches" do seu banco de dados:

Criar um Branch

  1. No dashboard, va para Branches
  2. Clique em "Create Branch"
  3. Nomeie (ex: testing)
  4. Escolha partir de qual branch/ponto no tempo

Isso cria uma copia completa do seu banco que voce pode:

  • Usar para testes sem afetar producao
  • Deletar sem consequencias
  • Resetar para estado anterior

Usar o Branch

Cada branch tem sua propria connection string:

# Producao
DATABASE_URL_PROD=postgresql://...main...

# Testing
DATABASE_URL_TEST=postgresql://...testing...

Limites Free Tier

O free tier do Neon oferece:

Recurso Limite
Storage 10 GB
Compute 100 horas/mes
Projetos 10
Branches 10 por projeto
Conexoes 1000 simultaneas

Dicas para nao estourar limites:

  1. Storage:

    • Monitore o tamanho dos embeddings (384d = ~1.5KB por doc)
    • Exemplo: 1GB = ~650k documentos com embeddings
    • Delete dados de teste regularmente
  2. Compute Hours:

    • Neon pausa automaticamente apos 5min de inatividade
    • 100h/mes = ~3h por dia (suficiente para desenvolvimento)
    • Configure pooler_enabled=true para otimizar
  3. Branches:

    • Delete branches de teste apos uso
    • Use para features especificas, nao para cada teste

Configuracoes Recomendadas

Connection Pooling

Para melhor performance, use o pooler do Neon:

# Connection string com pooling
DATABASE_URL=postgresql://user:password@ep-xxx.us-east-1.aws.neon.tech/neondb?sslmode=require&pooler=true

Timeouts

Configure timeouts apropriados no seu codigo:

# src/database.py
DATABASE_CONFIG = {
    "connect_timeout": 10,
    "command_timeout": 30,
    "keepalives": 1,
    "keepalives_idle": 30,
}

SSL Mode

Neon requer SSL. Certifique-se de incluir sslmode=require:

?sslmode=require

Monitoramento

Dashboard

O dashboard do Neon mostra:

  • Storage usado
  • Compute hours consumidas
  • Queries recentes
  • Metricas de performance

Logs

Para ver logs das queries:

  1. Va para Monitoring no dashboard
  2. Visualize queries lentas
  3. Analise uso de indices

Alerts

Configure alerts para:

  • Storage proximo do limite (ex: 8GB de 10GB)
  • Compute hours (ex: 80h de 100h)

Troubleshooting

Erro: "password authentication failed"

Verifique:

  1. Usuario e senha corretos na connection string
  2. Senha URL-encoded se conter caracteres especiais
from urllib.parse import quote_plus
senha_encoded = quote_plus("minha@senha#123")

Erro: "too many connections"

Solucoes:

  1. Use connection pooling (?pooler=true)
  2. Configure max_connections no psycopg
  3. Feche conexoes nao usadas

Erro: "SSL connection required"

Adicione ?sslmode=require na connection string.

Performance lenta

  1. Crie indices apropriados:
CREATE INDEX ON documents USING ivfflat (embedding vector_cosine_ops);
  1. Use o pooler do Neon
  2. Otimize queries (veja dashboard)

Migracao de Outro Banco

De PostgreSQL Local

# Dump local
pg_dump -h localhost -U postgres ragdb > dump.sql

# Restore no Neon
psql "postgresql://user:password@ep-xxx.neon.tech/neondb?sslmode=require" < dump.sql

De Supabase

# Obtenha connection string do Supabase
# Execute dump e restore como acima

Upgrade para Plano Pago

Se precisar de mais recursos:

Plano Storage Compute Preco/mes
Free 10GB 100h $0
Pro 100GB 750h $19
Scale Custom Custom Custom

Veja detalhes em: neon.tech/pricing


Scripts Uteis

Verificar Tamanho do Banco

SELECT
    pg_size_pretty(pg_database_size('neondb')) as database_size,
    (SELECT count(*) FROM documents) as document_count;

Limpar Dados Antigos

-- Delete documentos mais antigos que 30 dias
DELETE FROM documents
WHERE created_at < NOW() - INTERVAL '30 days';

-- Vacuum para recuperar espaco
VACUUM FULL documents;

Backup Manual

# Criar backup
pg_dump "postgresql://..." > backup_$(date +%Y%m%d).sql

# Restaurar backup
psql "postgresql://..." < backup_20260123.sql

Recursos Adicionais


Comparacao com Outros Provedores

Veja DATABASE_COMPARISON.md para comparar Neon com Supabase, Railway e outros.


Suporte


Proximo passo: Voltar ao README ou testar o app!