Supabase em VPS: Instalação Completa e Otimizada

10 min 163 Self Hosting
Resumir com:
ChatGPT Claude Gemini Perplexity Grok
Compartilhar:
WhatsApp LinkedIn X

Se este conteúdo faz parte do seu projeto

Escolha a VPS pelo uso, não pelo excesso

Para workloads de IA ou banco de dados, o Performance é o ponto de partida equilibrado; escolha o Ultra quando precisar de mais margem de memória.

PlanoRecursosMensalPerfil
Basic4 vCPU · 4 GB RAM · 100 GB NVMeR$ 99Site e projeto pequeno
Performance6 vCPU · 12 GB RAM · 150 GB NVMeR$ 169Produção e múltiplos serviços
Ultra8 vCPU · 20 GB RAM · 200 GB NVMeR$ 269Cargas maiores e mais margem
Prova técnica: no benchmark publicado da VM Performance, medimos 1.855 ev/s em 6 threads, 288 ev/s em 1 thread, 11.858 MiB/s de memória e 338 MB/s de escrita sequencial, com teste direto na VM e sem Cloudflare.
Escolher Performance Falar no WhatsApp

Valores mensais exibidos para referência. A renovação segue o ciclo e o preço vigente informado no checkout antes da contratação.

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.

Comparativo Supabase Self-Hosted vs. Firebase Gerenciado
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:

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 no docker-compose.yml.
  • Supabase Studio não carrega ou exibe erros: Cheque os logs do container studio. Variáveis de ambiente como JWT_SECRET, ANON_KEY e SERVICE_KEY são essenciais. Certifique-se de que o SUPABASE_URL aponta para o endereço correto do seu serviço.
  • Problemas com autenticação: As chaves JWT_SECRET, ANON_KEY e SERVICE_KEY devem 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_TYPE está configurado corretamente (local ou S3/MinIO) e se os volumes de dados estão corretamente mapeados no docker-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

Perguntas Frequentes

Os principais benefícios do Supabase self-hosted incluem controle total sobre seus dados (soberania de dados), um custo fixo previsível em vez de um custo variável que pode escalar inesperadamente, e a liberdade de customizar e otimizar a infraestrutura conforme suas necessidades específicas. Isso o torna ideal para projetos que exigem alta segurança e independência de plataformas de terceiros.

Embora seja tecnicamente possível iniciar o Supabase com menos de 8GB de RAM, não é recomendado para ambientes de produção. O Supabase, especialmente com o PostgreSQL, consome uma quantidade considerável de memória para operações de cache e consultas eficientes. Menos de 8GB pode levar a instabilidade, lentidão e falhas no serviço, comprometendo a experiência do usuário e a confiabilidade do seu aplicativo.

Docker Compose é uma ferramenta que permite definir e executar aplicações Docker multi-container. Para o Supabase, ele simplifica o processo de instalação e gerenciamento, pois o Supabase é composto por vários serviços (banco de dados, autenticação, API, etc.) que precisam interagir. Usar Docker Compose garante que todos esses serviços sejam configurados e iniciados corretamente com um único comando, facilitando a implantação e a manutenção.

A segurança do Supabase auto-hospedado envolve várias camadas: use senhas fortes e chaves de API únicas no arquivo .env, configure um proxy reverso com HTTPS (SSL), mantenha seu servidor e os contêineres Docker atualizados, e implemente firewalls. Restrinja o acesso às portas do banco de dados apenas aos containers necessários e monitore ativamente os logs para detectar atividades suspeitas.

O self-hosting transforma um custo potencialmente variável (pago por uso em plataformas gerenciadas) em um custo fixo previsível. Você paga pelo seu VPS e quaisquer serviços adicionais (como domínio ou backups), independentemente do volume de requisições que seu Supabase processa. Isso facilita enormemente o planejamento financeiro e orçamentário de projetos de longo prazo.

A configuração padrão do Supabase self-hosted inclui o PostgreSQL como um serviço Docker. Embora seja possível, conectar o Supabase a um PostgreSQL externo gerenciado não é a abordagem mais comum ou suportada nativamente pela configuração padrão do Docker Compose. Para a maioria dos casos de self-hosting, manter o banco de dados dentro do ecossistema Docker é o mais prático e recomendado.

Backups são cruciais. Você pode configurar backups automáticos do seu banco de dados PostgreSQL. Uma abordagem comum é usar ferramentas como `pg_dump` dentro de um container ou diretamente no host, ou integrar com serviços de backup do seu provedor de VPS. Certifique-se de armazenar os backups em um local seguro e separado do servidor principal.

Controle de dados significa que você, e apenas você, tem acesso direto e irrestrito aos seus dados armazenados. Em um ambiente self-hosted, os dados residem na sua infraestrutura, permitindo que você defina políticas de acesso, segurança e privacidade sem depender das políticas de terceiros. Isso garante soberania e conformidade regulatória.

Comentários (8)

4.9
★ ★ ★ ★ ★
8 avaliações
Leonardo Rocha - E-commerce Brasil
★★★★★

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!

Marcelo Fernandes - SRE Squad
★★★★★

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.

Mariana Rocha
★★★★★

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?

Mariana Barbosa - Infra Cloud
★★★★★

Muito bom o passo a passo de particionamento e disco NVMe. O throughput do I/O subiu consideravelmente nos nossos testes de benchmark.

Julia Ferreira - Consultoria TI
★★★★★

Artigo muito bem escrito e explicativo! Já compartilhei com toda a equipe da empresa. Será que isso funciona também com [tecnologia relacionada]?

Ana Rodrigues
★★★★★

Excelente conteúdo! Aprendi conceitos que não encontrava em outros lugares em português. Será que isso funciona também com [tecnologia relacionada]?

João Silva - E-commerce Brasil
★★★★★

Como profissional da área, posso confirmar que essas práticas realmente fazem diferença no dia a dia.

Carlos Lima - Consultoria TI
★★★★★

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?