Como instalar o Supabase self-hosted em uma VPS Ubuntu
O Supabase é uma alternativa open-source ao Firebase com PostgreSQL, autenticação, storage, funções e API REST automática. A instalação self-hosted usa o repositório oficial com Docker Compose e inclui mais de 10 serviços. Reserve 60 minutos e um servidor com pelo menos 4 GB de RAM.
Pré-requisitos
- VPS mínima: 2 vCPU · 4 GB RAM · 40 GB SSD (Runstack Pro)
- Sistema: Ubuntu 24.04 LTS
- Docker e Docker Compose instalados
- Git instalado
- Subdomínio apontado para o IP da VPS (ex.: supabase.seudominio.com.br)
- Portas 80 e 443 abertas no firewall
Instalação passo a passo
- 1
Atualizar o sistema e instalar dependências
Instale Docker, Docker Compose e Git.
bashapt update && apt upgrade -y apt install -y git curl # Instalar Docker curl -fsSL https://get.docker.com -o get-docker.sh && sh get-docker.sh docker --version && docker compose version - 2
Clonar o repositório oficial do Supabase
A configuração Docker oficial fica na pasta `docker/` do monorepo do Supabase.
bashgit clone --depth 1 https://github.com/supabase/supabase cd supabase/docker - 3
Copiar o arquivo de exemplo de variáveis
O repositório inclui um `.env.example` completo com todos os valores padrão.
bashcp .env.example .envAtençãoTODOS os valores padrão do .env.example são inseguros e devem ser alterados antes de iniciar os containers pela primeira vez. - 4
Gerar segredos de produção
Gere valores seguros para JWT_SECRET, POSTGRES_PASSWORD e DASHBOARD_PASSWORD. O repositório oficial inclui scripts auxiliares para geração das chaves JWT.
bash# Gerar JWT_SECRET (mínimo 32 caracteres) openssl rand -base64 48 # Gerar POSTGRES_PASSWORD openssl rand -hex 24 # Gerar DASHBOARD_PASSWORD openssl rand -hex 16 # Para ANON_KEY e SERVICE_ROLE_KEY: use o script oficial # (requer as instruções em supabase/docker/README.md) cd supabase/docker cat README.md | grep -A 10 "generate"DicaAs chaves ANON_KEY e SERVICE_ROLE_KEY são JWTs assinados com JWT_SECRET. Veja o script em `supabase/docker/utils/` ou gere manualmente conforme a documentação oficial. - 5
Editar o arquivo .env
Atualize as variáveis críticas de segurança no arquivo .env.
.env# Variáveis obrigatórias a alterar em /supabase/docker/.env: POSTGRES_PASSWORD=senha_postgres_muito_segura JWT_SECRET=seu_jwt_secret_com_minimo_32_caracteres # Gerados com base no JWT_SECRET — veja README do repositório ANON_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9... SERVICE_ROLE_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9... DASHBOARD_USERNAME=supabase DASHBOARD_PASSWORD=senha_dashboard_segura # URL pública do Supabase SITE_URL=https://supabase.seudominio.com.br API_EXTERNAL_URL=https://supabase.seudominio.com.brAtençãoANON_KEY e SERVICE_ROLE_KEY devem ser JWTs válidos assinados com JWT_SECRET. Usar os valores de exemplo do repositório em produção é uma vulnerabilidade crítica de segurança. - 6
Subir todos os serviços
O Docker Compose oficial do Supabase sobe mais de 10 serviços: Studio, Kong, Auth, PostgREST, Realtime, Storage, ImgProxy, Meta, Functions e banco PostgreSQL.
bashcd supabase/docker docker compose up -d # Acompanhar a inicialização docker compose ps # Verificar logs do banco (primeiro serviço a inicializar) docker compose logs db --tail=30DicaA primeira inicialização pode levar 2-5 minutos enquanto o banco aplica as migrações iniciais. - 7
Configurar Nginx como reverse proxy
Exponha o Studio (porta 3000) e o Kong API Gateway (porta 8000) via HTTPS.
bashapt install -y nginx cat > /etc/nginx/sites-available/supabase << 'NGINXEOF' server { listen 80; server_name supabase.seudominio.com.br; return 301 https://$host$request_uri; } server { listen 443 ssl; server_name supabase.seudominio.com.br; ssl_certificate /etc/letsencrypt/live/supabase.seudominio.com.br/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/supabase.seudominio.com.br/privkey.pem; # Kong API Gateway (porta 8000) location / { proxy_pass http://127.0.0.1:8000; 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; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } } NGINXEOF ln -s /etc/nginx/sites-available/supabase /etc/nginx/sites-enabled/supabase nginx -t && systemctl reload nginxAtençãoSubstitua supabase.seudominio.com.br pelo seu subdomínio real. - 8
Obter certificado SSL
Emita o certificado gratuito com Let's Encrypt.
bashapt install -y certbot python3-certbot-nginx certbot --nginx \ -d supabase.seudominio.com.br \ --non-interactive \ --agree-tos \ --email seu@email.com systemctl reload nginx - 9
Configurar firewall UFW
Restrinja as portas expostas.
bashufw allow 22/tcp comment 'SSH' ufw allow 80/tcp comment 'HTTP' ufw allow 443/tcp comment 'HTTPS' ufw --force enable ufw status verbose - 10
Verificar e acessar o Studio
Confirme que todos os serviços estão saudáveis e acesse o painel.
bash# Verificar todos os containers docker compose -f supabase/docker/docker-compose.yml ps # Testar o Kong gateway curl -s http://127.0.0.1:8000/rest/v1/ \ -H "apikey: SUA_ANON_KEY" | head -c 100DicaAcesse https://supabase.seudominio.com.br no navegador. Será solicitado o DASHBOARD_USERNAME e DASHBOARD_PASSWORD definidos no .env.
$ runstack deploy --plan starter
Não quer configurar manualmente?
Não quer configurar manualmente? Implante o Supabase em menos de 3 minutos com a Runstack. Infraestrutura da OPEN DATACENTER, com servidores no Brasil.
Troubleshooting
Perguntas frequentes
[VERIFICAR antes de publicar]
- 1. Verifique as instruções atuais de geração de ANON_KEY e SERVICE_ROLE_KEY no README de supabase/docker/ — o processo pode ter mudado.
- 2. Confirme o número e nome dos serviços no docker-compose.yml atual — o projeto evolui frequentemente.
- 3. Revise SITE_URL e API_EXTERNAL_URL — variáveis que afetam redirecionamentos de autenticação e podem ter nomes diferentes em versões recentes.