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.
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
Atualizar o sistema e instalar Docker
Garanta que Docker e Docker Compose estão instalados.
bashapt update && apt upgrade -y curl -fsSL https://get.docker.com -o get-docker.sh && sh get-docker.sh docker --version && docker compose version - 2
Criar o diretório do projeto
Crie a pasta de trabalho para o Typebot.
bashmkdir -p /opt/typebot cd /opt/typebot - 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 32DicaCopie os dois valores gerados — serão usados no arquivo .env a seguir. - 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.brAtençãoENCRYPTION_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
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:DicaO Builder (criação de bots) fica na porta 8080 e o Viewer (execução dos bots pelos usuários finais) na porta 8081. - 6
Subir os containers
Inicie todos os serviços e aguarde a inicialização completa.
bashcd /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 --followDicaA primeira inicialização pode levar 2-3 minutos enquanto o banco de dados aplica as migrações do Typebot. - 7
Configurar Nginx para Builder e Viewer
Configure dois virtual hosts: um para o Builder e outro para o Viewer.
bashapt 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 nginxAtençãoSubstitua 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
Configurar firewall e verificar
Restrinja as portas e confirme o acesso ao Builder.
bashufw 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.brDicaAcesse 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.