Tutoriale / Instalacja RabbitMQ 3.7.x w Ubuntu 16.04

427ac29a-0fd4-a26d-044c-d4e9a8fea748

Najprostszą metodą instalacji serwera RabbitMQ jest wybranie go w Menadżerze Pakietów systemu Linuksowego, w konsolowych apt-get, czy aptitude lub w okienkowym Synaptic Manager.

Wcześniej jednak potrzebujemy zainstalować odpowiednią wersję pakietu Erlang.

Instalacja pakietu z obsługą języka Erlang

Ze strony Erlang Solutions pobieramy odpowiednią wersję pakietu esl-erlang w wersji dla Ubuntu 16.04 (Xenial Xerus). W momencie pisania tego tutoriala najnowsza wersja tego pakietu miała oznaczenie 20.3

Po ściągnięciu jej do katalogu roboczego uruchamiamy instalację:

$ sudo dpkg -i esl-erlang_20.3-1~ubuntu~xenial_amd64.deb 
Selecting previously unselected package esl-erlang.
(Reading database ... 62653 files and directories currently installed.)
Preparing to unpack esl-erlang_20.3-1~ubuntu~xenial_amd64.deb ...
Unpacking esl-erlang (1:20.3) ...
dpkg: dependency problems prevent configuration of esl-erlang:
[...]

Program dpkg nie jest w wstanie rozwiązać zależności pakietu esl-erlang, dlatego posłużymy się w tym celu programem apt w następujący sposób:

$ sudo apt-get install -f

W trakcie wykonywania tego polecenia zostaniemy poproszeni o zgodę na doinstalowanie dodatkowych pakietów na co się oczywiście zgadzamy poprzez wpisanie Y.

[...]
0 upgraded, 102 newly installed, 0 to remove and 50 not upgraded.
2 not fully installed or removed.
Need to get 64.3 MB of archives.
After this operation, 320 MB of additional disk space will be used.
Do you want to continue? [Y/n]

Po pomyślnej instalacji przechodzimy do kolejnego kroku.

Instalacja pakietu z RabbitMQ

Aby zautomatyzować proces aktualizacji serwera RabbitMQ w przyszłości, dodamy zawierające go repozytorium do katalogu /etc/apt/sources.list.d, w którym znajdują się listy repozytoriów przetwarzanych przez program apt.

W tym celu wykonujemy następujące polecenie:

$ echo "deb https://dl.bintray.com/rabbitmq/debian xenial main" | sudo tee /etc/apt/sources.list.d/bintray.rabbitmq.list

Kolejnym krokiem jest pobranie klucza publicznego dla powyższego repozytorium:

$ wget -O- https://dl.bintray.com/rabbitmq/Keys/rabbitmq-release-signing-key.asc | sudo apt-key add -

a następnie odświeżenie listy z pakietami i zainstalowanie pakietu rabbitmq-server w tradycyjny dla Debiana sposób:

$ sudo apt-get update
$ sudo apt-get install rabbitmq-server

Sprawdzanie działania systemu RabbitMQ

Status serwera RabbitMQ sprawdzamy za pomocą polecenia:

$ sudo service rabbitmq-server status

W rezultacie powinniśmy zobaczyć podobną odpowiedź:

● rabbitmq-server.service - RabbitMQ broker
   Loaded: loaded (/lib/systemd/system/rabbitmq-server.service; enabled; vendor preset: enabled)
   Active: active (running) since Tue 2018-03-20 12:10:59 UTC; 15s ago
 Main PID: 7146 (beam.smp)
   Status: "Initialized"
   CGroup: /system.slice/rabbitmq-server.service
           ├─7146 /usr/lib/erlang/erts-9.3/bin/beam.smp -W w -A 64 -P 1048576 -t 5000000 -stbt db -zdbbl 1280000 -K true -- -root /usr/lib/erlang -progname erl -- -home /var/lib/rabbitmq
           ├─7223 /usr/lib/erlang/erts-9.3/bin/epmd -daemon
           ├─7366 erl_child_setup 1024
           ├─7390 inet_gethost 4
           └─7391 inet_gethost 4

Mar 20 12:10:57 webs rabbitmq-server[7146]:   ##  ##
Mar 20 12:10:57 webs rabbitmq-server[7146]:   ##  ##      RabbitMQ 3.7.4. Copyright (C) 2007-2018 Pivotal Software, Inc.
Mar 20 12:10:57 webs rabbitmq-server[7146]:   ##########  Licensed under the MPL.  See http://www.rabbitmq.com/
Mar 20 12:10:57 webs rabbitmq-server[7146]:   ######  ##
Mar 20 12:10:57 webs rabbitmq-server[7146]:   ##########  Logs: /var/log/rabbitmq/rabbit@webs.log
Mar 20 12:10:57 webs rabbitmq-server[7146]:                     /var/log/rabbitmq/rabbit@webs_upgrade.log
Mar 20 12:10:57 webs rabbitmq-server[7146]:               Starting broker...
Mar 20 12:10:59 webs rabbitmq-server[7146]: systemd unit for activation check: "rabbitmq-server.service"
Mar 20 12:10:59 webs systemd[1]: Started RabbitMQ broker.
Mar 20 12:11:00 webs rabbitmq-server[7146]:  completed with 0 plugins.

Instalacja panelu administracyjnego

Po zainstalowaniu serwera kuriera komunikatów (działającego na porcie 5672) potrzebujemy jeszcze doinstalować prosty panel administracyjny stworzony również przez twórców tego systemu już w formie pluginu. W tym celu należy wykonać polecenie:

$ sudo rabbitmq-plugins enable rabbitmq_management

Aby sprawdzić, czy panel administracyjny został zainstalowany poprawnie (a zarazem i sam serwer pośrednika komunikatów), wystarczy wpisać w przeglądarce: http://localhost:15672/

RabbitMQ Management Login Screen

Domyślny login i hasło to guest.

Konto gościa jest dostarczane na początek przygody z systemem RabbitMQ, jednak posiada ono pewne ograniczenia: nie możemy z niego korzystać z innego adresu niż localhost, a więc nie dostaniemy się przez to konto do zdalnego serwera, na którym został zainstalowany nasz kurier komunikatów.

W ogromnej ilości przypadków nadawca komunikatów, pośrednik komunikatów oraz odbiorca komunikatów będą znajdować się właśnie na osobnych serwerach.

Dodanie nowego konta administracyjnego

Ze względu na to, że z użytkownika guest można korzystać z poziomu tej samej maszyny (localhost) potrzebujemy stworzyć nowe konto administracyjne.

Najpierw tworzymy użytkownika o nazwie root:

$ sudo rabbitmqctl add_user root tajne-haslo

następnie przypisujemy mu rolę administratora:

$ sudo rabbitmqctl set_user_tags root administrator

a na końcu ustawiamy vhost i inne uprawnienia:

$ sudo rabbitmqctl set_permissions -p / root ".*" ".*" ".*"

Po tym wszystkim logujemy się nowo utworzonym kontem do panelu administracyjnego RabbitMQ.

RabbitMQ Management Overview, wersja 3.7.4, Ubuntu 16.04

Do tego panelu zaglądać będziemy nie raz w ramach naszej pracy z tym pośrednikiem/kurierem komunikatów.

Tomasz Kuter

Web Developer z ponad 8-letnim, komercyjnym doświadczeniem w tworzeniu stron i aplikacji internetowych oraz paneli administracyjnych w PHP, JavaScript, HTML i CSS.
Aktualnie zainteresowany architekturą mikroserwisów, które umożliwiają budowanie skalowalnych aplikacji internetowych.