8.3 KiB
🔧 Supabase Self-Hosted Configuration Guide
📌 O que é Supabase Self-Hosted?
Supabase self-hosted é uma implementação da plataforma Supabase que você hospeda em sua própria infraestrutura (servidor, VPS, Docker, etc.) ao invés de usar o serviço cloud em supabase.co.
Sua URL: https://supabase.stackbackup.cloud/
🚀 Configuração no Backend (NestJS)
Passo 1: Arquivo .env do Backend
# ============================================================================
# SUPABASE CONFIGURATION (Self-Hosted)
# ============================================================================
SUPABASE_URL=https://supabase.stackbackup.cloud
SUPABASE_ANON_KEY=seu_anon_key_aqui
SUPABASE_SERVICE_KEY=seu_service_key_aqui
# ============================================================================
# JWT CONFIGURATION
# ============================================================================
JWT_SECRET=sua_chave_secreta_minimo_32_caracteres
JWT_EXPIRATION=7d
# ============================================================================
# DATABASE (Opcional - se precisar acesso direto)
# ============================================================================
# DATABASE_URL=postgresql://user:password@seu-host:5432/postgres
# ============================================================================
# APP CONFIGURATION
# ============================================================================
NODE_ENV=development
PORT=3000
API_PREFIX=/api
# ============================================================================
# CORS CONFIGURATION
# ============================================================================
CORS_ORIGIN=http://localhost:3000,http://localhost:3001
Passo 2: Verificar Conexão com Supabase Self-Hosted
Ao rodar o backend:
cd backend-api
npm run start:dev
Você deve ver no console:
Supabase client initialized successfully
Connected to: https://supabase.stackbackup.cloud
Passo 3: Encontrar suas Chaves API
- Acesse:
https://supabase.stackbackup.cloud/ - Vá para: Projeto → Settings → API
- Copie:
SUPABASE_URL- URL base do seu SupabaseSUPABASE_ANON_KEY- Chave anônima (pública, ok expor no frontend)SUPABASE_SERVICE_KEY- Chave de serviço (SECRETA! só backend)
🌐 Configuração no Frontend (Next.js)
Passo 1: Arquivo .env.local do Frontend
# ============================================================================
# API Backend
# ============================================================================
NEXT_PUBLIC_API_URL=http://localhost:3000/api
NEXT_PUBLIC_API_TIMEOUT=10000
# ============================================================================
# Supabase (Self-Hosted)
# ============================================================================
NEXT_PUBLIC_SUPABASE_URL=https://supabase.stackbackup.cloud
NEXT_PUBLIC_SUPABASE_ANON_KEY=seu_anon_key_aqui
# ============================================================================
# Aplicação
# ============================================================================
NEXT_PUBLIC_APP_NAME=Task Manager
NEXT_PUBLIC_APP_VERSION=1.0.0
Passo 2: Usar no Frontend (se necessário)
Se quiser integração direta com Supabase no frontend:
import { createClient } from '@supabase/supabase-js';
const supabase = createClient(
process.env.NEXT_PUBLIC_SUPABASE_URL!,
process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!,
);
🔐 Diferenças entre ANON_KEY e SERVICE_KEY
| Propriedade | ANON_KEY | SERVICE_KEY |
|---|---|---|
| Localização | Frontend (público) | Backend (secreto) |
| Permissões | Limitadas (usuário autenticado) | Total (sem verificação RLS) |
| Segurança | Ok expor | ⚠️ NUNCA expor |
| Uso | Autenticação, queries do usuário | Admin tasks, bypass RLS |
Seu arquivo .env.example:
# Público - OK no frontend
NEXT_PUBLIC_SUPABASE_ANON_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
# Secreto - NUNCA EXPOR! Apenas backend
SUPABASE_SERVICE_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
🔗 Fluxo de Autenticação
Frontend Backend Supabase
| | |
|--- Clica Login | |
| | |
|--- POST /auth/login --------> | |
| (email, password) |--- Autentica com -------> |
| | ANON_KEY |
| |<--- JWT token -------------|
|<---- Retorna JWT -------------| |
| | |
| (Armazena token) | |
| | |
|--- GET /tasks | |
| Authorization: Bearer {token} |
| |--- Valida JWT |
| |--- SELECT * from tasks |
| | WHERE user_id = xxx |
| | (RLS aplica) --------> |
|<--- Retorna tarefas ----------|<--- Tarefas do usuário ---|
🧪 Testar Configuração
1. Backend - Testar Conexão
# Rodar backend
cd backend-api
npm run start:dev
# Em outro terminal, testar endpoint
curl http://localhost:3000/api/auth/me \
-H "Authorization: Bearer seu_token_jwt"
Esperado:
- ✅ Retorna dados do usuário
- ❌ 401 se token inválido
- ❌ 500 se não conseguir conectar Supabase
2. Frontend - Testar Conexão
# Rodar frontend
cd frontend-next
npm run dev
# Abrir http://localhost:3000
# Tentar fazer login
# Ver console do navegador
# Deve mostrar: "API conectada com sucesso"
3. Verificar URLs
# Backend deve conseguir alcançar Supabase
curl https://supabase.stackbackup.cloud/auth/v1/health
# Esperado: {"version":"1.x.x"}
⚠️ Troubleshooting
Erro: "ENOTFOUND supabase.stackbackup.cloud"
Problema: DNS não está resolvendo a URL
Solução:
- Verificar se
supabase.stackbackup.cloudestá acessível - Testar:
ping supabase.stackbackup.cloud - Verificar firewall/proxy
Erro: "Invalid API key"
Problema: ANON_KEY ou SERVICE_KEY incorreta
Solução:
- Ir para:
https://supabase.stackbackup.cloud/→ Settings → API - Copiar chaves novamente (sem espaços extras)
- Atualizar
.env - Reiniciar servidores
Erro: "CORS error"
Problema: Frontend não consegue chamar backend
Solução:
- Verificar
NEXT_PUBLIC_API_URLno frontend - Verificar
CORS_ORIGINno backend - Certificar que URLs correspondem
Backend .env:
CORS_ORIGIN=http://localhost:3000,https://seu-frontend.com
Erro: "RLS policy violation"
Problema: Usuário não consegue acessar dados por RLS
Solução:
- Executar SQL de RLS no Supabase:
https://supabase.stackbackup.cloud/→ SQL Editor- Colar
SQL_TASKS_TABLE_RLS.sql - Clicar RUN
📚 Referências
✅ Checklist de Configuração
Para seu setup com supabase.stackbackup.cloud:
-
Backend
.env:SUPABASE_URL=https://supabase.stackbackup.cloudSUPABASE_ANON_KEY=...(copiar correto)SUPABASE_SERVICE_KEY=...(copiar correto)JWT_SECRET=...(minimo 32 chars)
-
Frontend
.env.local:NEXT_PUBLIC_API_URL=http://localhost:3000/apiNEXT_PUBLIC_SUPABASE_URL=https://supabase.stackbackup.cloudNEXT_PUBLIC_SUPABASE_ANON_KEY=...(copiar correto)
-
Testar Conexão:
- Backend inicia sem erros
- Frontend consegue fazer login
- Consegue criar/listar tarefas
- RLS está isolando dados por usuário
Status: 🟢 Configurado para Supabase Self-Hosted
URL: https://supabase.stackbackup.cloud/