Como instalar o Typebot em uma VPS Ubuntu

O Typebot é uma plataforma open-source para criar chatbots conversacionais e formulários interativos. A instalação self-hosted usa Docker Compose com dois serviços principais, Builder (criação de bots) e Viewer (execução), mais PostgreSQL e Redis para persistência.

cerca de 30 minjunho/2026 · Ubuntu 24.04 LTS

Antes de começar

VPS mínima
2 vCPU · 2 GB RAM · 20 GB SSD (Runstack Basic ou superior)
Sistema
Ubuntu 24.04 LTS
Também
  • Docker e Docker Compose instalados (veja /tutorial/como-instalar-docker)
  • Dois subdomínios DNS apontados para o IP da VPS (ex.: bot.seudominio.com.br e view.seudominio.com.br)
  • Portas 80 e 443 abertas no firewall

Instalação passo a passo

  1. 1

    Atualizar o sistema e instalar Docker

    Garanta que Docker e Docker Compose estão instalados.

    bash
    apt update && apt upgrade -y
    curl -fsSL https://get.docker.com -o get-docker.sh && sh get-docker.sh
    docker --version && docker compose version
  2. 2

    Criar o diretório do projeto

    Crie a pasta de trabalho para o Typebot.

    bash
    mkdir -p /opt/typebot
    cd /opt/typebot
  3. 3

    Criar o arquivo .env

    Configure os segredos e URLs necessários para o Typebot. O ENCRYPTION_SECRET deve ter exatamente 32 caracteres.

    bash
    # Gerar ENCRYPTION_SECRET (32 caracteres)
    openssl rand -base64 24 | head -c 32
    
    # Gerar NEXTAUTH_SECRET
    openssl rand -base64 32
  4. 4

    Configurar variáveis no .env

    Crie o arquivo .env com as variáveis obrigatórias. O Typebot usa o DATABASE_URL para conectar ao PostgreSQL interno.

    .env
    # /opt/typebot/.env
    
    # Banco de dados
    DATABASE_URL=postgresql://postgres:typebot@typebot-db:5432/typebot
    
    # Segredos
    ENCRYPTION_SECRET=SUA_CHAVE_DE_32_CARACTERES_AQUI
    NEXTAUTH_SECRET=SEU_NEXTAUTH_SECRET_AQUI
    
    # URLs dos dois serviços
    NEXTAUTH_URL=https://bot.seudominio.com.br
    NEXT_PUBLIC_VIEWER_URL=https://view.seudominio.com.br
    
    # Admin (opcional — restringe cadastros ao e-mail indicado)
    ADMIN_EMAIL=admin@seudominio.com.br
    
    # E-mail SMTP (necessário para magic link de login)
    # SMTP_USERNAME=usuario@seudominio.com.br
    # SMTP_PASSWORD=senha_smtp
    # SMTP_HOST=smtp.seudominio.com.br
    # SMTP_PORT=587
    # NEXT_PUBLIC_SMTP_FROM=noreply@seudominio.com.br
  5. 5

    Criar o docker-compose.yml

    Esta configuração oficial inclui o Builder (porta 8080), Viewer (porta 8081), PostgreSQL e Redis.

    docker-compose.yml
    # /opt/typebot/docker-compose.yml
    services:
      typebot-db:
        image: postgres:16
        restart: always
        volumes:
          - db-data:/var/lib/postgresql/data
        environment:
          POSTGRES_DB: typebot
          POSTGRES_PASSWORD: typebot
        healthcheck:
          test: ["CMD-SHELL", "pg_isready -U postgres"]
          interval: 5s
          timeout: 5s
          retries: 5
        networks:
          - typebot-network
    
      typebot-redis:
        image: redis:alpine
        restart: always
        command: --save 60 1 --loglevel warning
        healthcheck:
          test: ["CMD-SHELL", "redis-cli ping | grep PONG"]
          start_period: 20s
          interval: 30s
          retries: 5
          timeout: 3s
        volumes:
          - redis-data:/data
        networks:
          - typebot-network
    
      typebot-builder:
        image: baptistearno/typebot-builder:latest
        restart: always
        depends_on:
          typebot-redis:
            condition: service_healthy
          typebot-db:
            condition: service_healthy
        ports:
          - "127.0.0.1:8080:3000"
        env_file: .env
        environment:
          REDIS_URL: redis://typebot-redis:6379
        networks:
          - typebot-network
    
      typebot-viewer:
        image: baptistearno/typebot-viewer:latest
        restart: always
        depends_on:
          typebot-redis:
            condition: service_healthy
          typebot-db:
            condition: service_healthy
        ports:
          - "127.0.0.1:8081:3000"
        env_file: .env
        environment:
          REDIS_URL: redis://typebot-redis:6379
        networks:
          - typebot-network
    
    networks:
      typebot-network:
        driver: bridge
    
    volumes:
      db-data:
      redis-data:
  6. 6

    Subir os containers

    Inicie todos os serviços e aguarde a inicialização completa.

    bash
    cd /opt/typebot
    docker compose up -d
    
    # Acompanhar inicialização (aguarde o healthcheck do DB passar)
    docker compose ps
    
    # Logs do Builder
    docker compose logs typebot-builder --follow
  7. 7

    Configurar Nginx para Builder e Viewer

    Configure dois virtual hosts: um para o Builder e outro para o Viewer.

    bash
    apt install -y nginx certbot python3-certbot-nginx
    
    # Virtual host do Builder
    cat > /etc/nginx/sites-available/typebot-builder << 'NGINXEOF'
    server {
        listen 80;
        server_name bot.seudominio.com.br;
        return 301 https://$host$request_uri;
    }
    server {
        listen 443 ssl;
        server_name bot.seudominio.com.br;
        ssl_certificate /etc/letsencrypt/live/bot.seudominio.com.br/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/bot.seudominio.com.br/privkey.pem;
        location / {
            proxy_pass http://127.0.0.1:8080;
            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
    
    # Virtual host do Viewer
    cat > /etc/nginx/sites-available/typebot-viewer << 'NGINXEOF'
    server {
        listen 80;
        server_name view.seudominio.com.br;
        return 301 https://$host$request_uri;
    }
    server {
        listen 443 ssl;
        server_name view.seudominio.com.br;
        ssl_certificate /etc/letsencrypt/live/view.seudominio.com.br/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/view.seudominio.com.br/privkey.pem;
        location / {
            proxy_pass http://127.0.0.1:8081;
            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/typebot-builder /etc/nginx/sites-enabled/typebot-builder
    ln -s /etc/nginx/sites-available/typebot-viewer /etc/nginx/sites-enabled/typebot-viewer
    nginx -t
    
    # Emitir certificados para ambos os subdomínios
    certbot --nginx \
      -d bot.seudominio.com.br \
      -d view.seudominio.com.br \
      --non-interactive \
      --agree-tos \
      --email seu@email.com
    
    systemctl reload nginx
  8. 8

    Configurar firewall e verificar

    Restrinja as portas e confirme o acesso ao Builder.

    bash
    ufw allow 22/tcp && ufw allow 80/tcp && ufw allow 443/tcp
    ufw --force enable
    
    # Testar Builder
    curl -I https://bot.seudominio.com.br
    
    # Testar Viewer
    curl -I https://view.seudominio.com.br

Não quer configurar manualmente?

Implante o Typebot em menos de 5 minutos com a Runstack. Infraestrutura da OPEN Datacenter, com servidores em São Paulo.

Se der problema

Configure as variáveis SMTP no .env e reinicie os containers. Sem SMTP configurado, o login via magic link não funciona.

bash
docker compose up -d

Confirme que NEXT_PUBLIC_VIEWER_URL no .env aponta para a URL correta do Viewer. Se errado, recrie os containers após corrigir o .env.

bash
docker compose down && docker compose up -d

O PostgreSQL pode não ter inicializado completamente. Aguarde o healthcheck passar e reinicie o Builder.

bash
docker compose ps
docker compose restart typebot-builder

O Typebot Builder é uma aplicação Next.js e exige pelo menos 2 GB de RAM. Em servidores com menos memória, considere upgrade.

Certifique-se de que a URL do webhook no bloco "Webhook" do Typebot aponta para a URL HTTPS pública do n8n, não para localhost.

Perguntas frequentes

Tecnicamente sim: o Builder e o Viewer devem estar em domínios separados para funcionar corretamente. Você pode usar subdomínios do mesmo domínio principal (ex.: typebot.seudominio.com.br e bot.seudominio.com.br).

O Typebot pode ser integrado ao WhatsApp via Evolution API ou Baileys. O fluxo do bot é criado no Typebot e a Evolution API gerencia a conexão com o WhatsApp.

No Builder, acesse o bot → Settings → Export. O arquivo JSON exportado pode ser importado em outra instância via Dashboard → Import a typebot.

Sim. O Typebot self-hosted suporta múltiplos workspaces e usuários. Convide membros da equipe pelo workspace Settings.

Execute `docker compose pull && docker compose up -d` no diretório /opt/typebot. Faça backup do banco antes de atualizações maiores.