Ansible installieren
# Auf Control Node (kein Agent auf Zielservern nötig!)
pip3 install ansible
# oder
apt install -y ansible
ansible --version
# SSH-Verbindung testen
ansible all -i "server1.firma.de," -m ping --user admin --private-key ~/.ssh/id_ed25519
Inventory
# /etc/ansible/hosts oder ./inventory.ini
[webservers]
web-01.firma.de ansible_user=admin
web-02.firma.de ansible_user=admin
[dbservers]
db-01.firma.de ansible_user=admin
[production:children]
webservers
dbservers
[all:vars]
ansible_python_interpreter=/usr/bin/python3
ansible_ssh_private_key_file=~/.ssh/id_ed25519
Erstes Playbook
# playbook-webserver.yml
---
- name: Webserver konfigurieren
hosts: webservers
become: yes
vars:
nginx_port: 80
app_user: www-data
tasks:
- name: System aktualisieren
apt:
update_cache: yes
upgrade: dist
cache_valid_time: 3600
- name: Nginx installieren
apt:
name:
- nginx
- certbot
- python3-certbot-nginx
state: present
- name: Nginx starten und aktivieren
systemd:
name: nginx
state: started
enabled: yes
- name: Nginx-Konfiguration kopieren
template:
src: templates/nginx.conf.j2
dest: /etc/nginx/sites-available/default
owner: root
group: root
mode: '0644'
notify: Nginx reload
- name: UFW: HTTP und HTTPS erlauben
ufw:
rule: allow
port: "{{ item }}"
proto: tcp
loop:
- '80'
- '443'
handlers:
- name: Nginx reload
systemd:
name: nginx
state: reloaded
# Playbook ausführen
ansible-playbook -i inventory.ini playbook-webserver.yml
# Dry-Run (Check-Mode)
ansible-playbook -i inventory.ini playbook-webserver.yml --check --diff
# Nur bestimmte Tags
ansible-playbook -i inventory.ini playbook-webserver.yml --tags nginx
Ansible Roles
# Rolle erstellen
ansible-galaxy init roles/nginx
# Struktur:
# roles/nginx/
# tasks/main.yml
# handlers/main.yml
# templates/
# files/
# defaults/main.yml
# vars/main.yml
# site.yml - Haupt-Playbook
---
- hosts: webservers
become: yes
roles:
- common
- nginx
- certbot
Ansible Vault (Secrets verschlüsseln)
# Datei verschlüsseln
ansible-vault encrypt vars/secrets.yml
# Verschlüsselt erstellen
ansible-vault create vars/secrets.yml
# Inhalt anzeigen
ansible-vault view vars/secrets.yml
# Mit Vault-Passwort ausführen
ansible-playbook site.yml --ask-vault-pass
# Passwort-Datei
echo "vault-passwort" > ~/.vault_pass && chmod 600 ~/.vault_pass
ansible-playbook site.yml --vault-password-file ~/.vault_pass
FAQ
Was ist der Unterschied zwischen Ansible und Puppet/Chef?
Ansible: agentlos (SSH), push-basiert, einfacherer Einstieg. Puppet/Chef: Agent-basiert, pull-basiert, mächtiger für große Flotten.
Fazit
Ansible ist das einsteigerfreundlichste Automatisierungswerkzeug für Linux-Server – keine Agenten, einfache YAML-Syntax, riesige Modul-Bibliothek.
Ansible-Automatisierung für KMU in Heidelberg, Mannheim und der Rhein-Neckar-Region. Beratung anfragen.