Tutorial: Server-Wartung automatisieren – update-infrastructure
Ein stabiles und sicheres System steht und fällt mit regelmäßigen Updates. Linux-Server im Internet (wie deine VPS oder LXC-Container) sollten idealerweise täglich oder wöchentlich nach Sicherheitsaktualisierungen durchsucht werden.
Anstatt dich manuell auf jedem Host einzuloggen und apt update && apt upgrade einzutippen, erstellen wir in diesem Tutorial ein zentrales Ansible-Playbook, das diese Routineaufgaben fehlerfrei und nacheinander für deine gesamte Infrastruktur erledigt.
Teil 1: Was macht ein professionelles Update-Playbook?
Ein einfaches Upgrade-Skript birgt das Risiko, dass der Server unbemerkt im Hintergrund hängen bleibt (z. B. weil ein Dienst nach dem Update einen Neustart benötigt). Ein produktionsbereites Ansible-Playbook geht daher smarter vor:
-
Paketquellen aktualisieren (
apt update): Holt die neuesten Informationen darüber, welche Sicherheitsupdates verfügbar sind. -
System upgraden (
apt upgrade): Installiert die neuen Pakete sicher und ohne interaktive Abfragen im Hintergrund. -
Aufräumen (
autoremove): Löscht alte Pakete und Kernel-Versionen, die nicht mehr benötigt werden, um Speicherplatz zu sparen. -
Neustart-Prüfung (Reboot-Check): Erkennt vollautomatisch, ob das System nach dem Update (z. B. bei einem neuen Linux-Kernel) einen Neustart benötigt, und führt diesen bei Bedarf kontrolliert aus.
Teil 2: Das automatisierte Ansible-Playbook
Erstelle in deinem Projektordner ~/ansible-inframanagement/ eine neue Datei namens update-infrastructure.yaml:
nano update-infrastructure.yaml
---
- name: System-Updates auf allen Linux-Servern durchführen
hosts: docker_hosts, mailserver
become: true
gather_facts: true # Erforderlich, um die Linux-Distribution zu erkennen
tasks:
- name: 📦 Paketquellen aktualisieren und Upgrades installieren (Debian/Ubuntu)
ansible.builtin.apt:
update_cache: yes
upgrade: dist # Installiert alle verfügbaren Updates (inkl. Kernel-Updates)
autoremove: yes # Löscht alte, nicht mehr benötigte Pakete
purge: yes # Löscht auch alte Konfigurationsdateien entfernter Pakete
when: ansible_os_family == "Debian"
- name: 🔍 Prüfen, ob ein Neustart erforderlich ist (Reboot Required)
ansible.builtin.stat:
path: /var/run/reboot-required
register: reboot_required_file
- name: 🔄 Server kontrolliert neu starten (falls erforderlich)
ansible.builtin.reboot:
msg: "Server-Neustart durch Ansible nach Kernel- oder System-Updates"
connect_timeout: 5
reboot_timeout: 300
pre_reboot_delay: 0
post_reboot_delay: 30
test_command: whoami
when: reboot_required_file.stat.exists
Wie funktioniert die Logik im Detail?
-
upgrade: dist: Dies sorgt für ein sogenanntes Distribution Upgrade. Es stellt sicher, dass auch tiefgreifende Abhängigkeiten und Kernel-Updates sauber aufgelöst und installiert werden. -
when: ansible_os_family == "Debian": Dies ist eine Schutzschicht. Das Playbook wird nur auf Servern ausgeführt, die zur Debian-Familie gehören (dazu zählen auch Ubuntu, Linux Mint und die meisten LXC-Container). -
Die Neustart-Logik (
ansible.builtin.reboot): Unter Debian/Ubuntu legt das System bei kritischen Updates (wie einem neuen Linux-Kernel) die temporäre Datei/var/run/reboot-requiredan. Das Modulstatprüft, ob diese Datei existiert. Wenn ja (when: reboot_required_file.stat.exists), startet Ansible den Server neu, wartet im Hintergrund geduldig, bis der SSH-Port wieder erreichbar ist, führt einen kurzen Testbefehl (whoami) aus und setzt das Playbook erst fort, wenn der Server wieder voll einsatzbereit ist.
Teil 3: Ausführung und Test
Du kannst das Wartungs-Playbook jederzeit manuell von deiner Ansible-Zentrale aus anstoßen:
ansible-playbook -i hosts update-infrastructure.yaml
Ansible klappert nun deine Server-Liste ab. Auf Systemen, die keinen Neustart benötigen, läuft der Prozess geräuschlos durch. Erfordert ein Server einen Reboot, siehst du, wie Ansible den Neustart initiiert und die Verbindung eigenständig wiederherstellt.
Teil 4: Die monatliche oder wöchentliche Automatisierung
Um die Server-Wartung komplett auf Autopilot zu stellen, binden wir das Playbook in die Crontab deiner isolierten Ansible-Zentrale ein. Da Updates etwas Zeit in Anspruch nehmen können und Server eventuell neu starten, legt man diesen Cronjob idealerweise in die tiefen Nachtstunden.
-
Öffne die Crontab auf der Zentrale:
crontab -e -
Füge die folgende Zeile hinzu (Beispiel: Jeden Sonntag um 03:00 Uhr nachts):
0 3 * * 7 cd /root/ansible-inframanagement && /usr/bin/ansible-playbook update-infrastructure.yaml > /var/log/ansible-infrastructure-updates.log 2>&1
Log-Kontrolle am nächsten Morgen
Ob die Updates nachts sauber durchgelaufen sind, kannst du ganz entspannt am nächsten Morgen kontrollieren, indem du dir das geschriebene Logfile ansiehst:
cat /var/log/ansible-infrastructure-updates.log
Deine gesamte Server-Infrastruktur hält sich ab sofort vollautomatisch auf dem neuesten Sicherheitsstand, während du schläfst!