Tutoriais/Supabase

    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.

    ~60 minjunho/2026 · Ubuntu 24.04 LTS

    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. 1

      Atualizar o sistema e instalar dependências

      Instale Docker, Docker Compose e Git.

      bash
      apt 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. 2

      Clonar o repositório oficial do Supabase

      A configuração Docker oficial fica na pasta `docker/` do monorepo do Supabase.

      bash
      git clone --depth 1 https://github.com/supabase/supabase
      cd supabase/docker
    3. 3

      Copiar o arquivo de exemplo de variáveis

      O repositório inclui um `.env.example` completo com todos os valores padrão.

      bash
      cp .env.example .env
      Atenção
      TODOS os valores padrão do .env.example são inseguros e devem ser alterados antes de iniciar os containers pela primeira vez.
    4. 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"
      Dica
      As 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. 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.br
      Atenção
      ANON_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. 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.

      bash
      cd 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=30
      Dica
      A primeira inicialização pode levar 2-5 minutos enquanto o banco aplica as migrações iniciais.
    7. 7

      Configurar Nginx como reverse proxy

      Exponha o Studio (porta 3000) e o Kong API Gateway (porta 8000) via HTTPS.

      bash
      apt 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 nginx
      Atenção
      Substitua supabase.seudominio.com.br pelo seu subdomínio real.
    8. 8

      Obter certificado SSL

      Emita o certificado gratuito com Let's Encrypt.

      bash
      apt 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. 9

      Configurar firewall UFW

      Restrinja as portas expostas.

      bash
      ufw allow 22/tcp comment 'SSH'
      ufw allow 80/tcp comment 'HTTP'
      ufw allow 443/tcp comment 'HTTPS'
      ufw --force enable
      ufw status verbose
    10. 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 100
      Dica
      Acesse 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.