Ansible Homelab Automatisierung 2026
Wer ein Homelab betreibt, verbringt mehr Zeit mit Konfiguration als mit Nutzung. Ansible ändert das: Definieren Sie Ihre Server-Konfiguration als Code, und Ansible setzt sie idempotent um — jedes Mal gleich.
Was ist Ansible?
Ansible ist ein Open-Source-Automationstool von Red Hat. Es konfiguriert Systeme, deployed Software und orchestriert Tasks. Besonderheit: agentenlos — Ansible braucht nur SSH.
Warum Ansible fürs Homelab?
Installation
Auf Ihrem Control Node (Ihrem PC oder einem Management-Server):
``bashUbuntu/Debian
sudo apt update && sudo apt install ansible
macOS
brew install ansible
Pip
pip install ansible
`
Grundkonzepte
Inventory
Das Inventory definiert Ihre Server in
/etc/ansible/hosts oder ~/inventory.ini:`ini
[homelab]
nas ansible_host=192.168.1.10 ansible_user=admin
pve-node1 ansible_host=192.168.1.20 ansible_user=root
pve-node2 ansible_host=192.168.1.21 ansible_user=root
pi-cluster ansible_host=192.168.1.30 ansible_user=pi[webservers]
nas
[virtualization]
pve-node1
pve-node2
[homelab:children]
webservers
virtualization
`Ad-hoc-Befehle
Schnelle Befehle auf allen Servern:
`bash
Alle Server pingen
ansible homelab -m pingAlle Systeme updaten (Debian/Ubuntu)
ansible homelab -m apt -a "update_cache=yes upgrade=dist" --becomeNeustart aller Server
ansible homelab -m command -a "uptime"
`Playbooks
Playbooks sind YAML-Dateien mit Konfigurationsanweisungen.
Basis-Setup für alle Server
`yaml
---
name: Basis-Konfiguration für alle Homelab-Server
hosts: homelab
become: yes
tasks:
- name: System aktualisieren
apt:
update_cache: yes
upgrade: dist
when: ansible_os_family == "Debian" - name: Basis-Pakete installieren
apt:
name:
- htop
- tmux
- git
- curl
- vim
- fail2ban
- unattended-upgrades
state: present
- name: Zeitzone setzen
timezone:
name: Europe/Berlin
- name: SSH-Hardening
lineinfile:
path: /etc/ssh/sshd_config
regexp: "{{ item.regexp }}"
line: "{{ item.line }}"
loop:
- { regexp: '^#?PermitRootLogin', line: 'PermitRootLogin no' }
- { regexp: '^#?PasswordAuthentication', line: 'PasswordAuthentication no' }
- { regexp: '^#?Port', line: 'Port 2222' }
notify: restart ssh
handlers:
- name: restart ssh
service:
name: sshd
state: restarted
`Docker-Installation
`yaml
---
name: Docker installieren
hosts: homelab
become: yes
tasks:
- name: Docker-Dependencies
apt:
name:
- ca-certificates
- curl
- gnupg
state: present - name: Docker GPG Key
apt_key:
url: https://download.docker.com/linux/ubuntu/gpg
state: present
- name: Docker Repository
apt_repository:
repo: "deb [arch=amd64] https://download.docker.com/linux/ubuntu {{ ansible_distribution_release }} stable"
state: present
- name: Docker installieren
apt:
name:
- docker-ce
- docker-ce-cli
- containerd.io
- docker-compose-plugin
state: latest
- name: User zur docker-Gruppe hinzufügen
user:
name: "{{ ansible_user }}"
groups: docker
append: yes
- name: Docker Service aktivieren
service:
name: docker
state: started
enabled: yes
`Backup mit Restic
`yaml
---
name: Restic Backup einrichten
hosts: nas
become: yes
vars:
restic_repo: "/mnt/backup/restic"
restic_password: "CHANGE_ME"
tasks:
- name: Restic installieren
apt:
name: restic
state: present - name: Backup-Verzeichnis erstellen
file:
path: "{{ restic_repo }}"
state: directory
mode: '0700'
- name: Restic Repo initialisieren
command: "restic -r {{ restic_repo }} init --password-file /root/.restic-pass"
args:
creates: "{{ restic_repo }}/config"
- name: Backup-Cronjob
cron:
name: "Restic Backup"
hour: "2"
minute: "0"
job: "restic -r {{ restic_repo }} backup /home /etc /var/lib/docker --password-file /root/.restic-pass"
- name: Cleanup-Cronjob
cron:
name: "Restic Cleanup"
hour: "3"
minute: "0"
job: "restic -r {{ restic_repo }} forget --keep-daily 7 --keep-weekly 4 --keep-monthly 6 --password-file /root/.restic-pass"
`Roles für Wiederverwendbarkeit
Roles strukturieren Playbooks in Verzeichnisse:
`
roles/
docker/
tasks/main.yml
handlers/main.yml
defaults/main.yml
vars/main.yml
nginx/
tasks/main.yml
templates/nginx.conf.j2
`Role verwenden:
`yaml
hosts: webservers
roles:
- docker
- nginx
`Ansible Vault für Secrets
`bash
Vault-Datei erstellen
ansible-vault create secrets.ymlVault-Datei editieren
ansible-vault edit secrets.ymlPlaybook mit Vault ausführen
ansible-playbook --ask-vault-pass site.yml
`FAQ
Ansible vs Salt vs Puppet?
Ansible ist am einfachsten einzurichten (agentenlos, SSH). Salt ist besser für sehr große Infrastrukturen. Puppet ist älter, mächtiger, aber komplexer.Wie teste ich Playbooks?
Nutzen Sie ansible-playbook --check` für einen Dry-Run. Für komplexes Testing: Molecule (Ansible Testing Framework).Brauche ich Ansible für 2-3 Server?
Ja. Selbst bei 2 Servern spart Ansible Zeit und verhindert Inkonsistenzen. Einmal geschrieben, hundertmal ausgeführt.
Ansible in Docker?
Möglich, aber nicht empfohlen für den Control Node. Ansible direkt auf Ihrem PC oder einem Management-Server ist einfacher.
Fazit
Ansible gehört in jedes Homelab. Nach einem Tag Investition haben Sie reproduzierbare Server-Konfiguration, automatisierte Updates, Backups und Dokumentation in einem. Starten Sie mit dem Basis-Playbook, fügen Sie schrittweise Docker, Monitoring und Backups hinzu.