O Chatwoot é uma plataforma de suporte ao cliente de código aberto que ajuda empresas a gerenciar conversas com clientes em vários canais. Esta versão utiliza Docker para simplificar o processo de instalação e configuração, garantindo escalabilidade e flexibilidade.
Neste tutorial, vamos passar pelos passos necessários para a instalação do Chatwoot no Ubuntu 22.04, utilizando Docker via Portainer. Caso você já tenha o Portainer instalado e o Traefik (ou outro proxy reverso) ativo, este guia vai te ajudar a configurar o Chatwoot, uma plataforma open-source de comunicação com clientes, com suporte a multi-canais, incluindo WhatsApp.

Isso vai preparar o banco de dados e garantir que todas as tabelas e dados essenciais sejam configurados corretamente.
Essas configurações permitem que o Chatwoot utilize SSL (HTTPS) através do Traefik e funcione com um domínio configurado.
Neste tutorial, vamos passar pelos passos necessários para a instalação do Chatwoot no Ubuntu 22.04, utilizando Docker via Portainer. Caso você já tenha o Portainer instalado e o Traefik (ou outro proxy reverso) ativo, este guia vai te ajudar a configurar o Chatwoot, uma plataforma open-source de comunicação com clientes, com suporte a multi-canais, incluindo WhatsApp.

Pré-requisitos:
- Ubuntu 22.04
- Portainer instalado e funcionando
- Traefik (ou outro proxy reverso) configurado e ativo
- Docker e Docker Compose instalados
Passo 1: Criar o Container do Chatwoot no Portainer
Abra o Portainer e siga estes passos para configurar o container do Chatwoot.- No Portainer, vá para a seção Stacks e clique em Add Stack.
- Nomeie o stack como Chatwoot.
- No campo Web Editor, cole o seguinte código YAML, que cria os serviços para a aplicação principal (Chatwoot) e o Sidekiq, ambos necessários para o funcionamento do Chatwoot.
Código:
version: "3.7"
services:
chatwoot_app:
image: sendingtk/chatwoot:v3.10.3
command: bundle exec rails s -p 3000 -b 0.0.0.0
entrypoint: docker/entrypoints/rails.sh
volumes:
- chatwoot_data:/app/storage
- chatwoot_public:/app
ports:
- 3000:3000
networks:
- network_public
environment:
- INSTALLATION_NAME=chatwoot
- NODE_ENV=production
- RAILS_ENV=production
- INSTALLATION_ENV=docker
- SECRET_KEY_BASE=123458bb7ef6402f6a8bcf5d3be54321
- FRONTEND_URL=https://chatwoot1.masterbot.app.br
- DEFAULT_LOCALE=pt_BR
- FORCE_SSL=true
- ENABLE_ACCOUNT_SIGNUP=false
- REDIS_URL=redis://redis:6379
- POSTGRES_HOST=postgres
- POSTGRES_USERNAME=postgres
- POSTGRES_PASSWORD=AdminAdmin
- POSTGRES_DATABASE=chatwoot
- ACTIVE_STORAGE_SERVICE=local
- RAILS_LOG_TO_STDOUT=true
- USE_INBOX_AVATAR_FOR_BOT=true
- MAILER_SENDER_EMAIL=Chatwoot <[email protected]>
- SMTP_DOMAIN=zoho.com
- SMTP_ADDRESS=smtp.zoho.com
- SMTP_PORT=587
- [email protected]
- SMTP_PASSWORD=Mfcd62!!Mfcd62!!
- SMTP_AUTHENTICATION=login
- SMTP_ENABLE_STARTTLS_AUTO=true
- SMTP_OPENSSL_VERIFY_MODE=peer
- [email protected]
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
resources:
limits:
cpus: "1"
memory: 2048M
#labels:
# - traefik.enable=true
# - traefik.http.routers.chatwoot_app.rule=Host(`chatwoot1.masterbot.app.br`)
# - traefik.http.routers.chatwoot_app.entrypoints=websecure
# - traefik.http.routers.chatwoot_app.tls.certresolver=letsencryptresolver
# - traefik.http.routers.chatwoot_app.priority=1
# - traefik.http.routers.chatwoot_app.service=chatwoot_app
# - traefik.http.services.chatwoot_app.loadbalancer.server.port=3000
# - traefik.http.services.chatwoot_app.loadbalancer.passhostheader=true
# - traefik.http.middlewares.sslheader.headers.customrequestheaders.X-Forwarded-Proto=https
# - traefik.http.routers.chatwoot_app.middlewares=sslheader@docker
chatwoot_sidekiq:
image: sendingtk/chatwoot:v3.10.3
command: bundle exec sidekiq -C config/sidekiq.yml
volumes:
- chatwoot_data:/app/storage
- chatwoot_public:/app
networks:
- network_public
environment:
- INSTALLATION_NAME=chatwoot
- NODE_ENV=production
- RAILS_ENV=production
- INSTALLATION_ENV=docker
- SECRET_KEY_BASE=123458bb7ef6402f6a8bcf5d3be54321
- FRONTEND_URL=https://chatwoot1.masterbot.app.br
- DEFAULT_LOCALE=pt_BR
- FORCE_SSL=true
- ENABLE_ACCOUNT_SIGNUP=false
- REDIS_URL=redis://redis:6379
- POSTGRES_HOST=postgres
- POSTGRES_USERNAME=postgres
- POSTGRES_PASSWORD=AdminAdmin
- POSTGRES_DATABASE=chatwoot
- ACTIVE_STORAGE_SERVICE=local
- RAILS_LOG_TO_STDOUT=true
- USE_INBOX_AVATAR_FOR_BOT=true
- MAILER_SENDER_EMAIL=Chatwoot <[email protected]>
- SMTP_DOMAIN=zoho.com
- SMTP_ADDRESS=smtp.zoho.com
- SMTP_PORT=587
- [email protected]
- SMTP_PASSWORD=Mfcd62!!Mfcd62!!
- SMTP_AUTHENTICATION=login
- SMTP_ENABLE_STARTTLS_AUTO=true
- SMTP_OPENSSL_VERIFY_MODE=peer
- [email protected]
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
resources:
limits:
cpus: "1"
memory: 2048M
volumes:
chatwoot_data:
external: true
name: chatwoot_data
chatwoot_public:
external: true
name: chatwoot_public
networks:
network_public:
external: true
name: network_public
Passo 2: Executar a Migração do Banco de Dados
Após o stack ser iniciado, você precisa realizar a migração do banco de dados. No Portainer:- Acesse o container do Chatwoot.
- Abra o console do container, utilizando o comando /bin/ash.
- Execute o comando para migrar o banco de dados:
Código:
/app # bundle exec rails db:chatwoot_prepare
Isso vai preparar o banco de dados e garantir que todas as tabelas e dados essenciais sejam configurados corretamente.
Passo 3: Configuração do Proxy Reverso (Traefik)
Se você estiver utilizando o Traefik como proxy reverso, as labels comentadas no arquivo YAML do stack podem ser descomentadas para ativar a integração do Chatwoot com o Traefik. Aqui estão os comentários para sua referência: Código:
#labels:
# - traefik.enable=true
# - traefik.http.routers.chatwoot_app.rule=Host(`chatwoot1.masterbot.app.br`)
# - traefik.http.routers.chatwoot_app.entrypoints=websecure
# - traefik.http.routers.chatwoot_app.tls.certresolver=letsencryptresolver
# - traefik.http.routers.chatwoot_app.service=chatwoot_app
# - traefik.http.services.chatwoot_app.loadbalancer.server.port=3000
Essas configurações permitem que o Chatwoot utilize SSL (HTTPS) através do Traefik e funcione com um domínio configurado.