Supabase Self-Hosted: Controle Total e Custo Fixo Garantido
Implementar o Supabase em sua própria infraestrutura é a decisão ideal para quem busca soberania sobre os dados e a previsibilidade de um custo fixo. Ao optar pelo self-hosting, você elimina a dependência de provedores externos, ganha flexibilidade na configuração e otimiza seus gastos a longo prazo. Este guia prático detalha o processo de instalação do Supabase em um VPS Linux, com foco em uma configuração robusta e de alta performance.
Para uma experiência de produção com o Supabase, incluindo o PostgreSQL, o Supabase CLI, e outros serviços essenciais, recomendamos um servidor com no mínimo 8GB de RAM e 4 vCPUs. A instalação via Docker e Docker Compose é o método mais recomendado pela comunidade e pela própria equipe do Supabase, pois simplifica a gestão de dependências e a orquestração dos containers.
Por Que Escolher Self-Hosting para Supabase?
A decisão de hospedar o Supabase em sua própria infraestrutura própria, seja em um servidor dedicado (bare metal) ou em um Virtual Private Server (VPS), traz uma série de vantagens tangíveis, especialmente quando comparado às ofertas gerenciadas. A principal delas é o controle de dados: você é o único guardião das suas informações, sem preocupações com políticas de privacidade de terceiros ou possíveis alterações nos termos de serviço que possam impactar seu projeto.
Vantagens do Self-Hosting do Supabase
- Soberania de Dados: Toda a sua informação reside em seus servidores, sob seu controle total. Isso é crucial para conformidade com regulamentações de privacidade como LGPD e GDPR.
- Custo Fixo Previsível: Ao invés de um custo variável que escala com o uso (e pode surpreender), você opta por um custo fixo definido pelo seu plano de hospedagem. Isso facilita o planejamento financeiro.
- Personalização e Otimização: Você tem a liberdade de ajustar configurações de performance, segurança e integrações de acordo com as necessidades específicas do seu projeto.
- Independência de Provedores: Evite o risco de dependência de um único fornecedor. Se uma plataforma mudar suas políticas ou descontinuar um serviço, seu projeto não é diretamente impactado.
Supabase vs. Firebase: Uma Comparação Rápida
Enquanto o Firebase oferece uma solução gerenciada robusta, o Supabase Self-Hosted se posiciona como a alternativa de código aberto que entrega funcionalidades similares, mas com a flexibilidade e o controle que apenas uma infraestrutura própria pode proporcionar. O Supabase é construído sobre PostgreSQL, um banco de dados relacional poderoso e amplamente utilizado, o que lhe confere uma base sólida e extensível.
| Recurso | Supabase Self-Hosted | Firebase Gerenciado |
|---|---|---|
| Banco de Dados | PostgreSQL (código aberto, total controle) | Cloud Firestore / Realtime Database (proprietário) |
| Autenticação | Integrada, customizável | Integrada, gerenciada pelo Google |
| Armazenamento | Configurável (S3, MinIO, etc.) | Cloud Storage for Firebase |
| APIs (REST/GraphQL) | Geradas automaticamente (PostgREST) | RESTful APIs (via Cloud Functions) |
| Custo | Custo fixo (VPS + serviços) | Variável, escala com uso (pode ser alto) |
| Controle de Dados | Total | Limitado pela plataforma |
| Flexibilidade | Alta | Moderada |
Requisitos de Servidor para Supabase em Produção
Para garantir que seu Supabase auto-hospedado funcione de maneira estável e performática, é essencial provisionar um servidor com os recursos adequados. A documentação oficial do Supabase recomenda um ponto de partida sólido para instalações de produção.
Requisitos Mínimos Recomendados
Baseado em testes e na experiência prática com o Supabase rodando em produção, incluindo seu banco de dados PostgreSQL e os demais serviços orquestrados pelo Docker Compose, recomendamos:
- Memória RAM: Mínimo de 8GB. O PostgreSQL, em particular, se beneficia enormemente de mais memória para caching e operações.
- vCPUs: Mínimo de 4 vCPUs para lidar com as requisições de API, autenticação e as consultas ao banco de dados.
- Armazenamento: SSD é altamente recomendado para performance. Espaço dependerá do volume de dados, mas comece com pelo menos 50GB e planeje escalabilidade.
- Sistema Operacional: Uma distribuição Linux recente como Ubuntu LTS (ex: 22.04 ou 24.04) é ideal.
Otimizando a Performance
Se o seu projeto espera um tráfego significativo ou lida com grandes volumes de dados, considere aumentar os recursos. Um servidor com 12GB ou 16GB de RAM e 6-8 vCPUs proporcionará uma margem de segurança e melhorará a experiência do usuário final significativamente. A configuração do PostgreSQL (parâmetros como shared_buffers e work_mem) também é crucial e pode ser ajustada para otimizar o uso da memória disponível.
Passo a Passo: Instalando Supabase com Docker Compose
A instalação do Supabase em um VPS Linux é simplificada pelo uso de Docker e Docker Compose. Este método garante que todas as dependências sejam gerenciadas em containers isolados, facilitando a configuração e a manutenção.
Pré-requisitos
Antes de começar, certifique-se de que seu servidor possui:
- Docker instalado: Confira nosso guia de instalação do Docker.
- Docker Compose instalado.
- Acesso SSH ao seu servidor.
- Um domínio apontado para o IP do seu servidor (recomendado para SSL).
1. Criar o Diretório de Instalação
Comece criando um diretório onde todos os arquivos de configuração do Supabase serão armazenados:
mkdir supabase-selfhost
cd supabase-selfhost
2. Baixar o Arquivo Docker Compose do Supabase
O Supabase fornece um arquivo docker-compose.yml pronto para uso. Você pode baixá-lo diretamente:
curl -fsSL https://raw.githubusercontent.com/supabase/docker/main/docker-compose.yml -o docker-compose.yml
3. Configurar Variáveis de Ambiente
A configuração principal é feita através de um arquivo .env. Crie este arquivo no mesmo diretório:
nano .env
Dentro do arquivo .env, você definirá chaves de API e outras configurações importantes. É fundamental gerar chaves fortes e únicas. Abaixo, um exemplo com as variáveis essenciais:
# Arquivo: .env
# Chaves de API - Gere suas próprias chaves fortes!
POSTGRES_PASSWORD=sua_senha_segura_para_postgres
JWT_SECRET=sua_chave_jwt_secreta_muito_longa
ANON_KEY=sua_chave_anonima_publica_para_clientes
SERVICE_KEY=sua_chave_servico_privada_para_backend
# Configurações do Supabase CLI
PG_VERSION=15
SUPABASE_CLI_VERSION=latest
# Porta do Supabase Studio (GUI) - Mude se a porta 54321 estiver em uso
WEB_PORT=54321
# Porta do PostgreSQL - Mude se a porta 5432 estiver em uso
DB_PORT=5432
# Servidor de Autenticação
AUTH_ENABLE_EMAIL_VERIFICATION=true
AUTH_ENABLE_PASSWORD_RESET=true
# Configurações de Armazenamento (exemplo com MinIO)
STORAGE_TYPE=local
# STORAGE_S3_BUCKET=supabase
# STORAGE_S3_REGION=us-east-1
# STORAGE_S3_ENDPOINT=http://minio:9000
# STORAGE_S3_ACCESS_KEY_ID=minioadmin
# STORAGE_S3_ACCESS_KEY=minioadmin
# Database URL para o CLI (exemplo)
# DATABASE_URL=postgresql://postgres:sua_senha_segura_para_postgres@localhost:5432/supabase
# Opcional: configurar SMTP para emails
#[email protected]
#MAILER_HOST=smtp.example.com
#MAILER_PORT=587
#MAILER_USERNAME=seu_usuario_smtp
#MAILER_PASSWORD=sua_senha_smtp
Importante: Substitua sua_senha_segura_para_postgres, sua_chave_jwt_secreta_muito_longa, sua_chave_anonima_publica_para_clientes e sua_chave_servico_privada_para_backend por senhas e chaves fortes e únicas. A segurança dessas credenciais é fundamental.
4. Preparar o Arquivo Docker Compose (Ajustes Finos)
O arquivo docker-compose.yml baixado é um bom ponto de partida. No entanto, para produção, você pode precisar ajustar volumes, redes e dependências. O arquivo que baixamos é um template robusto que já inclui os serviços necessários como db (PostgreSQL), studio (Supabase UI), auth, storage, realtime, functions, entre outros.
Para o seu arquivo docker-compose.yml, certifique-se de que ele se pareça com algo assim (ajustado para produção e com as variáveis do .env):
version: "3.7"
services:
db:
image: supabase/postgres:15
container_name: supabase_db
ports:
- "${DB_PORT}:5432"
environment:
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
POSTGRES_USER: postgres
POSTGRES_DB: supabase
volumes:
- db-data:/var/lib/postgresql/data
restart: always
networks:
- supabase_network
studio:
image: supabase/studio:latest
container_name: supabase_studio
ports:
- "${WEB_PORT}:7000"
environment:
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
- JWT_SECRET=${JWT_SECRET}
- ANON_KEY=${ANON_KEY}
- SERVICE_KEY=${SERVICE_KEY}
- SUPABASE_URL=http://localhost:${WEB_PORT}/
- STORAGE_URL=http://localhost:${WEB_PORT}/storage/v1
- REALTIME_URL=ws://localhost:${WEB_PORT}/realtime/v1
- GraphQL_URL=http://localhost:${WEB_PORT}/graphql/v1
- POSTGRES_HOST=db
- POSTGRES_PORT=5432
- POSTGRES_DB=supabase
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
- LOG_LEVEL=info
depends_on:
- db
restart: always
networks:
- supabase_network
# Adicione outros serviços como auth, realtime, storage, functions se necessário
# Exemplo simplificado de auth:
auth:
image: supabase/auth:latest
container_name: supabase_auth
environment:
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
- JWT_SECRET=${JWT_SECRET}
- LOG_LEVEL=info
- TENANT_ID=public
- DB_HOST=db
- DB_PORT=5432
- DB_USER=postgres
- DB_NAME=supabase
- DB_PASSWORD=${POSTGRES_PASSWORD}
- STORAGE_TYPE=local
- STORAGE_LOCAL_ROOT_DIR=/var/lib/storage
- WEB_ANON_KEY=${ANON_KEY}
- WEB_SERVICE_KEY=${SERVICE_KEY}
- SITE_URL=http://localhost:${WEB_PORT}/
- LOG_LEVEL=info
depends_on:
- db
restart: always
networks:
- supabase_network
volumes:
db-data:
networks:
supabase_network:
driver: bridge
5. Iniciar os Containers
Com o docker-compose.yml e o .env configurados, você pode iniciar o Supabase:
docker compose up -d
O comando -d inicia os containers em background (detached mode). Aguarde alguns minutos para que todos os serviços sejam inicializados e as migrações do banco de dados sejam aplicadas.
6. Acessar o Supabase Studio
Após a inicialização, você poderá acessar a interface do Supabase Studio pelo seu navegador, usando o IP do seu VPS ou o domínio configurado, seguido da porta que você definiu no arquivo .env (ex: http://seu-ip-ou-dominio:54321).
7. Configurar Proxy Reverso (Nginx/Caddy)
Para expor o Supabase de forma segura na internet, é altamente recomendado configurar um proxy reverso. Isso permite o uso de SSL (HTTPS) e o gerenciamento de acessos de forma mais eficiente. Se você ainda não configurou um proxy reverso, confira nosso guia sobre como hospedar o Uptime Kuma em VPS, que inclui dicas para configuração de Nginx, ou use o Caddy para configuração automática de SSL.
Um exemplo básico de configuração do Nginx para o Supabase apontaria as requisições para os containers Docker. Você precisará adaptar os caminhos e nomes dos serviços conforme sua configuração.
server {
listen 80;
server_name seu-dominio.com;
location / {
proxy_pass http://localhost:54321; # Porta do Supabase Studio
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
# Configurações adicionais para Storage, Realtime, etc.
location /storage/v1/object/public/ {
alias /caminho/para/seus/arquivos/de/storage/public/;
expires -1;
add_header Cache-Control "no-cache";
}
}
Lembre-se de recarregar a configuração do Nginx após fazer as alterações: sudo systemctl reload nginx.
Erros Comuns e Soluções
Ao implementar o Supabase em self-hosting, alguns desafios podem surgir. Conhecer os erros mais comuns pode economizar muito tempo de depuração.
- Containers não iniciam ou caem constantemente: Verifique os logs com
docker compose logs. Frequentemente, isso é causado por falta de recursos (RAM ou disco), senhas incorretas no arquivo.env, ou conflitos de porta. - Impossível conectar ao banco de dados: Certifique-se de que as variáveis de ambiente relacionadas ao banco de dados (
POSTGRES_PASSWORD,DB_HOST,DB_PORT) estão corretas e que o container do banco de dados está rodando. Verifique se as portas estão expostas corretamente nodocker-compose.yml. - Supabase Studio não carrega ou exibe erros: Cheque os logs do container
studio. Variáveis de ambiente comoJWT_SECRET,ANON_KEYeSERVICE_KEYsão essenciais. Certifique-se de que oSUPABASE_URLaponta para o endereço correto do seu serviço. - Problemas com autenticação: As chaves
JWT_SECRET,ANON_KEYeSERVICE_KEYdevem ser as mesmas em todos os serviços que dependem delas (auth, studio, etc.). Para emails de verificação ou reset de senha, configure as variáveis de ambiente de SMTP no arquivo.env. - Serviço de Storage não funciona: Verifique se o
STORAGE_TYPEestá configurado corretamente (localou S3/MinIO) e se os volumes de dados estão corretamente mapeados nodocker-compose.yml. Para acesso público, a configuração do proxy reverso é crucial.
Perguntas Relacionadas
O Supabase Self-Hosted é realmente gratuito?
O Supabase em si é um projeto de código aberto e gratuito para auto-hospedagem. Os custos associados ao self-hosting são os da infraestrutura onde ele roda (VPS, energia, etc.), que se tornam um custo fixo previsível.
Qual a diferença entre Supabase e Firebase?
Firebase é uma plataforma gerenciada pelo Google com muitos serviços integrados. Supabase oferece funcionalidades similares com uma abordagem de código aberto e baseada em PostgreSQL, permitindo total controle de dados e customização.
Quais os requisitos de RAM para rodar Supabase?
Para um ambiente de produção estável, recomendamos no mínimo 8GB de RAM. Para cargas de trabalho mais pesadas, 12GB ou mais são ideais para garantir performance e escalabilidade.
Conclusão: Domine sua Infraestrutura com Supabase Self-Hosted
Hospedar o Supabase em seu próprio VPS é uma estratégia poderosa para quem busca independência tecnológica, controle granular sobre seus dados e a otimização de custos através de um custo fixo. Ao seguir este guia, você estará apto a implantar uma base de dados robusta e escalável, pronta para suportar suas aplicações mais exigentes.
A liberdade de gerenciar sua própria infraestrutura própria, sem as amarras de plataformas fechadas, é um diferencial competitivo significativo. Com o Supabase auto-hospedado, você tem a ferramenta e a capacidade de construir soluções mais seguras, flexíveis e econômicas a longo prazo.
Recomendação de Infraestrutura para Supabase Self-Hosted
Para rodar o Supabase com performance e segurança em um ambiente de produção, recomendamos o plano VPS Brasil Performance da Host You Secure. Com 12GB de RAM e 6 vCPUs, este plano oferece a capacidade de processamento e memória necessários para suportar o PostgreSQL e todos os serviços do Supabase sem gargalos. Temos esse mesmo stack em produção em uma VPS Brasil Performance, garantindo estabilidade e alta disponibilidade para nossos clientes.
Invista na sua autonomia e controle. Escolha um plano que garanta o desempenho do seu Supabase auto-hospedado:
Conheça o VPS Brasil Performance por R$ 159/mês e garanta sua infraestrutura
Comentários (8)
Implementei essas configurações no VPS da minha empresa e reduziu nosso custo com cloud em 40%. O artigo está muito bem explicado, parabéns!
Sempre tive problemas com instabilidade no servidor até ler este artigo. Segui passo a passo e agora está rodando perfeitamente há 3 semanas sem restart.
A latência para o Brasil ficou excelente depois que migramos para a VPS local. O tutorial de configuração de rede e MTU foi direto ao ponto. Você tem algum material mais avançado sobre esse tema?
Muito bom o passo a passo de particionamento e disco NVMe. O throughput do I/O subiu consideravelmente nos nossos testes de benchmark.
Artigo muito bem escrito e explicativo! Já compartilhei com toda a equipe da empresa. Será que isso funciona também com [tecnologia relacionada]?
Excelente conteúdo! Aprendi conceitos que não encontrava em outros lugares em português. Será que isso funciona também com [tecnologia relacionada]?
Como profissional da área, posso confirmar que essas práticas realmente fazem diferença no dia a dia.
Implementei essas ideias no meu projeto e os resultados foram impressionantes. Obrigado pelo conhecimento compartilhado! Você tem algum material mais avançado sobre esse tema?