A configuração Docker auto-hospedada do Supabase, versão v0.8.3 de 16 de outubro de 2026, inicia 11 contêineres. Um deles é o PostgreSQL 17. Os outros dez são um gateway, login, uma API REST, armazenamento de arquivos, redimensionamento de imagens, atualizações em tempo real, funções de servidor, um pooler de conexões, uma API de administração do banco de dados e o painel Studio. Em um servidor x86, as 11 imagens somam cerca de 2,15 GB de download, segundo a nossa soma dos tamanhos x86 informados no Docker Hub para as tags de imagem do arquivo compose. A imagem oficial do PostgreSQL 17 tem cerca de 161 MB.
A documentação da API do Supabase descreve duas formas de usá-lo. Você pode chamar as APIs dele assim: directly from the browser (two-tier architecture), or as a complement to your own API server (three-tier architecture).
Se um navegador ou app de celular se comunica com o seu banco de dados, esses dez serviços são o backend que você teria que escrever. Se há um servidor seu no meio do caminho, o PostgreSQL é a parte que o seu app usa.
O que o Supabase adiciona ao PostgreSQL
Para cada tarefa abaixo, a coluna do meio indica o serviço do Supabase que a executa, com base na página de arquitetura do Supabase e no README auto-hospedado dele na v0.8.3.
| Tarefa | O que o Supabase oferece | Com PostgreSQL puro |
|---|---|---|
| Cadastro, login e tokens de acesso | Auth (GoTrue), uma API baseada em JWT para usuários e tokens que funciona com a segurança em nível de linha | O login do seu framework, ou uma biblioteca ou serviço de autenticação que você adiciona |
| Uma API que o seu front-end chama | Uma API REST que o PostgREST gera a partir das suas tabelas | Endpoints que você escreve no seu backend, ou o PostgREST rodando sozinho |
| Regras sobre quais linhas cada usuário lê ou altera | Políticas de segurança em nível de linha, com as quais a API REST funciona | A mesma segurança em nível de linha, nativa do PostgreSQL, ou verificações no código do seu app |
| Envio de arquivos e redimensionamento de imagens | Storage, uma API de arquivos com o Postgres cuidando das permissões, mais o imgproxy para imagens | Disco ou armazenamento de objetos, mais o seu próprio código de envio e redimensionamento |
| Atualizações em tempo real no navegador | Realtime, um serviço WebSocket que transmite as alterações do banco de dados | LISTEN e NOTIFY chegam aos clientes do banco de dados, e um navegador precisa de um servidor WebSocket que você adiciona |
| Um painel web | Studio, com login no painel | psql, ou uma página de administração web como o Adminer, que vem no arquivo compose de exemplo da imagem oficial |
| Funções no servidor | Edge Functions, no contêiner do Edge Runtime | O servidor do seu app |
| Pool de conexões | Supavisor | Um pooler que você adiciona quando precisar |
| E-mails de cadastro e de redefinição de senha | Seu próprio servidor SMTP | Seu próprio servidor SMTP |
| Backups e atualizações | Você cuida dos dois, seguindo o calendário de versões do Supabase | Você cuida das atualizações e guarda seus próprios dumps em outro lugar que não o servidor |
Nossa escolha para um caso comum: um app Next.js, React ou mobile que ainda não tem código de servidor é o que mais aproveita o Supabase. Sem ele, tudo isso é código que você escreveria antes do lançamento. Uma equipe que já tem um backend em Rails, Django ou Express ganha pouco com os dez serviços extras.
Escolha o Supabase se
O seu front-end web ou mobile se comunica diretamente com o banco de dados, e você quer login, uma API automática, armazenamento de arquivos e atualizações em tempo real funcionando logo no primeiro dia. Você vai rodar e atualizar dez serviços a mais do que só o PostgreSQL.
Escolha o PostgreSQL puro se
O seu app já tem um backend, em Rails, Django, Laravel, Express ou similar, que cuida dos usuários, dos arquivos e da API. Você vai rodar um único contêiner de banco de dados e adicionar outras peças só quando precisar.
Comece com o Supabase e enxugue
O guia de Docker do Supabase permite remover o Realtime, o Storage, o imgproxy ou o Edge Runtime do arquivo compose. Mantenha as peças que o seu app chama e tire o resto para reduzir o que o servidor exige.
A DreamHost vende os dois como servidores com o software já instalado, a Hospedagem VPS Supabase e a Hospedagem VPS PostgreSQL, nos mesmos planos Stack e pelos mesmos preços. Se você usa o Supabase Cloud hoje e quer saber se um servidor sairia mais barato, comece por quanto o Supabase Cloud custa conforme você cresce. Se está comparando um serviço de PostgreSQL gerenciado com o PostgreSQL puro em um servidor, leia quanto custa o Postgres gerenciado em comparação com um servidor.
O que funcionou logo no primeiro dia
Testamos cada tarefa no Supabase logo após a instalação, sem nenhum código nosso além de scripts de teste, e as sete funcionaram.
- Fazer login de um usuário e obter um token. Criamos o usuário pela API de administração, já que a configuração padrão não tem servidor de e-mail para os e-mails de confirmação.
- Ler e gravar uma tabela via HTTP sob uma política de segurança em nível de linha. O usuário logado viu a sua 1 linha, e uma requisição sem usuário logado recebeu 0 linhas.
- Enviar um arquivo e baixar os mesmos bytes. Usamos um bucket privado, e o download bateu byte a byte.
- Redimensionar uma imagem. O serviço imgproxy transformou um PNG de 800x600 em um de 200 pixels de largura.
- Chamar uma função de servidor. A função hello incluída respondeu.
- Receber um evento quando uma linha é adicionada. Um cliente supabase-js recebeu a nova linha 283 ms após a inserção.
- Abrir um painel web. O Studio pediu o login primeiro.
No PostgreSQL 17 puro, executamos as duas tarefas que o banco de dados faz sozinho. A mesma política de segurança em nível de linha funcionou em SQL, e LISTEN e NOTIFY levaram um evento entre duas sessões SQL. O resto precisa de software além do banco de dados: uma API HTTP, login, armazenamento de arquivos, funções de servidor, uma conexão do navegador para atualizações em tempo real e um painel.
O Realtime nos pegou de surpresa na primeira execução: o cliente supabase-js informou que tinha se inscrito após 35 ms, e a linha que inserimos logo em seguida nunca chegou. Na nova execução, registramos os eventos de sistema do canal: o cliente disse subscribed
aos 32 ms, e a mensagem Subscribed to PostgreSQL
do próprio Realtime chegou cerca de 2,4 segundos depois. Se o seu app grava uma linha logo após se inscrever, escute o evento system do canal e espere essa mensagem antes de inserir.
O que cada um exige do seu servidor
O Supabase publica os requisitos da sua stack. O PostgreSQL não, então nossas medições preenchem essa lacuna. Na tabela, Supabase significa a configuração auto-hospedada v0.8.3 e PostgreSQL significa o PostgreSQL 17 puro.
| Supabase | PostgreSQL | |
|---|---|---|
| Contêineres | 11, ou 13 com Logs & Analytics | 1 |
| Download, x86 | Cerca de 2,15 GB | Cerca de 161 MB |
| Requisitos informados pelo fabricante | Mínimo de 4 GB de RAM, 2 núcleos, 40 GB de SSD. Recomendado: 8 GB ou mais, 4 núcleos ou mais, 80 GB ou mais | Nenhum publicado |
| Versão do PostgreSQL | 17.6, imagem própria do Supabase | 17.11, a 17.x mais recente |
| Memória em repouso, VM de 8 GB | Cerca de 960 MiB | Cerca de 24 MiB |
| Memória em repouso, VM de 4 GB | Cerca de 1.450 MiB, com os 11 contêineres no ar, sem uso de swap | Não testado |
| Maiores consumidores, VM de 8 GB | Studio 207 MiB, Realtime 184 MiB, Supavisor 164 MiB, o banco de dados 100 MiB | O único contêiner |
| CPU em repouso | Cerca de 1,7% | 0% |
| Imagens em disco, arm64 | Cerca de 9,7 GB | Cerca de 670 MB |
| Primeira consulta após iniciar | Cerca de 17 s, tudo saudável em cerca de 22 s | Cerca de 2 s |
| Extensões prontas para ativar | 78, incluindo o pgvector | 45 na imagem do Docker, sem pgvector. No nosso servidor, você pode adicioná-lo com acesso root completo |
| Novas versões | Uma versão estável cerca de uma vez por mês | Versões menores 17.x, com suporte até 8 de nov. de 2029 |
As linhas de memória em repouso até extensões são medições nossas, de 19 de outubro (VM de 8 GB) e 20 de outubro de 2026 (VM de 4 GB), descritas em como medimos. Os tempos consideram as imagens já baixadas. As contagens vêm do arquivo compose na tag self-hosted/v0.8.3 do Supabase, os tamanhos de download vêm dos dados de tags do Docker Hub e os requisitos, da documentação de cada fabricante, tudo consultado em 16 de outubro de 2026.

Logs & Analytics vêm desativados na configuração padrão do Supabase para reduzir o consumo de memória, e você os ativa com um arquivo de override que adiciona Logflare e Vector e aumenta o que a stack exige.
O Stack 4 atende ao mínimo do Supabase. O Stack 8 adiciona a RAM e o disco recomendados, mas mantém 2 vCPU. O Stack 16 é o menor plano que atende a todos os números recomendados pelo Supabase, com 4 vCPU, 16 GB de RAM e 250 GB de armazenamento NVMe, segundo a página de VPS para Supabase, então é a nossa escolha para produção, e o Stack 8 serve para um app pequeno ou uma cópia de staging.
Nosso teste com 4 GB mostra que a stack padrão cabe no Stack 4 em repouso. Os 11 contêineres continuaram rodando sem reiniciar, e a memória deles se estabilizou em pouco mais de um terço dos 3.904 MiB da VM. As imagens ocuparam cerca de 9,7 GB de disco, bem dentro dos 75 GB do Stack 4.
A mesma stack usou cerca de 50% mais memória na VM de 4 GB do que na de 8 GB. Studio, Realtime e o pooler subiram de 16% a 22%, e cinco serviços pequenos aumentaram de duas a sete vezes, como o imgproxy, que foi de cerca de 13 MiB para 94 MiB. Executamos cada teste uma única vez e não conseguimos explicar a diferença, então planejaríamos de 1 a 1,5 GB para o Supabase em repouso e dimensionaríamos o tráfego do seu app em cima disso.
Para o PostgreSQL sozinho, colocaríamos um banco de dados de produção no Stack 8, o plano que a página de VPS para PostgreSQL descreve como Para apps rodando em produção.
O Stack 4, descrito como Para apps leves e projetos individuais,
basta para começar. A página diz que migrar do Stack 4 para o Stack 32 é simples, e o seu ambiente vai junto. Para dimensionar o servidor para qualquer outra coisa que você vá rodar nele, veja de qual plano VPS você precisa.
O que o PostgreSQL puro deixa por sua conta
O seu backend cuida dessas tarefas, e o Rails e o Django já trazem boa parte disso. O Rails vem com um gerador de autenticação, o Active Storage cuida dos envios e das variantes de imagem, e o Action Cable oferece WebSockets ao navegador. O Django tem um sistema de autenticação de usuários nativo, e o Channels adiciona WebSockets. Um app Express adiciona tudo isso como bibliotecas, por exemplo o Socket.IO para uma conexão bidirecional em tempo real entre o navegador e o seu servidor.
O próprio PostgreSQL cobre parte da lista. As políticas de segurança de linha dele limitam, para cada usuário, quais linhas uma consulta retorna ou altera, e as regras de acesso do Supabase são essas mesmas políticas. O LISTEN e o NOTIFY enviam um evento a cada sessão do banco de dados que estiver escutando, então um worker no seu backend pode reagir a novas linhas. Um navegador não abre sessões no banco de dados, então as atualizações em tempo real no navegador passam por um servidor WebSocket seu, como o Action Cable, o Channels ou o Socket.IO. Extensões como pgvector e PostGIS podem ser instaladas no nosso servidor PostgreSQL com acesso root completo.
Se a API automática é a peça de que você sentiria falta, você pode rodar o PostgREST sozinho. Ele é o servidor web por trás da API REST do Supabase, e o README dele diz que ele serves a fully RESTful API from any existing PostgreSQL database.
O dia a dia com o Supabase auto-hospedado
A página de auto-hospedagem do Supabase lista o que você assume ao rodá-lo: manutenção do servidor, manter o sistema operacional e os serviços atualizados, manutenção do Postgres, alta disponibilidade, e backups e recuperação.
- HTTPS. A própria configuração Docker do Supabase responde em HTTP simples, o que é aceitável em uma máquina de teste. Para uso em produção, o guia de proxy do Supabase coloca Caddy ou Nginx com Let’s Encrypt na frente do gateway.
- E-mail. As configurações Docker padrão do Supabase ativam o cadastro por e-mail com confirmação e apontam o envio de e-mails para um contêiner que só existe no arquivo de desenvolvimento do Supabase. Adicione o seu próprio servidor SMTP antes que usuários reais se cadastrem, ou os e-mails de confirmação e redefinição de senha não serão enviados.
- Atualizações. O guia Docker do Supabase diz que ele publica um snapshot estável cerca de uma vez por mês. O script de atualização dele mescla as configurações da nova versão com as suas. Depois, você baixa as novas imagens e recria os contêineres. Faça backup antes de executá-lo.
- Projetos. Uma instalação roda um projeto. O Studio auto-hospedado não comporta várias organizações ou projetos, então um segundo app precisa da sua própria instalação.
O passo a passo de auto-hospedagem traz as etapas de configuração, e o guia de Docker do Supabase é a referência para cada configuração.
Como medimos
A DreamHost rodou as duas stacks em 19 de outubro de 2026, em uma VM de teste local com 2 vCPUs e 7.922 MiB de memória: Ubuntu 24.04.4 em arm64, sob o Colima em um Mac com Apple silicon. Nossos planos rodam em processadores AMD EPYC x86, então este não era um servidor da DreamHost. Como o tamanho das imagens varia conforme o processador, a tabela também informa o download para x86.
O Supabase rodou a partir da pasta Docker da v0.8.3, do jeito que foi publicada, com segredos gerados pelos próprios scripts de chaves dele. O PostgreSQL rodou a partir do arquivo compose de exemplo do Docker Hub, fixado em postgres:17.11, sem o serviço Adminer. Cada valor de memória é a mediana de 12 leituras do docker stats, uma a cada 5 segundos, começando 10 minutos após a inicialização. As imagens foram baixadas antes de cronometrarmos as inicializações.
Em 20 de outubro, rodamos o Supabase de novo em uma segunda VM com o tamanho do Stack 4: 2 vCPUs, 3.904 MiB de memória e sem swap, com as mesmas versões do Ubuntu e do Docker. Usamos uma cópia nova da mesma pasta v0.8.3, novos segredos e as mesmas 12 leituras após 10 minutos. Um pequeno app de teste sem relação com o Supabase, com cerca de 180 MiB, também estava rodando nessa VM. Ele não entra em nenhum dos números do Supabase que citamos.
Rodamos cada configuração uma única vez, então não há variação a relatar. Os testes cobrem uma stack ociosa e o que funciona logo após a instalação. Eles não cobrem um app sob carga nem uma semana de funcionamento, e não testamos com Logs & Analytics ativado.
Perguntas frequentes sobre Supabase ou PostgreSQL puro
O Supabase é basicamente Postgres?
Sim. Todo projeto Supabase recebe um banco de dados PostgreSQL completo, que você pode usar com privilégios totais, e Auth, Storage, Realtime e Edge Functions são construídos sobre ele. Na configuração auto-hospedada, o PostgreSQL é um dos 11 contêineres.
Posso começar com um e migrar para o outro depois?
Sim: suas tabelas são PostgreSQL comum, e a página de arquitetura do Supabase diz que ele usa formatos padrão, como arquivos de dump do Postgres e CSV, para que você possa migrar para dentro e para fora dele. O Supabase Auth guarda cada usuário no seu schema Auth e, pelo que entendemos, qualquer política que chame auth.uid() vai precisar de outra forma de identificar o usuário.
Posso rodar só uma parte do Supabase?
O guia de Docker do Supabase diz que você pode remover Realtime, Storage, imgproxy ou o Edge Runtime do arquivo compose para reduzir o que a stack exige. Retire só o que seu app não vai usar, porque cada um tem seu próprio bloco e suas dependências, que você terá de restaurar se quiser o serviço de volta.
O Supabase auto-hospedado roda com 4 GB de memória?
Ociosa, sim, no nosso teste. Em uma VM de 4 GB e 2 núcleos com o tamanho do Stack 4, os 11 contêineres iniciaram, nenhum foi reiniciado e o Studio carregou, sem uso de swap (o gráfico acima mostra a memória). Não colocamos tráfego nela, e o Supabase recomenda 8 GB e 4 núcleos.
Quais são as desvantagens do Supabase auto-hospedado?
Na configuração Docker do próprio Supabase, você roda e atualiza 11 contêineres, enquanto o PostgreSQL é um só. A stack inteira demora mais para iniciar, e você precisa adicionar seu próprio servidor SMTP e HTTPS. Cada instalação roda um único projeto.
Onde o Neon se encaixa?
A página de preços do Neon o descreve como uma plataforma Postgres hospedada da Databricks, então ele entra na mesma comparação que o Supabase Cloud. Para esse lado, veja quanto custa o Supabase Cloud à medida que você cresce.
Quem ajuda quando algo no servidor quebra?
O suporte da DreamHost está disponível 24/7 para hardware, rede e conectividade. Você gerencia o sistema operacional, o software e a configuração, como explica a página do Supabase VPS. Quanto ao Supabase em si, a página de auto-hospedagem do Supabase diz que o Supabase auto-hospedado tem suporte da comunidade.
Fontes
- Supabase VPS Hosting, DreamHost, 21 de out. de 2026. dreamhost.com/hosting/vps/supabase
- PostgreSQL VPS Hosting, DreamHost, 21 de out. de 2026. dreamhost.com/hosting/vps/postgresql
- Self-Hosting with Docker, Supabase, 16 de out. de 2026. supabase.com/docs/guides/self-hosting/docker
- Self-Hosting, Supabase, 16 de out. de 2026. supabase.com/docs/guides/self-hosting
- Architecture, Supabase, 16 de out. de 2026. supabase.com/docs/guides/getting-started/architecture
- Data REST API, Supabase, 16 de out. de 2026. supabase.com/docs/guides/api
- Database, Supabase, 16 de out. de 2026. supabase.com/docs/guides/database/overview
- Auth, Supabase, 16 de out. de 2026. supabase.com/docs/guides/auth
- Users, Supabase, 21 de out. de 2026. supabase.com/docs/guides/auth/users
- Row Level Security, Supabase, 16 de out. de 2026. supabase.com/docs/guides/database/postgres/row-level-security
- Update your self-hosted deployment, Supabase, 16 de out. de 2026. supabase.com/docs/guides/self-hosting/updating
- Self-hosted proxy with HTTPS, Supabase, 16 de out. de 2026. supabase.com/docs/guides/self-hosting/self-hosted-proxy-https
- Migrate from Postgres to Supabase, Supabase, 16 de out. de 2026. supabase.com/docs/guides/platform/migrating-to-supabase/postgres
- Self-hosted Supabase with Docker: README, CHANGELOG, compose file and versions (tag self-hosted/v0.8.3), Supabase on GitHub, 16 de out. de 2026. github.com/supabase/supabase/tree/self-hosted/v0.8.3/docker
- postgres (Docker Official Image), Docker Hub, 16 de out. de 2026. hub.docker.com/_/postgres
- Versioning Policy, PostgreSQL Global Development Group, 16 de out. de 2026. postgresql.org/support/versioning
- Row Security Policies (PostgreSQL 17 documentation), PostgreSQL Global Development Group, 16 de out. de 2026. postgresql.org/docs/17/ddl-rowsecurity.html
- NOTIFY (PostgreSQL 17 documentation), PostgreSQL Global Development Group, 16 de out. de 2026. postgresql.org/docs/17/sql-notify.html
- PostgREST README, PostgREST on GitHub, 21 de out. de 2026. github.com/PostgREST/postgrest
- Neon pricing, Neon, 16 de out. de 2026. neon.com/pricing
- Securing Rails Applications (authentication generator), Ruby on Rails Guides, 20 de out. de 2026. guides.rubyonrails.org/security.html
- Active Storage Overview, Ruby on Rails Guides, 20 de out. de 2026. guides.rubyonrails.org/active_storage_overview.html
- Action Cable Overview, Ruby on Rails Guides, 20 de out. de 2026. guides.rubyonrails.org/action_cable_overview.html
- User authentication in Django, Django, 20 de out. de 2026. docs.djangoproject.com/pt-br/5.2/topics/auth
- Django Channels, Django Channels, 20 de out. de 2026. channels.readthedocs.io/en/latest
- Socket.IO introduction, Socket.IO, 20 de out. de 2026. socket.io/pt-br/docs/v4
- Supabase images (tag data), Docker Hub, 16 de out. de 2026. hub.docker.com/u/supabase