In dieser Card machst du einige Übungsaufgaben um Linux Server mit Ansible zu verwalten.
Da es vermutlich zu aufwendig ist alles von 0 auf selbst zu erstellen, solltest du prüfen, ob du fertige roles von der Ansible Galaxy Show archive.org snapshot verwenden kannst.
Aufgaben
Erstelle ein git Repository ähnlich zu dem aus dem vorherigen Kapitel. Am besten auch mit pre-commit hooks.
Für die einzelnen Arbeitsschritte solltest du Merge Requests erstellen, die dein Mentor reviewt. Der Name des Merge Requests und des Feature Branches sollen einen Rückschluss auf die Aufgabe ermöglichen.
Achte außerdem darauf, dass deine Konfiguration möglichst idempotent ist.
Einen Webserver managen
-
Erstelle einen Ubuntu Container mit
LXD
. -
Installiere die folgenden Komponenten mit Ansible in diesem Container:
- Nginx
- PHP-FPM
- Datenbank (MySQL / MariaDB)
- Eine Wordpress Installation
-
Wordpress (bzw. der PHP Prozess, welcher den Code ausführt) soll mit einem eigenen Linux Benutzer laufen. Der Benutzername sollte frei wählbar sein. Der Benutzer wird selbstverständlich auch von Ansible erstellt.
-
Beachte bei deinem Setup, dass du vielleicht nicht nur eine Wordpress Installation pro Server haben möchtest (mehrere Vhosts beim Nginx, mehrere PHP-FPM Konfigurationen, mehrere User). Dafür müssen auch mehrere Datenbanken in der MySQL Installation angelegt werden können.
-
Achte auf ein gutes Setup mit Roles und dem Playbook. Bedenke, dass du Komponenten in der Zukunft ggf. auf mehrere Server verteilst.
Konfiguration abhängig von Facts
- Die Anzahl der Nginx worker soll abhängig von der Anzahl der CPU kerne konfiguriert werden. Dabei soll die Anzahl der Nginx Worker immer der Anzahl der CPU Kerne entsprechen.
Datenbankserver auslagern
- Erstelle einen zweiten LXD Container der einen Datenbankserver repräsentiert.
- Passe die Roles und Playbooks so an, dass der Datenbankserver für eine begrenzte Zeit auf beiden Containern läuft.
- Migriere die Datenbankdaten vom Webcontainer zum Datenbankcontainer. Dafür kannst du dir Steps to Migrate MySQL Database Between 2 Servers: 3 Easy Steps Show archive.org snapshot ansehen.
- Stelle die Wordpresskonfiguration vom Webcontainer so ein, dass er auf die Datenbank auf dem anderen Host zugreift.
- Entferne die Datenbank vom Webcontainer.
- Überlege dir welche Schwierigkeiten die hier vorgestellte Migrationsmethode beim produktiven Betrieb haben kann
Geteilte Konfiguration zwischen mehreren Nodes
- Du möchtest die Konfiguration für Datenbankname, Benutzer und Passwort nur 1x pflegen. Lege die Konfiguration so an, dass Webserver und Datenbankserver das gleiche verwenden. Es gibt mehrere Möglichkeiten das umzusetzen.
Schau dir dazu Information about Ansible: magic variables Show archive.org snapshot und an.
Datenbank Backups
- Erstelle ein Shellscript das Datenbankbackups erstellt
- Im Namen der Backupdatei sollte das Datum stehen
- Das Backup sollte komprimiert sein
- Lösche Backups älter als 30 Tage (zum testen kannst du kürzere Zeiträume wählen)
- Das Backup soll mit einem Cronjob ausgeführt werden. Immer wenn die Datenbank installiert wird, soll das Backupscript und der Cronjob erstellt werden
- Das Backup sollte optional deaktivierbar sein. Der Backup cron soll entfernt werden, wenn das Feature nachträglich deaktiviert wird.