Como instalar o Chatwoot em uma VPS Ubuntu
O Chatwoot é uma plataforma open-source de atendimento ao cliente com suporte a WhatsApp, e-mail, chat web e muito mais. Este guia usa a instalação via Docker Compose com PostgreSQL e Redis — o método oficial recomendado para ambientes Docker.
Pré-requisitos
- VPS mínima: 2 vCPU · 4 GB RAM · 40 GB SSD (Runstack Pro)
- Sistema: Ubuntu 24.04 LTS
- Docker e Docker Compose instalados (veja /tutorial/como-instalar-docker)
- Subdomínio DNS apontado para o IP da VPS
- 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 Chatwoot.
bashmkdir -p /opt/chatwoot cd /opt/chatwoot - 3
Baixar o arquivo de variáveis de ambiente oficial
O Chatwoot disponibiliza um .env.example no repositório oficial.
bashcurl -L https://raw.githubusercontent.com/chatwoot/chatwoot/develop/.env.example -o .env - 4
Configurar variáveis essenciais no .env
Edite as variáveis obrigatórias para o ambiente de produção.
.env (trecho)# Variáveis obrigatórias a alterar em /opt/chatwoot/.env # URL pública do Chatwoot FRONTEND_URL=https://chat.seudominio.com.br # Banco de dados POSTGRES_HOST=postgres POSTGRES_USERNAME=postgres POSTGRES_PASSWORD=troque_por_senha_forte_aqui POSTGRES_DATABASE=chatwoot # Redis REDIS_URL=redis://:SENHA_REDIS@redis:6379 REDIS_PASSWORD=troque_por_senha_redis_aqui # Segredo Rails SECRET_KEY_BASE=$(openssl rand -hex 64) # E-mail (configurar para envio de notificações) MAILER_SENDER_EMAIL=noreply@seudominio.com.brAtençãoGere um SECRET_KEY_BASE real com `openssl rand -hex 64`. Não use valores de exemplo em produção. Configure também as variáveis de SMTP para envio de e-mails. - 5
Criar o docker-compose.yml
Esta configuração inclui Rails (aplicação), Sidekiq (filas), PostgreSQL e Redis.
docker-compose.yml# /opt/chatwoot/docker-compose.yml services: base: &base image: chatwoot/chatwoot:latest env_file: .env volumes: - storage_data:/app/storage rails: <<: *base depends_on: - postgres - redis ports: - "127.0.0.1:3000:3000" environment: - NODE_ENV=production - RAILS_ENV=production - INSTALLATION_ENV=docker entrypoint: docker/entrypoints/rails.sh command: ["bundle", "exec", "rails", "s", "-p", "3000", "-b", "0.0.0.0"] restart: always sidekiq: <<: *base depends_on: - postgres - redis environment: - NODE_ENV=production - RAILS_ENV=production - INSTALLATION_ENV=docker command: ["bundle", "exec", "sidekiq", "-C", "config/sidekiq.yml"] restart: always postgres: image: pgvector/pgvector:pg16 restart: always volumes: - postgres_data:/var/lib/postgresql/data environment: - POSTGRES_DB=chatwoot - POSTGRES_USER=postgres - POSTGRES_PASSWORD=${POSTGRES_PASSWORD} redis: image: redis:alpine restart: always command: ["sh", "-c", "redis-server --requirepass "$REDIS_PASSWORD""] env_file: .env volumes: - redis_data:/data volumes: storage_data: postgres_data: redis_data: - 6
Preparar o banco de dados
Antes de subir todos os serviços, execute as migrações do banco.
bashcd /opt/chatwoot # Subir apenas o banco e o Redis primeiro docker compose up -d postgres redis # Aguardar o PostgreSQL inicializar (~15s) sleep 15 # Executar migrações e seed docker compose run --rm rails bundle exec rails db:chatwoot_prepareDicaO comando `db:chatwoot_prepare` cria o banco, aplica migrações e insere dados iniciais. Pode levar 1-2 minutos. - 7
Subir todos os serviços
Após as migrações, suba a aplicação completa.
bashcd /opt/chatwoot docker compose up -d # Verificar todos os containers docker compose ps # Acompanhar logs do Rails docker compose logs rails --follow - 8
Configurar Nginx e SSL
Configure o reverse proxy e emita certificado SSL.
bashapt install -y nginx certbot python3-certbot-nginx cat > /etc/nginx/sites-available/chatwoot << 'NGINXEOF' server { listen 80; server_name chat.seudominio.com.br; return 301 https://$host$request_uri; } server { listen 443 ssl; server_name chat.seudominio.com.br; ssl_certificate /etc/letsencrypt/live/chat.seudominio.com.br/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/chat.seudominio.com.br/privkey.pem; client_max_body_size 100M; location / { proxy_pass http://127.0.0.1:3000; 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"; proxy_read_timeout 3600s; } } NGINXEOF ln -s /etc/nginx/sites-available/chatwoot /etc/nginx/sites-enabled/chatwoot nginx -t certbot --nginx \ -d chat.seudominio.com.br \ --non-interactive \ --agree-tos \ --email seu@email.com systemctl reload nginxAtençãoSubstitua chat.seudominio.com.br pelo seu subdomínio real. O FRONTEND_URL no .env deve corresponder a este endereço. - 9
Configurar firewall e criar conta de superadmin
Libere as portas necessárias e crie o primeiro usuário administrador.
bashufw allow 22/tcp && ufw allow 80/tcp && ufw allow 443/tcp ufw --force enable # Criar superadmin via console Rails docker compose exec rails bundle exec rails c # No console Rails, execute: # SuperAdmin.create!(email: 'admin@seudominio.com.br', password: 'senha_forte', password_confirmation: 'senha_forte') # exitDicaAlternativamente, acesse https://chat.seudominio.com.br e crie a conta pelo formulário de registro inicial.
$ runstack deploy --plan starter
Não quer configurar manualmente?
Não quer configurar manualmente? Implante o Chatwoot 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 a imagem mais recente em hub.docker.com/r/chatwoot/chatwoot — fixe uma versão em produção.
- 2. Verifique se o comando `db:chatwoot_prepare` ainda existe na versão atual ou foi substituído por `db:setup`.
- 3. Confirme o arquivo de configuração do Sidekiq (config/sidekiq.yml) na versão atual do repositório.