Instalar RabbitMQ no CentOS 7

Este guia mostra passo a passo como instalar Erlang e RabbitMQ no CentOS 7, abrir as portas necessárias no firewall, ativar o console web e criar um usuário administrador. Inclui checklist de verificação, comandos essenciais, dicas de segurança e resolução de problemas comuns.
O que é RabbitMQ
RabbitMQ é um broker de mensagens open source, escrito em Erlang e que implementa o protocolo AMQP (Advanced Message Queueing Protocol). Fornece bibliotecas cliente para as principais linguagens, suporte a vários protocolos de mensageria, confirmação de entrega, roteamento flexível e vários tipos de exchange. Tem API HTTP, ferramenta de linha de comando e uma interface web para administração.
Pré-requisitos
- Servidor CentOS 7 com instalação mínima
- Privilégios de root. Se usar sudo, execute sudo -i antes.
Atualizar o sistema base
Antes de instalar pacotes, atualize repositórios e pacotes:
yum -y update
Após a atualização, prossiga para instalar o Erlang.
Instalar Erlang
RabbitMQ exige Erlang. Erlang não está no repositório YUM padrão do CentOS 7, por isso instale o EPEL e depois o Erlang e dependências:
yum -y install epel-release
yum -y update
yum -y install erlang socat
Verifique a versão do Erlang:
erl -version
Exemplo de saída:
[root@liptan-pc ~]# erl -version
Erlang (ASYNC_THREADS,HIPE) (BEAM) emulator version 5.10.4
Entre no shell do Erlang com:
erl
Saída de amostra do shell Erlang:
Erlang R16B03-1 (erts-5.10.4) [source] [64-bit] [async-threads:10] [hipe] [kernel-poll:false]
Eshell V5.10.4 (abort with ^G)
1>
Para sair do shell pressione Ctrl+C duas vezes.
Instalar RabbitMQ
Faça o download do pacote RPM pré-compilado para CentOS 7 (exemplo usado nesta receita: v3.6.10):
wget https://www.rabbitmq.com/releases/rabbitmq-server/v3.6.10/rabbitmq-server-3.6.10-1.el7.noarch.rpm
Se não tiver wget instalado, execute yum -y install wget.
Importe a chave GPG do projeto RabbitMQ:
rpm --import https://www.rabbitmq.com/rabbitmq-release-signing-key.asc
Instale o pacote RPM:
rpm -Uvh rabbitmq-server-3.6.10-1.el7.noarch.rpm
RabbitMQ ficará instalado no sistema.
Iniciar e habilitar o serviço
Inicie o serviço RabbitMQ:
systemctl start rabbitmq-server
Habilite o serviço para iniciar automaticamente no boot:
systemctl enable rabbitmq-server
Verifique o status do serviço:
systemctl status rabbitmq-server
Exemplo de saída quando iniciado com sucesso:
? rabbitmq-server.service - RabbitMQ broker
Loaded: loaded (/usr/lib/systemd/system/rabbitmq-server.service; enabled; vendor preset: disabled)
Active: active (running) since Sat 2017-07-15 18:59:14 UTC; 3min 22s ago
Main PID: 29006 (beam.smp)
Status: "Initialized"
CGroup: /system.slice/rabbitmq-server.service
??29006 /usr/lib64/erlang/erts-9.0/bin/beam.smp -W w -A 64 -P 1048576 -t 5000000 -stbt db -zdbbl 32000 -K tr...
??29149 /usr/lib64/erlang/erts-9.0/bin/epmd -daemon
??29283 erl_child_setup 1024
??29303 inet_gethost 4
??29304 inet_gethost 4
Jul 15 18:59:13 centos rabbitmq-server[29006]: Starting broker...
Jul 15 18:59:14 centos rabbitmq-server[29006]: systemd unit for activation check: "rabbitmq-server.service"
Jul 15 18:59:14 centos systemd[1]: Started RabbitMQ broker.
Jul 15 18:59:14 centos rabbitmq-server[29006]: completed with 0 plugins.
Regras de firewall e SELinux
Se o firewalld estiver ativo, abra as portas necessárias. As portas abaixo são tipicamente usadas por RabbitMQ e plugins (AMQP, management plugin, STOMP, MQTT, clustering):
firewall-cmd --zone=public --permanent --add-port=4369/tcp
firewall-cmd --zone=public --permanent --add-port=25672/tcp
firewall-cmd --zone=public --permanent --add-port=5671-5672/tcp
firewall-cmd --zone=public --permanent --add-port=15672/tcp
firewall-cmd --zone=public --permanent --add-port=61613-61614/tcp
firewall-cmd --zone=public --permanent --add-port=1883/tcp
firewall-cmd --zone=public --permanent --add-port=8883/tcp
Recarregue as regras do firewall:
firewall-cmd --reload
Se o SELinux estiver ativado, permita a operação do serviço conforme exemplo:
setsebool -P nis_enabled 1
Nota: ajuste políticas SELinux específicas à sua política de segurança se necessário.
Acessar o console web
Ative o plugin de gerenciamento web:
rabbitmq-plugins enable rabbitmq_management
Ajuste propriedade dos arquivos do RabbitMQ:
chown -R rabbitmq:rabbitmq /var/lib/rabbitmq/
Crie um usuário administrador para o console web e defina permissões (troque admin e StrongPassword):
rabbitmqctl add_user admin StrongPassword
rabbitmqctl set_user_tags admin administrator
rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"
Para acessar o painel administrativo, abra no navegador:
http://Your_Server_IP:15672/
Você verá a tela de login do RabbitMQ.
Depois do login, visualizará o dashboard administrativo.
Na aba Admin você encontra usuários, virtual hosts e políticas. Exclua o usuário Guest por segurança.
Na aba Queues você gerencia filas: criar, inspecionar e excluir.
Na aba Connections aparece a lista de conexões ativas.
As abas Channels e Exchanges mostram canais e exchanges respectivamente.
Checklist rápido de implantação
- Sistema CentOS 7 atualizado
- EPEL instalado
- Erlang e socat instalados
- RPM do RabbitMQ instalado e assinaturas importadas
- Serviço rabbitmq-server ativo e habilitado
- Portas do firewall abertas e firewall recarregado
- SELinux ajustado conforme política
- Plugin rabbitmq_management ativado
- Usuário administrador criado e usuário Guest removido
Comandos essenciais (cheat sheet)
- Atualizar sistema: yum -y update
- Instalar EPEL: yum -y install epel-release
- Instalar Erlang: yum -y install erlang socat
- Baixar RabbitMQ: wget
- Importar GPG: rpm –import https://www.rabbitmq.com/rabbitmq-release-signing-key.asc
- Instalar RPM: rpm -Uvh rabbitmq-server-*.rpm
- Iniciar serviço: systemctl start rabbitmq-server
- Habilitar no boot: systemctl enable rabbitmq-server
- Ativar plugin web: rabbitmq-plugins enable rabbitmq_management
Segurança e boas práticas
- Nunca deixe o usuário Guest ativo em produção.
- Use senhas fortes para usuários administrativos e considere autenticação externa (LDAP, SASL) quando apropriado.
- Habilite TLS para conexões AMQP e HTTP (management) em ambientes públicos.
- Restrinja as portas do cluster a uma rede privada quando usar clustering entre nós.
- Faça backups regulares das configurações e políticas (rabbitmqctl export_definitions).
Quando a instalação pode falhar e como diagnosticar
- Problema: Erlang ausente ou versão incompatível — verifique erl -version e instale versão compatível.
- Problema: Porta já em uso — use ss -tlnp para identificar processos que ocupam as portas necessárias.
- Problema: Serviço não sobe — verifique logs em /var/log/rabbitmq/ e o journal com journalctl -u rabbitmq-server -b.
- Problema: Plugin de management não aparece — rode rabbitmq-plugins list para confirmar o status.
Exemplo de solução rápida de erro comum
Se o serviço não inicia por erro de memória ou limites do sistema, aumente os limites de file descriptors temporariamente e teste:
ulimit -n 65536
systemctl restart rabbitmq-server
Para persistir, ajuste /etc/security/limits.conf e a unidade systemd com LimitNOFILE.
Papel e responsabilidades (checklist por função)
- Administrador de sistema: instalar pacotes, configurar firewall/SELinux, gerenciar updates do OS.
- Administrador de mensageria/DevOps: configurar políticas, vhosts, usuários, monitoramento e backups.
- Desenvolvedor: usar bibliotecas cliente apropriadas, testar reconexão e tratamento de mensagens duplicadas.
Glossário rápido
- Broker: componente que recebe, roteia e entrega mensagens entre produtores e consumidores.
- Exchange: ponto de entrada para mensagens que decide para quais filas elas vão.
- Queue (fila): estrutura que guarda mensagens até serem consumidas.
Resumo
Agora você tem os passos necessários para instalar e configurar RabbitMQ no CentOS 7: atualizar o sistema, instalar Erlang, instalar o RPM do RabbitMQ, abrir portas no firewall, habilitar o plugin de management e criar um usuário administrador. Siga o checklist, aplique as recomendações de segurança e use os comandos do cheat sheet para acelerar a operação.
Importante: mantenha o software atualizado e valide compatibilidade entre versões de Erlang e RabbitMQ antes de atualizar em produção.