We gaan eerst een mappen structuur maken om onze Ansible-playbook bestanden netjes in weg te zetten. Maak in je ~/Documents een directory "ansible/apache". In deze directory gaan we werken en ervoor zorgen dat onze bestanden gestructureerd zijn voor het gebruik van Ansible.
Ik werk in Visual studio code omdat we hierin een gestructureerde editor en terminal tegelijk hebben. Mocht je dit niet fijn vinden dan is de CLI ook goed, vindt hierin je eigen werkwijze.

Laten we beginnen met de bestanden dat we minimaal nodig zijn. In de directory /vars/ die in de apache directory zit maken we een bestand default.yml
--- app_user: "student" http_host: "scooters.inc" http_conf: "scooters.inc.conf" http_port: "80" disable_default: true
We zien een aantal default instellingen die we dadelijk in onze playbook kunnen gebruiken. Dit is een manier van werken, je kunt ze in je playbook ook elke keer uitschrijven.
Nu maken we een directory /files/ met daarin 2 bestanden. We maken onze apache configuratie hierin en de index.html voor de website.
apache.conf.j2
<VirtualHost *:{{ http_port }}>
ServerAdmin webmaster@localhost
ServerName {{ http_host }}
ServerAlias www.{{ http_host }}
DocumentRoot /var/www/{{ http_host }}
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
index.html.j2
<html>
<head>
<title>Welcome to {{ http_host }} !</title>
</head>
<body>
<h1>Success! The {{ http_host }} virtual host is working!</h1>
</body>
</html>
Als we deze bestanden hebben gemaakt kunnen we aan de slag met je playbook. In de ansible-playbook komen stap voor stap de configuraties die gedaan moeten worden. Bedenk welke stappen/installaties/instellingen je zelf hebt gedaan als Apache2 installeerd op 1 server. Deze stappen gaan we nu benoemen in de playbook.
in de apache directory maak je playbook.yml
---
- hosts: ubuntu-server
become: true
vars_files:
- vars/default.yml
tasks:
- name: Install prerequisites
apt: name={{ item }} update_cache=yes state=latest force_apt_get=yes
loop: [ 'aptitude' ]
- name: Install Apache
apt: name=apache2 update_cache=yes state=latest
- name: Create document root
file:
path: "/var/www/{{ http_host }}"
state: directory
owner: "{{ app_user }}"
mode: '0755'
- name: Copy index test page
template:
src: "files/index.html.j2"
dest: "/var/www/{{ http_host }}/index.html"
- name: Set up Apache virtuahHost
template:
src: "files/apache.conf.j2"
dest: "/etc/apache2/sites-available/{{ http_conf }}"
- name: Enable new site
shell: /usr/sbin/a2ensite {{ http_conf }}
notify: Reload Apache
- name: Disable default Apache site
shell: /usr/sbin/a2dissite 000-default.conf
when: disable_default
notify: Reload Apache
- name: "UFW - Allow HTTP on port {{ http_port }}"
ufw:
rule: allow
port: "{{ http_port }}"
proto: tcp
handlers:
- name: Reload Apache
service:
name: apache2
state: reloaded
- name: Restart Apache
service:
name: apache2
state: restarted
Het is onzettend belangrijk dat je de .yml bestanden op de bovenstaanden manier opbouwd. Mochten hier fouten in zitten qua spaties en bestandsformaat dan gaat het niet werken en krijg je fout meldingen. Zoek eens uit hoe een yaml file wordt gemaakt, opgebouwd wordt en yaml kan alleen werken als je hier rekening mee houdt.
Belangrijk!
---
- hosts: ubuntu-server
become: true
vars_files:
- vars/default.yml
Bij hosts staat nu ubuntu-server, hier kan ook je serverblock staan als het om meerdere servers gaat.
become: true betekend dat je als root user dit gaat uitvoeren, vergelijk het met de opdracht sudo. Hiervoor moeten we 1 keer ons wachtwoord invullen, dit moeten we straks ook als we deze playbook gaan uitvoeren. Wil je dit niet, dan laat je het weg. Het kan zo zijn dat bepaalde opdrachten alleen als root uitgevoerd mogen worden binnen Linux.
Om deze playbook uit te voeren gebruiken we de volgende opdracht:
ansible-playbook --ask-become-pass playbook.yml
Je voert je wachtwoord in en de playbook wordt uitgevoerd. Magie! (de eerste keer).
PLAY [ubuntu-server] ************************************************************************************************************************************************************* TASK [Gathering Facts] *********************************************************************************************************************************************************** ok: [ubuntu-server] TASK [Install prerequisites] ***************************************************************************************************************************************************** changed: [ubuntu-server] => (item=aptitude) TASK [Install Apache] ************************************************************************************************************************************************************ changed: [ubuntu-server] TASK [Create document root] ****************************************************************************************************************************************************** changed: [ubuntu-server] TASK [Copy index test page] ****************************************************************************************************************************************************** changed: [ubuntu-server] TASK [Set up Apache virtuahHost] ************************************************************************************************************************************************* changed: [ubuntu-server] TASK [Enable new site] *********************************************************************************************************************************************************** changed: [ubuntu-server] TASK [Disable default Apache site] *********************************************************************************************************************************************** changed: [ubuntu-server] TASK [UFW - Allow HTTP on port 80] *********************************************************************************************************************************************** changed: [ubuntu-server] RUNNING HANDLER [Reload Apache] ************************************************************************************************************************************************** changed: [ubuntu-server] PLAY RECAP *********************************************************************************************************************************************************************** ubuntu-server : ok=10 changed=9 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
In de uitvoer zie je uiteindelijk dat er 10=ok zijn en changed=9. Er zijn dit 9 dingen aangepast op de server. Laten we naar het IP-adres gaan in je URL om de zien of het gelukt is.
