Este documento descreve como configurar o banco de dados PostgreSQL no Supabase para o projeto Inovacode Portfolio.
- Conta no Supabase
- Node.js e pnpm instalados
- Acesso ao dashboard do Supabase
- Acesse https://supabase.com/dashboard
- Clique em "New Project"
- Escolha sua organização
- Preencha as informações do projeto:
- Name:
inovacode-portfolio - Database Password: Escolha uma senha forte (salve-a!)
- Region: Escolha a região mais próxima (ex:
us-east-1)
- Name:
- Clique em "Create new project"
- Aguarde a criação do projeto (pode levar alguns minutos)
- No dashboard do projeto, clique no botão "Connect" no topo da página
- Selecione "App Frameworks" ou "Postgres"
- Copie as seguintes informações:
postgres://postgres.[PROJECT-REF]:[YOUR-PASSWORD]@aws-0-[REGION].pooler.supabase.com:5432/postgres
postgresql://postgres:[YOUR-PASSWORD]@db.[PROJECT-REF].supabase.co:5432/postgres
postgres://postgres.[PROJECT-REF]:[YOUR-PASSWORD]@aws-0-[REGION].pooler.supabase.com:6543/postgres
-
Copie o arquivo
.env.examplepara.env.local:cp .env.example .env.local
-
Edite o
.env.locale substitua os valores de placeholder:# Use a Session Mode connection string para desenvolvimento DATABASE_URL="postgres://postgres.abcdefghijklmnop:[SUA-SENHA]@aws-0-us-east-1.pooler.supabase.com:5432/postgres" # Configurações do projeto Supabase SUPABASE_URL="https://abcdefghijklmnop.supabase.co" SUPABASE_ANON_KEY="sua_anon_key_aqui" SUPABASE_SERVICE_ROLE_KEY="sua_service_role_key_aqui" # Senha do banco (a mesma usada na connection string) DB_PASSWORD="sua_senha_do_banco"
-
Importante: Nunca commite o arquivo
.env.localno Git!
- No dashboard do Supabase, vá para Settings > API
- Copie as seguintes chaves:
- URL: Use como
SUPABASE_URL - anon public: Use como
SUPABASE_ANON_KEY - service_role: Use como
SUPABASE_SERVICE_ROLE_KEY(⚠️ Mantenha secreta!)
- URL: Use como
Execute o teste de conexão:
cd apps/api
pnpm exec tsc src/test-db.ts --outDir dist --target ES2020 --module CommonJS --esModuleInterop
node dist/test-db.jsSe tudo estiver configurado corretamente, você verá:
✅ Database connection successful!
✅ Database query successful: { current_time: 2024-XX-XXTXX:XX:XX.XXX }
# Na raiz do projeto
pnpm devO health check em http://localhost:3000/healthz deve mostrar:
{
"status": "ok",
"database": "configured",
"timestamp": "2024-XX-XXTXX:XX:XX.XXX"
}- Melhor para: Servidores persistentes (VMs, containers de longa duração)
- Limitação: Apenas IPv6
- Porta: 5432
- Performance: Melhor (sem proxy)
- Melhor para: Servidores persistentes que precisam de IPv4
- Porta: 5432
- Performance: Boa
- Recomendado para: Desenvolvimento local
- Melhor para: Funções serverless, conexões de curta duração
- Porta: 6543
- Performance: Boa para casos de uso específicos
- Limitação: Não suporta prepared statements
Para produção, configure as variáveis de ambiente no seu provedor de deploy:
Vercel:
vercel env add DATABASE_URL
vercel env add SUPABASE_URL
vercel env add SUPABASE_ANON_KEY
# Não adicione SUPABASE_SERVICE_ROLE_KEY no frontendFly.io (para API):
flyctl secrets set DATABASE_URL="sua_connection_string"
flyctl secrets set SUPABASE_URL="https://seu-projeto.supabase.co"
flyctl secrets set SUPABASE_SERVICE_ROLE_KEY="sua_service_role_key"- Nunca exponha a
SUPABASE_SERVICE_ROLE_KEYno frontend - Use a
SUPABASE_ANON_KEYapenas no frontend - Configure Row Level Security (RLS) nas tabelas
- Use conexões SSL em produção
- Monitore o uso de conexões no dashboard do Supabase
- Verifique se o projeto Supabase está ativo
- Confirme a connection string
- Verifique configurações de firewall
- Verifique a senha no dashboard do Supabase
- Confirme se a senha na connection string está correta
- Considere resetar a senha se necessário
- Use Transaction Mode para funções serverless
- Configure pool size adequado
- Monitore conexões ativas no dashboard
- Use Session Mode se IPv6 não for suportado
- Considere o IPv4 add-on para conexões diretas
- Verifique configurações de rede
Se encontrar problemas:
- Verifique os logs do dashboard Supabase
- Consulte a documentação oficial
- Contate o suporte do Supabase se necessário