0.Wstęp
W dzisiejszy czasach, nieustanie coś się zmienia, co chwile pojawia się nowa wersja czegoś tam, dodatkowe funkcje, naprawione funkcje, poprawiona wydajność itd…
Lub abo po prostu szanujemy nasz własny czas i klawiaturę zaczynamy wtedy szukać sposobu jak tu zautomatyzować kilka prostych zadań. Przygotować maszynę do testów lub nawet do szybkiego powstanie całego provisnionigu na nowo. I tu własnie wchodzą do gry takie narzędzia jak Vagrant i Ansible. Vagranta można porównać do garnca na zupe, na dać dobry grunt na interes
A samo ansible do wora składników, której efektem końcowym ma być owa zupa
0.1 Cel
Automatyczne przygotowanie systemu i usług do najnowszej odsłony wordpressa. Zakładając, że usługa www i mysql mają działać na odrębnych maszynach wirtualnych. Mają budować sie od zera( system vanilia -podstawowy pakiet)
0.2 Wykorzystane technologie
- Vagrant 1.9.1 -narzędzie do bardziej sprawniejszego tworzenia maszyn wirtualnych.
- Ansbile 2.2.1.0 – narzędzie do automatyzacji wykonywanych zadań na maszynach.
- Virualbox 5.1.14 – odpowiada za emulacje pracy komputera (wirtualizacja).
- Nginx 1.6.2 – Serwer stron www.
- mysql-server – Serwer bazy danych opartych o mysql
- php5-fpm 5.6.30-0+deb8u1 (fpm-fcgi) – zmodyfikowany php – wygenerowane raz strone dla danego requestu, ładuje na stałe do pamięci RAM, dzięki czemu zwiększa się wydajność stron pisanych w php.
- debian/jessie64 – wykorzystana czysta maszyna z bazy hasiCorp – 3.16.0-4-amd64 #1 SMP Debian 3.16.39-1 (2016-12-30) x86_64 GNU/Linux
- Wordprees 4.7 – popularny cms do blogowania.
- Zadania robione na maszynie – 4.9.8-1-ARCH LINUX
1. Przygotowanie i Instalacja
2. Konfiguracja
Na samym początku zaczniemy od przygotowania kliku pliczków potrzebnych dla vagranta, asnbile i uruchomienia usług na serwerze www i bazy danych:
Dla serwera web:
- nginx.conf – konfiguracja serwera www.
- default – konfiguracja strony dla nginx.
- www.conf– konfiguracja modułu fpm dla php.
- wp-config.php– konfiguracja dla wordpressa.
Dla serwera db:
- my.cnf – konfiguracja serwera mysql.
- wp.sql – polecania sql dla bazy wordpress.
Każdy z tych plików, będą kopiowane do właściwego miejsca i serwera za pomocąz skrypta w ansible-playbook.
Dla varganta i ansbil:e
- VagrantFile – konfiguracja maszyn wirtualnych, interfejsy, pamieć itp..
- setup-all.yml – skrypt do ansible-playbook – przygotowuje nasze maszyny do pracy
- inventory.ini – spis maszyn wirtualnych podzielony w naszym przypadku na dwie role: [web] i [db]
2.1 Pliki do serwera web (nginx, php-fpm)
Aby przygotować do pracy serwer Nginx+ php5-fpm, musimy przynajmniej ogarnąć te trzy pliczki:
a) /etc/nginx/sites-enabled/default
W tym pliku definiujemy domyślnego VirtualHosta. Zakładam, że mamy tylko jedną stronę do obsłużenia.
- server { } – w tym bloku definiujemy nasz server www
- listen – port na którym będzie nasłuchiwał serwer www
- root – określa ścieżkę do zasobu naszej strony.
- location / {} – w tym bloku definiujemy co ma zrobić nginx dla danego zapytania servera
- fastcgi_pass 127.0.0.1:9000; – włączenie obsługi php-fpm dla wszystkich plików php
b) /etc/nginx/nginx.conf
Chyba standardowa konfiguracja dla każdego nginx
c) /etc/php5/fpm/pool.d/www.conf
Konfiguracja modułu php5-fpm.
- listen – określamy pool dla fpm na którym nasłuchuje
2.2 Plik do serwera MySql
a) /etc/mysql/my.cnf
Plik do konfiguracji serwera mysql
- port 3306 – port na którym serwer będzie słuchał
- bind-address = 192.168.50.51 -adres ip na którym serwer będzie nasłuchiwał
b)wp.sql
Plik będzie dumpowany do mysql, znajdują się w nim dwa polecenia, które dodają użytkownika do bazy.
2.3 Plik do WordPressa
a) wp-config.php
W tym pliczku znajduje sie podstawowa konfiguracja potrzebna do odpalenia wordpressa.
- define(’DB_NAME’, 'wp_db’); – nazwa bazy danych
- define(’DB_USER’, 'wp_web’); – użytkownika posiadającego pełne uprawnienia do bazy danych.
- define(’DB_PASSWORD’, 'mypassword’); – hasełko dla tego użtkownika
- define(’DB_HOST’, '192.168.50.51′); – adres na którym nasłuchuje serwer mysql
2.4 Konfiguracja Vagrant
a) VagrantFile
- w.vm.box = „debian/jessie64” – nazwa vmkim, na której będziemy budować system. Jest to najnowszy, stabilny i czysty debian
- (0..0).each do |i| …. end – pętla, która w tym przypadku, wykona się tylko raz
- „web#{i}” – dodaje zmienną z pętli do nazwy
- d.vm.provision „shell”, run: „always”, inline: „ip route add 192.168.11.0/24 dev eth1”
– wykonanie polecanie na gotowej maszynie
2.5 Konfiguracja Ansible
a) inventory.ini
W tym pliczku dzielimy hosty na poszczególne role. Wykorzystujemy tutaj sztywne mapowanie nazwy hostów. Czyli każda vm musi zostać też dodana do /etc/hosts
web0 -> 192.168.40.40
db -> 192.168.50.51
b) setup-all.yml
- – hosts: all
sudo: yes
gather_facts: no – operacje przeznaczone dla wszystkich hostów wykonywane prawami roota - tasks:
– name: install vim
apt: name=vim state=”installed” update_cache=yes – instalacja aplikacji za pomocą menadżera apt-get, przed samą instalacją, zostanie wykonanie polecenie apt-get update
notify: restart nginx
handlers:
– name: restart nginx
service: name=nginx state=restarted – po poprawnej instalacji pakietu, zostanie wywołana funkcja restartu nginx- – name: kopiowanie my.cnf i restart myqsl
template: src=my.cnf dest=/etc/mysql/my.cnf – kopiowanie pliku z miejsca gdzie został odpalony skrypt setup-all.yml w właściwe miejsce na serwerze
3. Let’s make magic – vagrant up & ansible-playbook
4. Finał