Modius - Techblog

  • Ansible
  • Docker
  • DevOps
  • Gastautor werden
  • Newsletter abonnieren
  • Über Mich
  • Kontakt

Ansible httpd Role Teil 1: Installation und Modulaktivierung

Veröffentlicht am 26. Januar 2018 von Christian Piazzi Hinterlasse ein Kommentar , Aktualisiert am 12. Juli 2020
Geschätzte Lesezeit: 3 Minuten

Im beruflichen Alltag eines Informatikers muss man immer wieder verschiedenste Server- bzw. Testumgebungen installieren. Hier ist also großes Potenzial da, Zeit einzusparen.
Aus diesem Grund habe ich vor einiger Zeit angefangen mich mit Ansible zu beschäftigen und will hier heute den Anfang für die automatisierte Installation eines LAMP Stacks machen. Als erste wollen wir hier die Ansible httpd Role erstellen. Voraussetzung hierfür ist eine Funktionierende Ansible Installation auf dem Server und ein Test der ssh Verbindung zum Zielserver.

Inhaltsverzeichnis

Ansible Struktur für die httpd Role

Als erste schauen wir uns an, wie man am besten die Ordnersturktur für eine Ansible Role aufbaut. Dabei habe ich mich an die Best Practices der Ansible Dokumentation gehalten, habe aber Ordner die ich erstmal nicht brauche weggelassen.

1
2
3
4
5
6
7
Christian @ ~/Documents/GitHub/ansible-role/httpd * master
[19] → tree
.
├── defaults
│   └── main.yml
└── tasks
    └── main.yml

Anlegen der Ansible httpd Role tasks/main.yml

Wir starten nun damit, dass wir die Installation des httpd Servers in der tasks/main.yml definieren. Der erste Block sieht dann wie folgt aus:

YAML
1
2
3
4
5
6
- name: yum | install httpd
  yum: name={{ item }}
  with_items:
    - httpd
    - httpd-tools
  when: ansible_pkg_mgr == "yum"

name:

Hier gebe wir einen Text an, der bei einem Lauf von Ansible auf dem Terminal ausgegeben werden soll. Dies ist wichtig falls ein Fehler auftritt. So weis man direkt an welcher Stelle man suche muss.

yum:

An dieser Stelle wird definiert, welche Pakete mit dem Paketmanager yum installiert werden sollen. {{ item }} ist dabei ein Platzhalter für die Paketnamen die im nächsten Schritt definiert werden.

with_items:

Lister der zu installierenden Pakete für den Paketmanager.

when:

Mit when prüft man ob bestimmte Bedingungen zutreffen. An dieser Stelle zum Beispiel ob auf dem Zielsystem der Paketmanager yum verwendet wird.

Weiter geht es mit dem Zweiten Block. Hier installieren wir das Module fcgid.

YAML
1
2
3
4
5
6
- name: yum | install of fcgid
  yum: name={{ item }}
  with_items:
    - mod_fcgid
    - mod_ruid2
  when: ansible_pkg_mgr == "yum" and ( use_perl or use_fcgid )

Die meisten Funktionen sind analog zum Ersten Block. Der einzige Unterschied ist hier, dass der when Bereich erweitert wurde. Hier wird als erstes wieder geprüft ob es sich um den Paketmanager yum handelt. Im zweiten Schritt wird geprüft ob die Variable use_per oder use_fcgid wahr ist. Diese Variablen werden im zweiten Teil des Artikels in der defaults/main.yml definiert.

Im dritten Block der tasks/main.yml aktivieren wir nun einige httpd Module.

YAML
1
2
3
4
5
6
7
8
9
- name: Enable common httpd modules
  apache2_module: name={{ item }}
  with_items:
    - proxy
    - proxy_fcgi
    - rewrite
    - filter
    - deflate
    - headers

Hier haben wir eine neue Funktion.

apache2_module:

Mit dieser Funktion werden die übergebende Module für httpd aktiviert werden.

Kommen wir nun zum Vierten und letzten Block. Hier werden die Perl/fcgid Module aktiviert, fall die entsprechende Variable use_per oder use_fcgid wahr ist.

YAML
1
2
3
4
5
6
7
- name: Enable fcgid httpd module
  apache2_module: name={{ item }}
  with_items:
    - cgi
    - fcgid
    - suexec
  when: use_perl or use_fcgid

Anlegen der Ansible Apache Role defaults/main.yml

Nachdem wir die Tasks für die Ansible httpd Role definiert haben, legen wir nun noch ein paar Variablen in der defaults/main.yml fest. Das ganze sieht dann so aus:

YAML
1
2
3
4
5
Christian @ ~/Documents/GitHub/ansible-role/apache/defaults * master
[29] → cat main.yml
 
use_perl: false
use_fcgid: false

Ich habe hier den Standardwert auf false gesetzt, damit nicht auf jedem System unnötig Module installiert werden.

Damit sind wir mit der Definition der Ansible httpd Role soweit fertig. Wir werden diese im nächsten Schritt testen.

Testen der Ansible httpd Role auf einem CentOS 7

Nach einer Änderung an einer Ansible Role ist es immer sinnvoll diese direkt zu testen. Gerade wenn die Dateien länger werden, übersieht man gerne mal eine Abhängigkeit und der ganze Ansible lauf funktioniert nicht mehr.

Für das Testen der Role legen wir eine site.yml und eine hosts Datei an.

site.yml:

YAML
1
2
3
4
5
- name: httpd
  hosts: httpd
  remote_user: root
  roles:
    - httpd

In der site.yml definieren wir eine Gruppe httpd und legen fest welche Role zu dieser Gruppe gehören. Dabei legen wir noch mit remote_user fest, mit welchem User Snsible sich auf den Zielserver verbinden soll.

hosts:

1
2
[httpd]
192.168.10.91

In der hosts Datei weisen wir die IP Adresse der httpd entsprechenden httpd Gruppe zu.

Anschließend können wir mit ansible-playbook die beiden Datein aufrufen und damit auf unserem Zielsystem httpd installieren und die entsprechenden Module aktivieren.

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
27
28
ansible-playbook  site.yml -i hosts
 
PLAY [httpd] *******************************************************************
 
TASK [Gathering Facts] *********************************************************
ok: [192.168.10.90]
 
TASK [httpd : yum | install httpd] *********************************************
ok: [192.168.10.90] => (item=[u'httpd', u'httpd-tools'])
 
TASK [httpd : yum | install of fcgid] ******************************************
skipping: [192.168.10.90] => (item=[])
 
TASK [httpd : Enable common httpd modules] *************************************
ok: [192.168.10.90] => (item=proxy)
ok: [192.168.10.90] => (item=proxy_fcgi)
ok: [192.168.10.90] => (item=rewrite)
ok: [192.168.10.90] => (item=filter)
ok: [192.168.10.90] => (item=deflate)
ok: [192.168.10.90] => (item=headers)
 
TASK [httpd : Enable fcgid httpd module] ***************************************
skipping: [192.168.10.90] => (item=cgid)
skipping: [192.168.10.90] => (item=fcgid)
skipping: [192.168.10.90] => (item=suexec)
 
PLAY RECAP *********************************************************************
192.168.10.90              : ok=3    changed=0    unreachable=0    failed=0  

Wollen wir nun perl oder fcgid verwenden, müssen wir in der site.yml die entsprechenden Variablen auf true setzten. Dies sieht dann zb. wie folgt aus:

1
2
3
4
5
6
7
- name: httpd
  hosts: httpd
  remote_user: root
  roles:
    - httpd
  vars:
    - use_perl: true

Wenn wir jetzt erneut den Lauf starten, werden die entsprechenden Schritte mit ausgeführt:

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
27
28
[root@ansible ansible]# ansible-playbook site.yml -i hosts
 
PLAY [httpd] *******************************************************************
 
TASK [Gathering Facts] *********************************************************
ok: [192.168.10.90]
 
TASK [httpd : yum | install httpd] *********************************************
ok: [192.168.10.90] => (item=[u'httpd', u'httpd-tools'])
 
TASK [httpd : yum | install of fcgid] ******************************************
ok: [192.168.10.90] => (item=[u'mod_fcgid', u'mod_ruid2'])
 
TASK [httpd : Enable common httpd modules] *************************************
ok: [192.168.10.90] => (item=proxy)
ok: [192.168.10.90] => (item=proxy_fcgi)
ok: [192.168.10.90] => (item=rewrite)
ok: [192.168.10.90] => (item=filter)
ok: [192.168.10.90] => (item=deflate)
ok: [192.168.10.90] => (item=headers)
 
TASK [httpd : Enable fcgid httpd module] ***************************************
ok: [192.168.10.90] => (item=cgi)
ok: [192.168.10.90] => (item=fcgid)
ok: [192.168.10.90] => (item=suexec)
 
PLAY RECAP *********************************************************************
192.168.10.90              : ok=5    changed=0    unreachable=0    failed=0

Den Code zur Rolle findet ihr im ansible-role Repository auf GitHub. Teil zwei des Tutorials findet ihr hier: Ansible httpd Role Teil 2: Default vHost und SSL verwenden

Video

Kategorie: Ansible Tags: Ansible, Apache2, httpd, LAMP, roles, with_items, yum

Über Christian Piazzi

Ich blogge hier über alles, was mir so in meinem ITler Altag über den Weg läuft =)
Man findet mich privat bei Google+ und Twitter

Schreibe einen Kommentar Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Kategorien

  • Linux
  • Internet, Bloggen & Co
  • Programmierung
  • Sicherheit
  • Netzwerk & Co
  • Mikrokontroller
  • Windows

Neueste Kommentare

  • Prometheus Installation unter Ubuntu - Modius - Techblog bei Prometheus Installation unter CentOS
  • Rainer bei Docker Container – anzeigen, starten, stoppen und löschen
  • Rainer Wohlfarth bei Docker Container – anzeigen, starten, stoppen und löschen
  • Rainer Wohlfarth bei Docker Container – anzeigen, starten, stoppen und löschen
  • Rainer Wohlfarth bei Docker Container – anzeigen, starten, stoppen und löschen

Werbung

Archive

Kontakt, Datenschutz und Impressum

  • Kontakt
  • Datenschutz
  • Impressum

Schlagwörter

Anleitung Ansible Apache Apple App Store Automatisierung Blogparade C++ Centos centos 7 CentOS7 Container Datenbank DevOps Docker Dr. Racket Dr. Scheme funktional Gastartikel Google HowTo httpd Icinga2 Icinga 2 Installation itsm Linux Minecraft Monitoring mooc MySQL owncloud PHP Plugin Programmierung python Raspberry Pi Schritt für Schritt Server Sicherheit Tutorial Ubuntu Update Windows Wordpress

Copyright © 2025 · Outreach Pro on Genesis Framework · WordPress · Anmelden