Ansible - Server-Konfiguration reproduzierbar machen

Wer Server manuell konfiguriert hat irgendwann das Problem: der zweite Server sieht anders aus als der erste. Drei Monate später weiß niemand mehr warum. Ansible löst das.

Was Ansible macht

Ansible verbindet sich per SSH zu Servern und führt Tasks aus. Kein Agent, kein Daemon. Nur SSH und Python auf dem Zielserver.

Tasks werden in YAML-Dateien beschrieben. Idempotent — mehrfach ausführen ändert nichts wenn der Zielzustand schon erreicht ist.

Installation

pip install ansible

Inventory

# hosts.ini
[webservers]
web1.example.com
web2.example.com

[dbservers]
db1.example.com

Erstes Playbook

# setup.yml
- name: Webserver konfigurieren
  hosts: webservers
  become: true

  tasks:
    - name: Nginx installieren
      apt:
        name: nginx
        state: present
        update_cache: true

    - name: Nginx-Konfiguration kopieren
      copy:
        src: files/nginx.conf
        dest: /etc/nginx/nginx.conf
        owner: root
        mode: '0644'
      notify: nginx reload

    - name: Nginx aktivieren
      systemd:
        name: nginx
        enabled: true
        state: started

  handlers:
    - name: nginx reload
      systemd:
        name: nginx
        state: reloaded
ansible-playbook -i hosts.ini setup.yml

Variables

vars:
  php_version: "8.3"

tasks:
  - name: PHP installieren
    apt:
      name: "php{{ php_version }}-fpm"
      state: present

Warum das besser ist als Bash-Scripts

Bash-Scripts scheitern wenn ein Paket schon installiert ist oder eine Datei schon existiert. Ansible prüft erst den aktuellen Zustand.

Das Playbook ist gleichzeitig die Dokumentation was auf dem Server läuft. Kein "was haben wir da nochmal manuell gemacht?" mehr.