Inhalt

Übung mit Ansible Templates: NGINX Konfigurieren

Nachdem du in der ersten Übungsaufgabe eine einfache Webseite erstellt hast, kannst du jetzt das Wissen aus dem vorherigen Blogpost verwenden und Ansible-Templates nutzen, um den Inhalt der Webseite und die Konfiguration des Webservers zu erstellen.

Schritt 1: Vorbereiten der Umgebung

Zuerst erstelle ein neues Verzeichnis für das Projekt und navigiere in das Verzeichnis:

1
mkdir ansible-webserver-template && cd $_

Schritt 2: Inventory-Datei erstellen

Erstelle eine Inventory-Datei hosts.ini mit den Verbindungsdaten zu deinem Ubuntu-Server:

1
2
3
4
5
6
7
8
[webserver]
ubuntu-server ansible_host=192.168.X.X

[webserver:vars]
ansible_user = user
ansible_ssh_user = user
ansible_password = password
ansible_ssh_password = password

Schritt 3: Webserver-Playbook erstellen

Erstelle ein Playbook webserver.yml:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
- name: Set up webserver with templates
  hosts: webserver
  become: yes
  vars:
    nginx_user: nginx
    server_listen_port: 80
    root: /var/www/html/
    index: index.html
    main_content: This is a simple website powered by Ansible and Nginx.
    footer_text: Copyright © 2023 - All Rights Reserved
    
  tasks:
    
    - name: Install Nginx
      ansible.builtin.apt:
        name: nginx
        state: present
      notify: Start Nginx

  handlers:
    
    - name: Start Nginx
      ansible.builtin.service:
        name: nginx
        state: started

Schritt 4: Ansible-Templates erstellen

Erstelle ein Verzeichnis templates und darin zwei Vorlagen: index.html.j2 für den Inhalt der Webseite und nginx.conf.j2 für die Webserver-Konfiguration.

NGINX

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
user {{ nginx_user }};
worker_processes auto;
pid /run/nginx.pid;

events {
    worker_connections 1024;
}

http {
    include /etc/nginx/mime.types;
    
    access_log  /var/log/nginx/access.log;
    error_log  /var/log/nginx/error.log;
    
    server {
        listen {{ server_listen_port }};
        server_name {{ inventory_hostname }};
        
        root {{ web_root }};
        index {{ web_index }};
        
        location / {
            try_files $uri $uri/ =404;
        }
    }
}

HTML

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>{{ ansible_hostname }} Server</title>
</head>
<body>
    <header>
        <h1>{{ inventory_hostname }}</h1>
    </header>
    <main>
        <p>{{ main_content }}</p>
    </main>
    <footer>
        <p>{{ footer_text }}</p>
    </footer>
</body>
</html>

Schritt 5: Task zum Kopieren der Vorlagen hinzufügen

Füge folgende Tasks zum webserver.yml Playbook hinzu:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11

  - name: Copy index.html template
    template:
      src: templates/index.html.j2
      dest: /var/www/html/index.html

  - name: Copy nginx configuration template
    template:
      src: templates/nginx.conf.j2
      dest: /etc/nginx/nginx.conf
    notify: Restart Nginx

Füge einen weiteren Handler hinzu, um Nginx neu zu starten:

1
2
3
4
  - name: Restart Nginx
    ansible.builtin.service:
      name: nginx
      state: restarted

Schritt 6: Playbook ausführen

Führe das Playbook mit dem Befehl ansible-playbook -i hosts.ini webserver.yml aus, um den Webserver einzurichten und die Vorlagen zu übertragen. Überprüfe anschließend die Webseite und die Konfiguration auf dem Ubuntu-Server.

Du musst die Vorlagen natürlich auf deine Umgebung anpassen. Solltest du fehler in meiner Konfiguration finden zögere bitte nicht mir zu schreiben: info@itzlu4u.de

Fazit

Du hast gelernt, wie du Ansible-Templates erstellst und sie in deinem Playbook verwendest. Jetzt bist du bereit, weitere fortgeschrittene Funktionen von Ansible zu erkunden!

Dir ist vielleicht aufgefallen, dass wir nicht alle Variablen, die in den Templates verwendet wurden, im Playbook definieren mussten. Wenn du erfahren möchtest, warum das so ist, informiere dich gerne über Ansible-Facts oder warte auf einen meiner kommenden Posts zu diesem Thema.

Viel Erfolg auf deiner Automatisierungsreise!


Gefällt dir der Post?

PS:

Schau auch gerne in meinem GitHub Repo vorbei.