Rocket.Chat Self-Hosted: Tutorial de Instalação e Escalabilidade

9 min de leitura Comunicação Interna
Rocket.Chat Self-Hosted: Tutorial de Instalação e Escalabilidade

O Rocket.Chat é uma das soluções de comunicação interna mais robustas e flexíveis disponíveis no mercado open source. Para profissionais de TI e administradores de sistemas, optar por uma versão self-hosted (auto-hospedada) não é apenas uma questão de controle de dados, mas também uma oportunidade para otimizar custos de infraestrutura e garantir a conformidade com políticas rigorosas de segurança corporativa. Este tutorial técnico detalha o processo completo de instalação e configuração do Rocket.Chat em um ambiente VPS Linux, focando na escalabilidade e na estabilidade do serviço.

A arquitetura moderna do Rocket.Chat permite o uso de containers Docker, o que simplifica drasticamente a gestão de dependências, atualizações e backups. Ao invés de lidar com compilações complexas de Node.js e MongoDB diretamente no sistema operacional host, utilizaremos uma abordagem baseada em imagens oficiais, garantindo um ambiente isolado e reproduzível.

Pré-requisitos de Infraestrutura

Antes de iniciar o processo de instalação, é fundamental garantir que a infraestrutura base esteja preparada. A escolha correta da instância na sua VPS impactará diretamente na performance do chat, especialmente quando o número de usuários simultâneos crescer.

Recomendamos os seguintes mínimos para um ambiente de produção estável com até 50 usuários ativos:

  • Sistema Operacional: Ubuntu Server 22.04 LTS ou Debian 11/12 (ambos amplamente suportados pela comunidade Docker).
  • Recurso de CPU: Mínimo de 2 vCPUs dedicadas.
  • Memória RAM: 4 GB são suficientes para o banco de dados e a aplicação, mas 8 GB oferecem margem para picos de uso e caching eficiente.
  • Armazenamento: SSD ou NVMe com pelo menos 20 GB livres. O Rocket.Chat armazena histórico de mensagens e arquivos anexados; disco rápido é crucial para latência baixa.
  • Banda Larga: Conexão dedicada estável, preferencialmente com upload simétrico se a equipe for grande.

Além do hardware, você precisará de um domínio registrado (ex: chat.suaempresa.com.br) e acesso root ou sudo à sua VPS. A configuração de DNS deve apontar o subdomínio para o IP público da sua VPS antes de prosseguir.

Passo 1: Preparação do Ambiente Linux

O primeiro passo é garantir que o sistema operacional esteja atualizado e com as dependências básicas instaladas. Abra seu terminal SSH e conecte-se à sua instância.

sudo apt update && sudo apt upgrade -y
sudo apt install curl gnupg lsb-release -y

Com o sistema atualizado, precisamos instalar o Docker Engine e o Docker Compose. A maneira mais segura é utilizar o repositório oficial da Docker.

sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

Adicione o repositório ao seu sistema:

echo "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Agora, instale os pacotes do Docker:

sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y

Verifique a instalação para garantir que o daemon está rodando corretamente:

sudo docker --version
sudo docker compose version

Passo 2: Estruturação do Projeto e Docker Compose

Agora que o ambiente está pronto, vamos criar a estrutura de diretórios para o projeto Rocket.Chat. Isso facilita a manutenção e o backup dos dados persistentes.

sudo mkdir -p /opt/rocket-chat/data
cd /opt/rocket-chat

Crie um arquivo chamado docker-compose.yml. Este arquivo orquestra os contêineres da aplicação e do banco de dados. Utilize o editor de sua preferência, como o nano:

sudo nano docker-compose.yml

Cole a seguinte configuração no arquivo. Esta versão utiliza volumes para persistência dos dados do MongoDB e configurações básicas de rede:

version: '3'
services:
  rocketchat:
    image: rocket.chat:latest
    restart: unless-stopped
    volumes:
      - /opt/rocket-chat/uploads:/app/uploads
    environment:
      - ROOT_URL=http://chat.suaempresa.com.br
      - MONGO_URL=mongodb://mongo:27017/rocketchat
      - MONGO_OPLOG_URL=mongodb://mongo:27017/local
      - DEPLOY_METHOD=docker
    depends_on:
      - mongo
    ports:
      - 3000:3000

  mongo:
    image: mongo:4.4
    restart: unless-stopped
    volumes:
      - /opt/rocket-chat/data/db:/data/db
      - /opt/rocket-chat/data/db-init:/docker-entrypoint-initdb.d
    command: mongod --oplogSize 128 --replSet rs0 --storageEngine=mmapv1

  mongo-init-replica:
    image: mongo:4.4
    depends_on:
      - mongo
    entrypoint: [ 'sh', '-c', 'for i in $(seq 1 30); do mongo mongo/mongo:27017 --eval "rs.initiate()" && break; echo "Waiting for MongoDB..."; sleep 5; done' ]

Atenção: Substitua http://chat.suaempresa.com.br pela URL real do seu domínio. Isso é crítico para a geração de tokens de autenticação e links corretos nas notificações.

Salve o arquivo (no nano, pressione Ctrl+O, Enter, e depois Ctrl+X) e inicie os contêineres:

sudo docker compose up -d

Aguarde alguns minutos enquanto o MongoDB inicializa e replica. Você pode acompanhar o log com:

sudo docker compose logs -f rocketchat

Passo 3: Configuração de Segurança e Reverse Proxy

Expor a porta 3000 diretamente na internet não é uma prática recomendada para produção. O ideal é utilizar um Reverse Proxy (como Nginx ou Traefik) que gerencie o tráfego HTTPS e redirecione as requisições para o container Docker.

Neste tutorial, utilizaremos o Nginx com Let's Encrypt para garantir certificados SSL gratuitos e seguros.

Instale o Nginx:

sudo apt install nginx certbot python3-certbot-nginx -y

Configure o bloco de servidor do Nginx. Crie um arquivo no diretório sites-available:

sudo nano /etc/nginx/sites-available/rocketchat

Insira a seguinte configuração, ajustando os caminhos dos certificados conforme necessário:

server {
    listen 80;
    server_name chat.suaempresa.com.br;

    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-Nginx-Proxy true;
        proxy_cache_bypass $http_upgrade;
    }
}

Habilite o site e teste a configuração:

sudo ln -s /etc/nginx/sites-available/rocketchat /etc/nginx/sites-enabled/
sudo nginx -t

Se o teste for positivo, reinicie o Nginx e obtenha o certificado SSL:

sudo systemctl restart nginx
sudo certbot --nginx -d chat.suaempresa.com.br

O Certbot irá pedir para confirmar se deseja redirecionar todo o tráfego HTTP para HTTPS. Selecione a opção 2 (Redirecionar). Isso garante que toda a comunicação interna seja criptografada.

Passo 4: Configuração Inicial e Otimização

Acesse https://chat.suaempresa.com.br. A interface de configuração inicial do Rocket.Chat será exibida. Siga os passos:

  1. Crie a conta de Administrador Global.
  2. Configure o nome da organização e o domínio.
  3. Defina as preferências de idioma (Português - Brasil).

Após o login, vá em Administração do Sistema > Configurações para ajustar parâmetros críticos:

  • Accounts: Configure políticas de senha fortes e autenticação em dois fatores (2FA) se necessário.
  • Message: Ajuste o tempo de retenção de mensagens se houver conformidade regulatória específica.
  • File Storage: Certifique-se de que o armazenamento está configurado corretamente. Para escalabilidade futura, considere integrar com um serviço de Object Storage (como MinIO ou AWS S3) para não sobrecarregar o disco local da VPS.

Passo 5: Estratégias de Escalabilidade e Manutenção

O Rocket.Chat single-node é poderoso, mas a verdadeira escalabilidade vem da distribuição de carga. À medida que sua empresa cresce, considere as seguintes estratégias de infraestrutura:

Multicasting e Redis: Para clusters com múltiplos nós do Rocket.Chat, o Redis é essencial para gerenciar sessões e broadcast de mensagens em tempo real. Adicione um serviço Redis ao seu docker-compose.yml e configure a variável REDIS_URL.

Balanceamento de Carga: Utilize o Nginx ou HAProxy como balanceador de carga na frente de múltiplas instâncias do container rocketchat. Certifique-se de que as sessões são mantidas (sticky sessions) ou compartilhadas via Redis.

Backup Automatizado:

A perda de dados é inaceitável. Crie um script de backup simples para rodar diariamente via Cron:

#!/bin/bash
DATE=$(date +%F)
BACKUP_DIR="/opt/rocket-chat/backups"
mkdir -p $BACKUP_DIR

# Backup do MongoDB
sudo docker exec rocketchat_mongo_1 mongodump --out /data/db-backup
sudo cp -r /data/db-backup $BACKUP_DIR/mongo-$DATE.gz
gunzip $BACKUP_DIR/mongo-$DATE.gz 2>/dev/null || mv $BACKUP_DIR/mongo-backup $BACKUP_DIR/mongo-$DATE

# Backup dos uploads
sudo tar -czf $BACKUP_DIR/uploads-$DATE.tar.gz /opt/rocket-chat/uploads/

Configure este script para rodar semanalmente e envie os arquivos resultantes para um local externo (S3, Google Drive ou outra VPS) usando rclone ou rsync.

Conclusão

Instalar o Rocket.Chat em uma VPS Linux utilizando Docker é um processo que combina facilidade de implementação com poderosas capacidades de personalização. Ao seguir este tutorial, você estabeleceu não apenas um servidor de chat, mas uma plataforma de comunicação segura, privada e sob seu controle total.

Lembre-se que a manutenção contínua — atualizações de imagem Docker, patches de segurança do Nginx e monitoramento de recursos da VPS — é vital para garantir a disponibilidade do serviço. Com a infraestrutura adequada, o Rocket.Chat escala bem para atender desde pequenas equipes até grandes corporações, tornando-se uma peça central na estratégia de comunicação interna moderna.

Para dúvidas específicas sobre configurações avançadas ou integração com LDAP/Active Directory, consulte a documentação oficial do Rocket.Chat e os fóruns da comunidade técnica.

Esse tutorial foi útil?

Comentários (0)

Seja o primeiro a comentar.

Deixe seu comentário

Seu comentário será analisado antes de ser publicado.

0/2000