Ansible Gids: Maak een Ansible Playbook voor LEMP Stack
Ansible is een eenvoudig automatiseringstool dat het uitrollen van software toepassingen, cloud provisioning, en configuratiebeheer automatiseert. Het is een server orkestratie gereedschap dat je helpt om een groot aantal server nodes te beheren en te besturen vanuit enkele plaatsen die ‘Control Machines’ heten. Ansible werd in 2012 gemaakt door Michael DeHaan en is geschreven in Python en Powershell.
In deze zelfstudie laten we je zien hoe je een basis Ansible Playbook maakt voor de provisioning van de LEMP Stack op Ubuntu 18.04 Server. Je leert hoe je een basis Ansible Playbook maakt dat kan worden opgeschaald voor andere PHP project toepassingen zoals WordPress, Nextcloud enz.
Voorwaarde
- 2 Ubuntu OS.
- 10.5.5.20 ansible
- 10.5.5.26 voorziening
- Kennis van basisgebruik Ansible
- Root voorrechten
Wat we zullen doen:
- Ansible Playbook Project opzetten
- Genereer Ansible Playbook Rollen Directory Structuur
- Opzetten hosts en site.yml
- Opzetten ‘gewone’ Rollen – Basis instelling
- Setup ‘web’ Rollen – Nginx en PHP-FPM Configuratie
- Setup ‘db’ Rollen – MySQL Database Configuratie
- Testen van
Stap 1 – Opzetten Ansible Speelboek Project
Ansible Playbook is een reeks instructies die je stuurt om op een enkele of een groep server hosts uit te voeren. Het vertegenwoordigt de ansible-provisioning, waarbij de automatisering als taken wordt gedefinieerd, en alle klussen zoals het installeren van packages, het bewerken van bestanden, door ansible modules worden gedaan.
Het Ansible Speelboek bevat enkele basisinstellingen, waaronder hosts en gebruikersinformatie van de provision servers, een takenlijst die op de provision servers zal worden uitgevoerd, sjabloon en aangepaste configuraties, en een groep variabelen die deel uitmaken van sjablonen en taken.
Maak eerst de master project directory aan op de ‘ansible-control’ machine. In de master project directory zullen al onze playbook directories, bestanden, en configuraties worden opgeslagen.
Maak de Ansible projectdirectory ‘project-lemp’ en ga er in.
mkdir project-lemp/
cd project-lemp
Maak nu nieuwe configuratiebestanden ‘hosts’ en ‘site.yml’ aan, en maak dan een nieuwe directory met de naam ‘roles’.
touch hosts site.yml
mkdir -p roles/
Details over de configuraties:
hosts – Het is een inventarisbestand dat stukjes informatie bevat over door ansible beheerde servers. Je kunt er een groep servers mee aanmaken die je gemakkelijker kunt beheren en het inventarisbestand zelf kunt schalen. Het inventarisbestand kan met veel verschillende formaten gemaakt worden, waaronder de INI en YAML formaten.
site.yml – Het master playbook bestand dat bevat welke groep hosts beheerd zal worden met onze beschikbare rollen.
rollen – het is een groep Ansible playbooks die gebruikt zullen worden om de server te provisionen. De Ansible rollen hebben hun eigen directory structuren, elke rol zal directories bevatten zoals tasks, handlers, vars enz.
Stap 2 – Genereer Ansible rollen voor de mappenstructuur
In deze stap gaan we ansible rollen directory genereren met het ansible-galaxy commando. We zullen twee van rollen genereren, de ‘gewone’ rollen en de ‘web’ rollen.
Ga binnen de ‘project-lemp’ directory naar de directory ‘roles’.
cd roles/
Genereer de rollen structuur directory en bestanden voor de ‘common’ en ‘web’ rollen door het onderstaande ansible-galaxy commando uit te voeren.
ansible-galaxy init common
ansible-galaxy init web
ansible-galaxy init db
Controleer daarna alle beschikbare ansible rollen directory structuren met het volgende commando.
tree .
Je krijgt het resultaat te zien zoals hieronder.
Stap 3 – Stel ‘hosts’ en ‘site.yml’ in
Het ‘hosts’ bestand zal de lijst en groep bevatten van de server die door Ansible beheerd wordt. Voor deze gids maken we een groep met de naam ‘lemp’ met het lid ‘server01’ en het IP adres 10.5.5.26.
Bewerk het ‘hosts’ bestand met vim editor.
vim hosts
Plak de configuratie hieronder.
[lemp]
server01 ansible_host=10.5.5.26
Bewaar en sluit.
Bewerk vervolgens het configuratiebestand site.yml.
vim site.yml
Plak de configuraties hieronder.
---
- hosts: lemp
remote_user: hakase
become: yes
roles:
- common
- web
- db
Bewaar en sluit.
Stap 3 – Gemeenschappelijke rollen instellen
In deze stap gaan we de gemeenschappelijke rollen instellen. En om dat te doen, moeten we een lijst maken van taken die we gaan uitvoeren.
Hieronder de lijst van taken die we op de ‘gemeenschappelijke’ rollen gaan doen.
- Verander repository
- Ververs repository
- Upgrade pakketten naar de nieuwste versie
- Stel de server tijdzone in
Ga nu naar de ‘common’ map en bewerk de ’tasks/main.yml’ configuratie.
cd common/
vim tasks/main.yml
Maak een taak voor het veranderen van de repository, en we zullen de ‘copy’ module gebruiken die de basis ‘sources.list’ op de ‘files’ directory naar de remote host ‘/etc/apt/’ zal kopiëren.
- name: Change repository Ubuntu 18.04Step 4 - Setup 'web' Roles
copy:
src: sources.list
dest: /etc/apt/
backup: yes
Maak een taak voor het bijwerken van de repository en upgrade alle pakketten naar de nieuwste versie met de ‘apt’ module.
- name: Update repository and Upgrade packages
apt:
upgrade: dist
update_cache: yes
Maak nu de taak voor het instellen van de systeemtijdzone met de ‘ansible timezone’ module.
- name: Setup timezone to Asia/Jakarta
timezone:
name: Asia/Jakarta
state: latest
Bewaar en sluit.
Maak daarna een nieuwe repository configuratie ‘sources.list’ binnen de map ‘files’.
vim files/sources.list
Kies de dichtstbijzijnde repository van je server locatie, hieronder staat de mijne.
deb http://buaya.klas.or.id/ubuntu/ bionic main restricted
deb http://buaya.klas.or.id/ubuntu/ bionic-updates main restricted
deb http://buaya.klas.or.id/ubuntu/ bionic universe
deb http://buaya.klas.or.id/ubuntu/ bionic-updates universe
deb http://buaya.klas.or.id/ubuntu/ bionic multiverse
deb http://buaya.klas.or.id/ubuntu/ bionic-updates multiverse
deb http://buaya.klas.or.id/ubuntu/ bionic-backports main restricted universe multiverse
deb http://buaya.klas.or.id/ubuntu/ bionic-security main restricted
deb http://buaya.klas.or.id/ubuntu/ bionic-security universe
deb http://buaya.klas.or.id/ubuntu/ bionic-security multiverse
Bewaar en sluit.
Als laatste is de ‘common’ rollen configuratie voltooid.
Stap 4 – Instellen van ‘web’ rollen
In deze stap gaan we de ‘web’ rollen instellen. Het zal enkele taken uitvoeren, waaronder het installeren van de Nginx webserver, PHP-FPM met enkele basisuitbreidingen, en het configureren van de PHP-FPM met Nginx.
Hieronder staan detailtaken die we op de ‘web’ rollen zullen doen:
- Installeer Nginx
- Installeer PHP-FPM
- Configureer php.ini
- Maak een virtuele host
- Voeg het bestand phpinfo toe
Ga naar de ‘web’ directory en bewerk het ’tasks/main.yml’ bestand.
cd web/
vim tasks/main.yml
Maak de eerste taak voor de installatie van nginx met de apt module.
- name: Install Nginx
apt:
name: nginx
state: latest
Maak nu de taak voor de installatie van PHP-FPM met enkele basisuitbreidingen. En voor de installatie van meerdere pakketten kunnen we python ‘list’ formaat gebruiken, zoals hieronder.
- name: Instal PHP-FPM
apt:
name: ['php','php-fpm','php-common','php-cli','php-curl']
state: latest
Vervolgens voegen we nieuwe regels toe aan de php.ini configuratie met de ‘blockinfile’ module. En aan het eind van de regel laten we ansible weten dat hij de php-fpm dienst moet herstarten na de configuratie van het php.ini bestand.
- name: Configure php.ini
blockinfile:
dest: /etc/php/{{ php_version }}/fpm/php.ini
block: |
date.time = Asia/Jakarta
cgi-fix_pathinfo = 0
backup: yes
notify: restart php-fpm
Nu zullen we de nginx virtual host configuratie kopiëren met de ’template’ module. De sjabloon module zal de configuratie uit de ’templates’ directory naar de externe server kopiëren. We gaan het jinja2 virtuele host sjabloon ‘vhost.j2’ kopiëren naar de ‘/etc/nginx/sites-enabled/’ directory, en als laatste melden we ansible dat hij de nginx dienst opnieuw moet starten.
- name: Create Nginx virtual host
template:
src: vhost.j2
dest: /etc/nginx/sites-enabled/vhost-{{ domain_name }}
notify: restart nginx
Daarna maken we nieuwe taken aan voor het maken van de web-root directory met de ‘file’ module en kopiëren het index.php sjabloon erin.
- name: Create web-root directory
file:
path: /var/www/{{ domain_name }}
state: directory
- name: Upload index.html and info.php files
template:
src: index.php.j2
dest: /var/www/{{ domain_name }}/index.php
Opslaan en sluiten.
Nu gaan we de handlers configureren voor het herstarten van de nginx en php-fpm dienst. Bewerk de ‘handlers/main.yml’ configuratie met een vim editor.
vim handlers/main.yml
Plak de configuraties hieronder.
- name: restart nginx
service:
name: nginx
state: restarted
enabled: yes
- name: restart php-fpm
service:
name: php{{ php_version }}-fpm
state: restarted
enabled: yes
Opslaan en sluiten.
Vervolgens bewerken we de ‘vars/main.yml’ configuratie. Bovenaan de configuraties zie je de variabele configuraties ‘{{ php_version }}’ en ‘{{ domain_name }}’. Die variabelen geven onze omgevingsinstelling weer voor de php versie en de domeinnaam die gebruikt zal worden. De variabelen maken ansible herbruikbaarder omdat we alleen de variabele configuratie ‘vars/main.yml’ hoeven te bewerken en niet de basis configuratie.
Bewerk de variabelen configuratie ‘vars/main.yml’ met vim editor.
vim vars/main.yml
Plak de configuraties hieronder.
php_version: 7.2
domain_name: hakase-labs.io
Bewaar en sluit.
Nu maken we jinja2 sjabloon configuraties ‘index.php.j2’ en ‘vhost.j2′ op de ’templates/’ directory.
vim templates/index.php.j2
Plak de configuratie hieronder.
<html>
<body>
<h1><center>index.html for domain {{ domain_name }}</center></h1>
<p>
<p>
<?php
phpinfo();
?>
</body>
</html>
Bewaar en sluit.
Maak daarna het sjabloon voor nginx virtuele host configuratie ‘vhost.j2’.
vim templates/vhost.j2
Plak de configuraties hieronder.
server {
listen 80;
listen [::]:80;
root /var/www/{{ domain_name }};
index index.php index.html index.htm index.nginx-debian.html;
server_name {{ domain_name }};
location / {
try_files $uri $uri/ =404;
}
# pass PHP scripts to FastCGI server
#
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php/php{{ php_version }}-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
Bewaar en sluit de configuratie, en we zijn klaar met de web rollen configuratie.
Stap 5 – Instelling ‘db’ rollen
Bij deze stap gaan we de ‘db’ rollen instellen voor de MySQL database installatie en configuratie.
Hieronder staan detailtaken die aan de ‘db’ rollen zullen doen.
- installeer mysql
- Maak een MySQL database
- Maak een MySQL gebruiker
- Herstart mysql
Ga naar de ‘db’ directory en bewerk de ’tasks/main.yml’ configuratie.
cd db/
vim tasks/main.yml
Installeer nu de MySQL pakketten met de ‘apt’ module en python ‘list’ formaat voor de installatie van meerdere pakketten.
- name: Install MySQL
apt:
name: ['mysql-server','mysql-client','python-mysqldb']
state: latest
notify: restart mysql
Maak dan nieuwe taken aan voor het aanmaken van de MySQL database en gebruiker, en verleen dan alle rechten van de gebruiker aan de database.
- name: Create database
mysql_db:
name: '{{ db_name }}'
state: present
- name: Create user for the database
mysql_user:
name: '{{ db_user }}'
password: '{{ db_pass }}'
encrypted: yes
priv: '{{ db_name }}.*:ALL'
state: present
Bewaar en sluit.
Bewerk daarna de ‘handlers/main.yml’ configuratie.
vim handlers/main.yml
Plak de configuratie van de taak voor het herstarten van de MySQL dienst.
- name: restart mysql
service:
name: mysql
state: restarted
enabled: yes
Bewaar en sluit.
Bewerk daarna de configuratie vars-variabelen ‘vars/main.yml’.
vim vars/main.yml
Plak deze variabelen voor de configuratie van de MySQL database en de gebruikers hieronder.
db_name: hakase-db
db_user: hakase
db_pass: '*C960D382DB42E57D3BAC33891CF87900DCB1A869'
Opslaan en sluiten.
De ‘db_pass’ variabele heeft het MySQL versleutelde wachtwoord, en je kunt een versleuteld MySQL wachtwoord genereren met online hulpmiddelen.
Stap 6 – Voer het Ansible speelboek uit
Ga naar de Ansible project directory.
cd project-lemp/
Voer het onderstaande ansible-playbook commando uit.
ansible-playbook -i hosts site.yml
Nu zal de ansible alle rollen uitvoeren die we aan de host toekennen. Als het klaar is, krijg je het resultaat te zien zoals hieronder.
Zorg ervoor dat je geen foutmelding krijgt.
Stap 7 – Testen
Open je web browser en typ de domeinnaam in de adresbalk http://hakase-labs.io.
En je krijgt de indexpagina met phpinfo te zien zoals hieronder.
De PHP-FPM en Nginx werken.
Ga nu terug naar de server terminal en log in op de MySQL server met de gebruiker en het wachtwoord die we op de ‘mysql’ rollenvariabele hebben aangemaakt.
mysql -u hakase -p
PASSWORD: hakasepass
Controleer de lijst van databases die de gebruiker bezit.
show databases;
En je wordt ingelogd op de MySQL shell en krijgt op de lijst de database met de naam ‘hakase-db’ te zien.
Tenslotte is het Ansible Speelboek voor de LEMP Stack installatie en configuratie met succes gemaakt en getest.