Installare RabbitMQ su CentOS 7
Panoramica veloce
RabbitMQ è un broker di messaggi open source scritto in Erlang che implementa AMQP. Fornisce librerie client per i principali linguaggi, supporta più protocolli di messaggistica, code, acknowledgement delle consegne, routing flessibile e vari tipi di exchange. Offre anche API HTTP, strumenti da riga di comando e una console web per la gestione.
Requisiti
- Server CentOS 7 minimo
- Privilegi root (questa guida assume root; se usi sudo, esegui sudo -i)
- Connettività internet per scaricare pacchetti
Aggiornare il sistema base
Prima di installare qualsiasi pacchetto è consigliabile aggiornare i repository e i pacchetti:
yum -y updateDopo l’aggiornamento procedere con l’installazione di Erlang.
Installare Erlang
RabbitMQ richiede Erlang. Poiché Erlang non è disponibile nei repository YUM predefiniti, abilita EPEL:
yum -y install epel-releaseyum -y updateInstalla Erlang e socat:
yum -y install erlang socatVerifica la versione di Erlang:
erl -versionEsempio di output atteso:
[root@liptan-pc ~]# erl -version
Erlang (ASYNC_THREADS,HIPE) (BEAM) emulator version 5.10.4Per entrare nella shell di Erlang:
erlEsempio di prompt:
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>Esci premendo Ctrl+C due volte. Erlang è ora pronto.
Installare RabbitMQ
Scarica il pacchetto RPM precompilato fornito da RabbitMQ (link di esempio alla versione usata originariamente):
wget https://www.rabbitmq.com/releases/rabbitmq-server/v3.6.10/rabbitmq-server-3.6.10-1.el7.noarch.rpmSe non hai wget:
yum -y install wgetImporta la chiave GPG del repository:
rpm --import https://www.rabbitmq.com/rabbitmq-release-signing-key.ascInstalla il pacchetto RPM:
rpm -Uvh rabbitmq-server-3.6.10-1.el7.noarch.rpmRabbitMQ sarà installato sul sistema.
Avviare RabbitMQ
Per avviare il servizio:
systemctl start rabbitmq-serverPer abilitare l’avvio automatico all’avvio del sistema:
systemctl enable rabbitmq-serverPer controllare lo stato:
systemctl status rabbitmq-serverEsempio di output quando il servizio è attivo (mostrato come riferimento):
? 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...Modificare firewall e SELinux
Se usi firewalld, apri le porte usate da RabbitMQ e dai suoi plugin (le porte principali):
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/tcpRicarica la configurazione del firewall:
firewall-cmd --reloadSe SELinux è attivato, consenti l’esecuzione richiesta dal servizio (comando consigliato):
setsebool -P nis_enabled 1Nota importante: l’impostazione SELinux varia a seconda delle politiche aziendali; verifica con il tuo team di sicurezza.
Abilitare la console web di gestione
Abilita il plugin di management per la console web:
rabbitmq-plugins enable rabbitmq_managementAssicurati che i file di RabbitMQ siano di proprietà dell’utente rabbitmq:
chown -R rabbitmq:rabbitmq /var/lib/rabbitmq/Crea un utente amministratore per la console (sostituisci username e password con valori sicuri):
rabbitmqctl add_user admin StrongPassword
rabbitmqctl set_user_tags admin administrator
rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"Accedi alla console da:
http://Your_Server_IP:15672/
Una volta autenticato vedrai la dashboard amministrativa:

Nel tab Admin trovi utenti, virtual host e politiche. Per motivi di sicurezza elimina l’utente Guest se non serve.

Nel tab Queues trovi le code attive; puoi crearne o eliminarne direttamente dall’interfaccia.

Nel tab Connections trovi le connessioni correnti:

Troverai canali e exchange nei rispettivi tab:

Suggerimenti di sicurezza
- Non usare l’utente guest in produzione: cancellalo o limita l’accesso.
- Usa TLS per connessioni esterne (porta 5671) e certificati gestiti dal tuo team di sicurezza.
- Applica politiche di permessi minimi sui virtual host e sugli utenti.
- Monitora le connessioni e le code con alert: code in crescita o consumer inattivi indicano problemi di backpressure.
Alternative di installazione e aggiornamento
- Usare il repository ufficiale di RabbitMQ per aggiornamenti automatici invece di scaricare RPM manualmente. Questo semplifica patch e upgrade.
- Utilizzare container (Docker) o immagini predefinite se preferisci ambienti immutabili e orchestrazione.
- Per ambienti enterprise considerare l’uso di cluster RabbitMQ o soluzioni gestite (PaaS).
Modello mentale per l’uso di RabbitMQ
Pensa a RabbitMQ come a una posta interna: i producers inseriscono messaggi nelle exchange, le exchange instradano verso code e i consumers prelevano i messaggi. Le policy e i binding determinano chi vede cosa.
Checklist per ruolo
- Amministratore di sistema:
- Aggiornare il sistema e installare Erlang
- Installare e avviare rabbitmq-server
- Configurare firewall/SELinux
- Abilitare plugin di management
- SRE/DevOps:
- Configurare monitoraggio e alert (latency, message rates, queue depth)
- Automatizzare backup e restore delle definizioni (rabbitmqctl/export)
- Pianificare aggiornamenti e test di failover
- Sviluppatore:
- Usare librerie client ufficiali
- Implementare retry/backoff nei consumer
- Non lasciare messaggi non ackati per periodi lunghi
Controlli di accettazione e test
- Verificare che il servizio sia attivo: systemctl status rabbitmq-server deve risultare active (running).
- Accedere alla console web su porta 15672 con l’utente amministratore creato.
- Creare una coda di test, pubblicare un messaggio e consumarlo con un client di prova.
- Simulare carico: assicurarsi che le code non crescano indefinitamente e che i consumer elaborino i messaggi.
Risoluzione problemi comuni
- Servizio non parte: controlla journalctl -u rabbitmq-server per errori di avvio.
- Porta 15672 non raggiungibile: verifica firewall-cmd –list-ports e SELinux.
- Erlang non trovato o versione incompatibile: assicurati che la versione di Erlang sia compatibile con la versione di RabbitMQ installata.
- Problemi con plugin: disabilita plugin non necessari con rabbitmq-plugins disable
Quando questa procedura non è adatta
- Per cluster multi-nodo o configurazioni HA questa guida è insufficiente; serve una procedura di clustering con nodi e policy di mirrored queues.
- In ambienti con requisiti di compliance elevati, segui le procedure di sicurezza e gestione certificati del tuo ente di sicurezza.
Mini-methodology per un deployment ripetibile
- Preparare immagine base con CentOS 7 e configurazioni di rete.
- Automatizzare installazione di EPEL, Erlang e RabbitMQ tramite script o Ansible.
- Applicare configurazioni di firewall e SELinux tramite playbook.
- Abilitare plugin e creare utenti/permessi via script di provisioning.
- Eseguire test funzionali automatici (pub/cons).
Conclusione
Ora RabbitMQ è installato e accessibile via web sulla porta 15672. Segui le checklist per ruoli, applica le best practice di sicurezza e considera metodi alternativi (repo ufficiale, container o cluster) per ambienti di produzione più complessi.
Importante: questa guida usa un esempio di RPM e comandi; verifica sempre le versioni correnti sul sito ufficiale RabbitMQ prima di eseguire in produzione.