Artykuły / Serwer RabbitMQ, Ansible i Vagrant

0f73a755-d3a1-ba60-e666-2670746482d6

O tym jak zainstalować RabbitMQ w Linuksie opisaliśmy w sekcji Tutoriale:

W niniejszym artykule będziemy pracować na Ubuntu jako systemie-gospodarzu (ang. host), natomiast jako system-gość (ang. guest) wybrany został Debian 9 (stretch).

Czym jest Vagrant?

Vagrant to łatwe w użytkowaniu narzędzie służące do konfiguracji i zarządzania przenośnym środowiskiem programistycznym w postaci maszyn wirtualnych.

Wspierane są różne platformy do wirtualizacji:

  • VirtualBox,
  • Hyper-V,
  • Docker,
  • VMware,
  • oraz AWS

My skorzystamy z tej pierwszej, czyli z VirtualBoxa – aktualnie rozwijanego przez firmę Oracle. Jest on dostępny dla popularnych dystrybucji Linuksowych, w tym dla Ubuntu i Debiana.

Pojedyncza maszyna wirtualna reprezenowana jest przez tzw. pudełko (ang. box), a firma HashiCorp odpowiedzialna za rozwój Vagranta udostępnia publiczną listę pudełek z różnego rodzaju systemami operacyjnymi skonfigurowanymi dla konkretnych celów np. do pracy jako serwer www, gdzie sam system będzie zawierał minimalną listę pakietów oraz wybrany serwer www np. Apache, nginx lub lighttpd.

Instalacja pakietu VirtualBox:

$ sudo apt-get install virtualbox virtualbox-dkms virtualbox-guest-additions-iso

Instalacja pakietu Vagrant:

$ sudo apt-get install vagrant

Czym jest Ansible?

Ansible to popularne narzędzie do zarządzania stanem maszyn wirtualnych, zarządzaniem konfiguracją infrastruktury (wiele maszyn komunikujących się ze sobą) i automatyzacją procesów IT.

Za jego rozwój od roku 2015 odpowiada firma Red Hat, dzięki czemu narzędzie to stale podąża za rozwojem oprogramowania linuksowego. Nie obyło się jednak bez strat - część rozwiązań dotyczących Ansible przestała być rozwijana jako oprogramowanie open source i bezpłatnie udostępniana społeczności.

Ansible dostarcza narzędzia dla:

  • udostępniania usług (ang. provisioning),
  • zarządzania konfiguracją (ang. configuration management),
  • oraz wdrażania aplikacji (ang. application deployment).

Ansible pracuje domyślnie w trybie push, czyli aplikowaniu zmian z zarządcy (z reguły komputera administratora) na serwerze (fizycznym lub wirtualnym), którym steruje.

Instalacja pakietu Ansible:

$ sudo apt-get install ansible

Pobranie tzw. playbook'a

W Ansible stan usługi konfigurowany jest za pomocą tzw. playbook'ów, które w języku polskim moglibyśmy nazwać przepisem na dostarczenie konkretnej usługi.

Z repozytorium na GitHubie pobieramy następujący projekt:
https://github.com/evolic/ansible-vagrant-examples

Zawiera on konfigurację dostarczenia usługi (ang. provisioning) – w naszym przypadku serwera RabbitMQ.
W chwili pisania tego artykułu projekt ten zawiera konfigurację tylko dla systemu RabbitMQ.

Projekt ten możemy pobrać albo w postaci pliku ZIP, albo sklonować go za pomocą gita:

$ git clone https://github.com/evolic/ansible-vagrant-examples.git

Zaletą tej drugiej możliwości jest możliwość śledzenia zmian w przypadku eksperymentowania z konfiguracją i być może nawet stworzenia konfiguracji, która nie da się uruchomić.

Pierwsze uruchomienie maszyny wirtualnej

Po pobraniu projektu przechodzimy do katalogu rabbitmq.

W nim uruchamiamy Ansible w celu pobrania wymaganych ról, które pozwalają w jasny i klarowny sposób tworzyć przepisy, które można wykorzystywać w wielu projektach np. przepis instalujący Javę w określonej wersji, który potem zostanie wykorzystany, czy to w usłudze Jenkinsa, czy to ElasticSearch.

$ ansible-galaxy install -r requirements.yml

W pliku Vagrantfile znajduje się konfiguracja Vagranta.

Jako użytkownik będziemy modyfikować głównie plik main.yml znajdujący się w katalogu rabbitmq/provisioning/vars.

Możemy z jego pomocą nadpisać dowolną zmienną wykorzystywaną w rolach Ansible.

W naszym przypadku będą to:

  • wersja pakietu esl-erlang, którą sprawdzamy na tej stronie;
  • wersja pakietu rabbitmq-server,
  • a także login i hasło administratora pośrednika komunikatów.

Aby uruchomić maszynę wirtualną wystarczy komenda:

$ vagrant up

Uruchamia ona - najpierw pobranie obrazu bazowej maszyny wirtualnej wskazanej w pliku Vagrantfile (debian9 w naszym przypadku) - a następnie skonfigurowanie naszej usługi poprzez serię różnych aktywności takich jak pobieranie plików z sieci, instalacja pakietów, kopiowanie plików konfiguracyjnych, etc.

Komendy środowiska Vagrant

Rekonfiguracja (bez zmiany bazowego systemu-gościa) jest możliwa za pomocą polecenia:

$ vagrant provision

Do maszyny możemy dostać się poprzez ssh w następujący sposób:

$ vagrant ssh

Zamknięcie systemu-gościa wykonujemy następująco:

$ vagrant halt

Aby znowu uruchomić system-gościa wystarczy ponowne:

$ vagrant up

W ramach tego artykułu jedynie dotknęliśmy tematu Ansible i jego możliwości. Dzięki przygotowanemu przepisowi na RabbitMQ możemy go bezpiecznie uruchomić na dowolnym komputerze z systemem Linuks, a przez to utworzyć powtarzalne środowisko deweloperskie.

Rola Ansible oraz sam playbook zostały przygotowane na bazie pracy Jeff'a Geerling'a.

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.