Manual
Esta página trata da publicação do GG.chatbot em um servidor, manualmente. Se você quer rodá-lo localmente para desenvolvimento, veja o guia de instalação local.
A forma mais simples de começar é com o serviço gerenciado oficial na nuvem. Alta disponibilidade, backups, segurança e manutenção ficam por conta de mim, Baptiste, fundador do GG.chatbot. A versão em nuvem economiza bastante tempo e recursos de desenvolvimento. Para a maioria dos sites acaba sendo a melhor relação custo-benefício, e a receita financia a manutenção e a evolução do projeto. Ou seja, você apoia software fair source e ainda recebe um ótimo serviço.
Requisitos
- Um banco Postgres hospedado em algum lugar. Para produção, o Neon é o provedor que eu escolho. Não é link de afiliado: é simplesmente o provedor que uso e recomendo para produção. Você também pode usar qualquer provedor Postgres compatível ou hospedar o Postgres por conta própria.
- Um servidor com Node.js 24.x, bun, Nginx e PM2 instalados.
- Experiência em publicar aplicações Next.js com PM2. Veja este guia para mais informações.
Primeiros passos
- Bifurque ou clone o repositório e mude para a versão estável mais recente.
git clone git@github.com:<username>/typebot.io.git
cd typebot.io
git checkout latest- Configure as variáveis de ambiente copiando os arquivos de exemplo e seguindo o guia de configuração para preencher os valores que faltam.
cp .env.example .envO usuário do banco precisa ter o papel SUPERUSER. Você prepara e migra o
banco com o comando bunx nx db:migrate prisma.
- Instale as dependências
bun install- Execute as migrações do banco
bunx nx db:migrate prisma- Compile o builder e o viewer
bunx nx run-many -t build -p builder,viewerSe você encontrar o erro Node ran out of memory, aumente o limite de memória
do Node.js. Por exemplo, NODE_OPTIONS=--max-old-space-size=4096 eleva o
limite para 4 GB. Veja esta resposta no
Stack Overflow
para mais detalhes.
Publicação
Publicar o builder
Na raiz do repositório, inicie o builder com o PM2:
pm2 start bunx --name=typebot-builder -- nx start builder -- -p 3000Publicar o viewer
Na raiz do repositório, inicie o viewer com o PM2:
pm2 start bunx --name=typebot-viewer -- nx start viewer -- -p 3001Você pode alterar as portas informadas após o -p. Os comandos do PM2
precisam ser executados na raiz do repositório, para que o Nx consiga
resolver o workspace.
Configuração do Nginx
Você pode usar a configuração abaixo para servir o builder e o viewer com Nginx. Lembre-se de substituir os valores de server_name pelos domínios da sua instância — eles devem corresponder ao NEXTAUTH_URL e ao NEXT_PUBLIC_VIEWER_URL. Veja este guia para um passo a passo de configuração do Nginx com PM2.
server {
listen 80;
server_name typebot.example.com;
return 301 https://typebot.example.com$request_uri;
}
server {
listen 443 ssl;
server_name typebot.example.com;
# managed by Certbot
ssl_certificate /etc/letsencrypt/live/typebot.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/typebot.example.com/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
location ^~ / {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
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_cache_bypass $http_upgrade;
}
}
server {
listen 80;
server_name bot.example.com;
return 301 https://bot.example.com$request_uri;
}
server {
listen 443 ssl;
server_name bot.example.com;
# managed by Certbot
ssl_certificate /etc/letsencrypt/live/bot.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/bot.example.com/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
location ^~ / {
proxy_pass http://localhost:3001;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
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_cache_bypass $http_upgrade;
# Necessary to enable message streaming
proxy_buffering off;
}
}