Apache ansible-playbook

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.

De playbook uitvoeren

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.