Tutoriais/Typebot

    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.

    ~30 minjunho/2026 · Ubuntu 24.04 LTS

    Pré-requisitos

    • VPS mínima: 2 vCPU · 2 GB RAM · 20 GB SSD (Runstack Basic ou superior)
    • Sistema: Ubuntu 24.04 LTS
    • 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
      Dica
      Copie os dois valores gerados — serão usados no arquivo .env a seguir.
    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
      Atenção
      ENCRYPTION_SECRET deve ter exatamente 32 caracteres. Se mudar após criar bots, as configurações criptografadas ficam inacessíveis. Configure SMTP para habilitar login via magic link.
    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:
      Dica
      O Builder (criação de bots) fica na porta 8080 e o Viewer (execução dos bots pelos usuários finais) na porta 8081.
    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
      Dica
      A primeira inicialização pode levar 2-3 minutos enquanto o banco de dados aplica as migrações do Typebot.
    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
      Atenção
      Substitua bot.seudominio.com.br e view.seudominio.com.br pelos seus subdomínios reais. O NEXTAUTH_URL e NEXT_PUBLIC_VIEWER_URL no .env devem corresponder exatamente a esses subdomínios.
    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
      Dica
      Acesse https://bot.seudominio.com.br no navegador e faça login com o e-mail configurado em ADMIN_EMAIL (recebe magic link por e-mail se SMTP estiver configurado).

    $ runstack deploy --plan starter

    Não quer configurar manualmente?

    Não quer configurar manualmente? Implante o Typebot em menos de 3 minutos com a Runstack. Infraestrutura da OPEN DATACENTER, com servidores no Brasil.

    Troubleshooting

    Perguntas frequentes

    [VERIFICAR antes de publicar]

    • 1. Confirme o docker-compose.yml oficial em github.com/baptisteArno/typebot.io — o arquivo pode ter mudado.
    • 2. Verifique se as imagens ainda são baptistearno/typebot-builder e baptistearno/typebot-viewer na versão atual.
    • 3. Confirme as variáveis de ambiente obrigatórias no README atual — nomes podem mudar entre versões.