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).
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:
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
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:
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
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ć.
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:
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.
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.
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.