|
<< Click to Display Table of Contents >> Navigation: Linux - Ubuntu 24.04 > RabbitMQ |
RabbitMQ ist ein Verteiler von Nachrichten. Über RabbitMQ kann man Programme in verschiedenen Programmiersprachen kommunizieren lassen.
Bei der Installation von RabbitMQ muß man eine Client- und eine Server-Installation unterscheiden. Eine Client-Installation ist dann möglich, wenn ein RabbitMQ Server auf einer anderen Maschine genutzt werden soll - ansonsten ist eine Vollinstallation notwendig.
Man beachte das Installationsscript unter "pas".
Die Client-Installation erfolgt durch die Installation eines Packages unter Ubuntu:
sudo apt-get install librabbitmq-dev
Diese Installation legt die notwendige Bibliothek unter '/lib/x86_64-linux-gnu/librabbitmq.so.4' ab. Auf diese Bibliothek greift das Gemstone/RabbitMQ Binding zu. Hierzu braucht man mindestens die Version Gemstone/S 3.6.5.
Bei der Server-Installation greifen wir auf die Installation von Cloudsmith zurück, die auch auf den offiziellen Webseiten von RabbitMQ erwähnt wird als eine der beiden Hauptanbieter von aktuellen Packages.
Die wesentlichen Skripte sind für die aktuellen Ubuntu-Serverlizenzen zusammengefasst.
#!/usr/bin/sh
sudo apt-get install curl gnupg apt-transport-https -y
## Team RabbitMQ's main signing key
curl -1sLf "https://keys.openpgp.org/vks/v1/by-fingerprint/0A9AF2115F4687BD29803A206B73A36E6026DFCA" | sudo gpg --dearmor | sudo tee /usr/share/keyrings/com.rabbitmq.team.gpg > /dev/null
## Cloudsmith: modern Erlang repository
curl -1sLf https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/gpg.E495BB49CC4BBE5B.key | sudo gpg --dearmor | sudo tee /usr/share/keyrings/io.cloudsmith.rabbitmq.E495BB49CC4BBE5B.gpg > /dev/null
## Cloudsmith: RabbitMQ repository
curl -1sLf https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/gpg.9F4587F226208342.key | sudo gpg --dearmor | sudo tee /usr/share/keyrings/io.cloudsmith.rabbitmq.9F4587F226208342.gpg > /dev/null
## Add apt repositories maintained by Team RabbitMQ
sudo tee /etc/apt/sources.list.d/rabbitmq.list <<EOF
## Provides modern Erlang/OTP releases
##
deb [signed-by=/usr/share/keyrings/io.cloudsmith.rabbitmq.E495BB49CC4BBE5B.gpg] https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/deb/ubuntu jammy main
deb-src [signed-by=/usr/share/keyrings/io.cloudsmith.rabbitmq.E495BB49CC4BBE5B.gpg] https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/deb/ubuntu jammy main
## Provides RabbitMQ
##
deb [signed-by=/usr/share/keyrings/io.cloudsmith.rabbitmq.9F4587F226208342.gpg] https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/deb/ubuntu jammy main
deb-src [signed-by=/usr/share/keyrings/io.cloudsmith.rabbitmq.9F4587F226208342.gpg] https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/deb/ubuntu jammy main
EOF
## Update package indices
sudo apt-get update -y
## Install Erlang packages
sudo apt-get install -y erlang-base \
erlang-asn1 erlang-crypto erlang-eldap erlang-ftp erlang-inets \
erlang-mnesia erlang-os-mon erlang-parsetools erlang-public-key \
erlang-runtime-tools erlang-snmp erlang-ssl \
erlang-syntax-tools erlang-tftp erlang-tools erlang-xmerl
## Install rabbitmq-server and its dependencies
sudo apt-get install rabbitmq-server -y --fix-missing
#!/bin/sh
sudo apt-get install curl gnupg apt-transport-https -y
## Team RabbitMQ's signing key
curl -1sLf "https://keys.openpgp.org/vks/v1/by-fingerprint/0A9AF2115F4687BD29803A206B73A36E6026DFCA" | sudo gpg --dearmor | sudo tee /usr/share/keyrings/com.rabbitmq.team.gpg > /dev/null
## Add apt repositories maintained by Team RabbitMQ
sudo tee /etc/apt/sources.list.d/rabbitmq.list <<EOF
## Modern Erlang/OTP releases
##
deb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb1.rabbitmq.com/rabbitmq-erlang/ubuntu/noble noble main
deb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb2.rabbitmq.com/rabbitmq-erlang/ubuntu/noble noble main
## Latest RabbitMQ releases
##
deb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb1.rabbitmq.com/rabbitmq-server/ubuntu/noble noble main
deb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb2.rabbitmq.com/rabbitmq-server/ubuntu/noble noble main
EOF
## Update package indices
sudo apt-get update -y
## Install Erlang packages
sudo apt-get install -y erlang-base \
erlang-asn1 erlang-crypto erlang-eldap erlang-ftp erlang-inets \
erlang-mnesia erlang-os-mon erlang-parsetools erlang-public-key \
erlang-runtime-tools erlang-snmp erlang-ssl \
erlang-syntax-tools erlang-tftp erlang-tools erlang-xmerl
## Install rabbitmq-server and its dependencies
sudo apt-get install rabbitmq-server -y --fix-missing
Die Version von rabbitMQ kann man über das folgende Statement ermitteln:
sudo rabbitmqctl version
Die Konfigurationsdatei sollte im Verzeichnis /etc/rabbitmq liegen. Nach der Installation ist das Verzeichnis aber leer. Um eine Konfigurationsdatei anzuleen, kann man einen einfachen Text-Editor benutzen und eine Datei mit dem Namen rabbitmq.conf anlegen. Dort werden die folgenden Konfigurationseinträge reingeschrieben.
Der Server kann mit dem folgendem Statement gestartet werden:
sudo service rabbitmq-server start
Der Server kann mit dem folgendem Statement angehalten werden:
sudo service rabbitmq-server stop
Der RabbitMQ Server wird nicht automatisch gestartet. Dies kann man aber mit dem folgenden Statemwent erreichen:
sudo systemctl enable rabbitmq-server
Rabbitmq is portable - so you have to do all the stuff by yourself. This ist NOT nice, but ok. You have to change the configuration file to make all stuff working under SSL. After the installation, RabbitMQ is only accessable via plain http. Here an example how to make changes, so that RabbitMQ works under SSL/TLS. You need your certification for your domain, a private key file (alles was mit "blubber" s.u. benannt wird) and a cacertfile (a summary of Level 1 certificates).
management.path_prefix = /rabbitmq
management.ssl.port = 15671
management.ssl.cacertfile = /home/1234567/ssl/all_cacerts.pem
management.ssl.certfile = /home/1234567/ssl/blubber_ssl_certificate.pem
management.ssl.keyfile = /home/1234567/ssl/blubber_private_key.pem
listeners.ssl.default = 5671
ssl_options.cacertfile = /home/1234567/ssl/all_cacerts.pem
ssl_options.certfile = /home/1234567/ssl/blubber_ssl_certificate.pem
ssl_options.keyfile = /home/1234567/ssl/blubber_private_key.pem
ssl_options.verify = verify_peer
# ssl_options.fail_if_no_peer_cert = true
The only problem here is to get a cacertfile. You may either create an example from all certification files located under /etc/ssl/certs via
cat /etc/ssl/certs/* > /home/1234567/ssl/all_cacerts.pem
or via other ways:
•https://curl.se/docs/caextract.html
•http://www.cacert.org/index.php?id=3
Always think about the ports you have to enable in your firewall: 15671, 15672, 5671, 5672 at least.
After a fresh installation there is no UI Management plugin installed. So you have no browser UI to manage your RabbitMQ instance. You have to do this via rabbitmq's command line tool.
sudo rabbitmq-plugins enable rabbitmq_management
Well, when rabbitmq is installed, there is a guest / guest user, but with this user you are not allowed to enter into the UI Management plugin. So you have to add a new user. For a replacement of the guest user, please do not define it as an adminstrator. The solution is more or less:
sudo rabbitmqctl add_user username password
sudo rabbitmqctl set_user_tags username administrator
sudo rabbitmqctl set_permissions -p / username ".*" ".*" ".*"
Die Benutzeroberfläche kann bei https und ssl/tls wie folgt aufgerufen werden:
https://<fullname>:15671 oder https://<fullname>:15671/rabbitmq/
Die Benutzeroberfläche kann lokal mit http aufgerufen werden:
http:/localhost:15672
Für die Anbindung von WebApplication wird das RabbitMQ Web MQTT Plugin genutzt. Es wird mit RabbitMQ ausgeliefert. Die Anwendungen bauen einen WebSocket auf, abonnieren die gewünschten Kanäle und erhalten dann die Nachrichten. Man beachte, daß man für die MQTT Anbindung einen eigenen Benutzer festlegen sollte. Die Credentials für diesen Benutzer erhält der Client über das Session Objekt. Diese Informationen muß er bei der Anmeldung bei MQTT über WebSockets nutzen.
Man möge beachten, dass man den default_user und default_pass für dieses Plugin auf einen Benutzer setzt, der keine Berechtigungen hat. Da die WebSocket Anbindung durch einen Apache getunnelt wird, erscheinen alle Anmeldungen als "localhost" getrieben - und dadurch hätten automatisch der default_user alle Berechtigungen.
Das Plugin gibt einen WebSocket Endpunkt unter 15675 frei ("ws://127.0.0.1:15675/ws").
rabbitmq-plugins enable rabbitmq_web_mqtt
Hier die Konfigurationseinträge für das Plugin. Der benutzer "guest" sollte abgeschaltet werden und ein anderer Benutzer genutzt werden.
web_mqtt.ssl.port = 15676
web_mqtt.ssl.backlog = 1024
web_mqtt.ssl.cacertfile = /path/to/ca_certificate.pem
web_mqtt.ssl.certfile = /path/to/server_certificate.pem
web_mqtt.ssl.keyfile = /path/to/server_key.pem
# needed when private key has a passphrase
# web_mqtt.ssl.password = changeme