Tutoriale / Instalacja RabbitMQ 3.7.x w Debianie 9

4ed09a45-7332-f416-71e7-068fe14f013f

Krótkie wprowadzenie do systemu Debian

Projekt Debian jest wspólnym działaniem osób, których celem jest stworzenie darmowego systemu operacyjnego. Na tej dystrybucji Linuksa opiera się system Ubuntu czy np. Raspian dla platformy Raspberry Pi.

Jeśli do tej pory używałeś tylko dystrybucji Ubuntu to różnica instalacji pakietów pomiędzy nim, a Debianem jest niewielka.

W Ubuntu używamy własnego użytkownika, a polecenia administracyjne wykonujemy poprzez użycie komendy sudo:

$ sudo polecenie-z-prawami-roota

natomiast w Debianie do administrowania systemem używamy użytkownika root:

# polecenie-z-prawami-roota

Symbol dolara ($) oznacza, że używamy w terminalu zwykłego użytkownika, zaś symbol płotka (#) oznacza, że działamy jako użytkownik root.

Pakiety instalujemy następującym poleceniem:

# apt-get install nazwa-pakietu

Instalacja pakietu z obsługą języka Erlang

Ze strony Erlang Solutions pobieramy odpowiednią wersję pakietu esl-erlang w wersji dla Debiana 9 (Stretch). W momencie pisania tego tutoriala najnowsza wersja tego pakietu miała oznaczenie 20.2.2

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

# dpkg -i esl-erlang_20.2.2-1~debian~stretch_amd64.deb

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:

# 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 stretch 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:

# apt-get update
# apt-get install rabbitmq-server

Sprawdzanie działania systemu RabbitMQ

Status serwera RabbitMQ sprawdzamy za pomocą polecenia:

# 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 14:24:49 UTC; 21s ago
 Main PID: 5115 (beam.smp)
   Status: "Initialized"
   CGroup: /system.slice/rabbitmq-server.service
           ├─5115 /usr/lib/erlang/erts-9.2/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
           ├─5192 /usr/lib/erlang/erts-9.2/bin/epmd -daemon
           ├─5335 erl_child_setup 1024
           ├─5359 inet_gethost 4
           └─5360 inet_gethost 4

Mar 20 14:24:47 webs rabbitmq-server[5115]:   ##  ##
Mar 20 14:24:47 webs rabbitmq-server[5115]:   ##  ##      RabbitMQ 3.7.4. Copyright (C) 2007-2018 Pivotal Software, Inc.
Mar 20 14:24:47 webs rabbitmq-server[5115]:   ##########  Licensed under the MPL.  See http://www.rabbitmq.com/
Mar 20 14:24:47 webs rabbitmq-server[5115]:   ######  ##
Mar 20 14:24:47 webs rabbitmq-server[5115]:   ##########  Logs: /var/log/rabbitmq/rabbit@webs.log
Mar 20 14:24:47 webs rabbitmq-server[5115]:                     /var/log/rabbitmq/rabbit@webs_upgrade.log
Mar 20 14:24:47 webs rabbitmq-server[5115]:               Starting broker...
Mar 20 14:24:49 webs rabbitmq-server[5115]: systemd unit for activation check: "rabbitmq-server.service"
Mar 20 14:24:49 webs systemd[1]: Started RabbitMQ broker.
Mar 20 14:24:50 webs rabbitmq-server[5115]:  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 (Debian):

# 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:

# rabbitmqctl add_user root tajne-haslo

następnie przypisujemy mu rolę administratora:

# rabbitmqctl set_user_tags root administrator

a na końcu ustawiamy vhost i inne uprawnienia:

# rabbitmqctl set_permissions -p / root ".*" ".*" ".*"

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

RabbitMQ Management Overview, wersja 3.7.4, Debian 9

Do tego panelu zaglądać będziemy nie raz w ramach naszej pracy z tym systemem kolejek.

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.