Ansible Starter für behemoth / tycho / ceres
Dieses Repo managt deine Hosts über VPN (10.247.64.0/24) und rollt
- Basis-Pakete & Zeitzone
- Zsh + Oh My Zsh + Powerlevel10k
- rsync-Backups (generisch je Host)
- WireGuard-Backup (/etc/wireguard auf behemoth)
Struktur
ansible/
├─ ansible.cfg # sinnvolle Defaults
├─ inventory/hosts.yml # VPN-IPs & User
├─ group_vars/all.yml # globale Variablen (NAS, Zsh-User, Cronzeit)
├─ host_vars/ # host-spezifische Backups
├─ roles/
│ ├─ common/ # Pakete, Zeitzone
│ ├─ zsh_omz/ # Oh-My-Zsh + p10k
│ ├─ backup_rsync/ # generische Backups + Cron
│ └─ wg_backup/ # spezielles WireGuard-Backup
├─ site.yml # zentrales Playbook
├─ requirements.txt # Python-Dependencies
└─ Makefile # Komfort-Targets
Quickstart
cd ansible
make init
make ping # testet Verbindung
make run # rollt alles aus
Alternativ ohne Makefile:
python3 -m venv .venv && source .venv/bin/activate pip install -r requirements.txt ansible -i inventory/hosts.yml all -m ping ansible-playbook -i inventory/hosts.yml site.yml
Inventory
inventory/hosts.yml enthält die VPN-IPs und Default-User:
all:
children:
prod:
hosts:
behemoth:
ansible_host: 10.247.64.1
ansible_user: patrick
tycho:
ansible_host: 10.247.64.14
ansible_user: patrick
ceres:
ansible_host: 10.247.64.13
ansible_user: patrick
Tipp: Richte lokale SSH-Host-Aliase ein (optional):
# ~/.ssh/config
Host behemoth
HostName 10.247.64.1
User patrick
IdentityFile ~/.ssh/id_ed25519
StrictHostKeyChecking accept-new
Host tycho
HostName 10.247.64.14
User patrick
IdentityFile ~/.ssh/id_ed25519
StrictHostKeyChecking accept-new
Host ceres
HostName 10.247.64.13
User patrick
IdentityFile ~/.ssh/id_ed25519
StrictHostKeyChecking accept-new
Variablen
Globale Defaults in group_vars/all.yml:
nas_user: "backup-master"
nas_host: "192.168.178.74"
nas_port: 22
zsh_users:
- "patrick"
- "root"
backup_cron_hour: "04"
backup_cron_min: "30"
Host-spezifische Backups via host_vars/<host>.yml. Beispiele:
# host_vars/behemoth.yml
wg_backup_enabled: true
wg_backup_dest: "/volume1/behemoth-wireguard/wireguard"
backup_jobs:
- name: "behemoth-docker"
src: "/opt/"
dest: "/volume1/ceres-raspi4/docker/behemoth"
delete: true
# host_vars/tycho.yml
backup_jobs:
- name: "cloudpanel-sites"
src: "/home/"
dest: "/volume1/tycho-cloudpanel/sites"
delete: true
- name: "nginx-vhosts"
src: "/etc/nginx/sites-enabled/"
dest: "/volume1/tycho-cloudpanel/nginx-sites-enabled"
delete: true
Typische Workflows
1) Backup-Job hinzufügen (z. B. für neue Site auf tycho)
host_vars/tycho.ymlerweitern:backup_jobs: - name: "cloudpanel-sites" src: "/home/" dest: "/volume1/tycho-cloudpanel/sites" delete: true - name: "nginx-vhosts" src: "/etc/nginx/sites-enabled/" dest: "/volume1/tycho-cloudpanel/nginx-sites-enabled" delete: true - name: "tycho-etc" src: "/etc/" dest: "/volume1/tycho-cloudpanel/etc" delete: false- Playbook laufen lassen:
make run - Auf NAS prüfen: Zielpfad existiert und wird befüllt.
2) Nur einen Host bearbeiten
make limit h=behemoth
# oder ohne Makefile:
.venv/bin/ansible-playbook -l behemoth site.yml
3) Dry-Run (Check Mode)
make check
# oder:
.venv/bin/ansible-playbook --check site.yml
4) Diff sehen
make diff
5) Nur eine Rolle ausführen (Tags)
Füge bei Bedarf tags in Rollen-Tasks hinzu, z. B. in roles/zsh_omz/tasks/main.yml:
- name: Install Oh My Zsh for users
tags: [zsh, omz]
...
Dann:
.venv/bin/ansible-playbook site.yml --tags zsh
6) Zsh/Powerlevel10k auf einem neuen Host
- Host ins Inventory aufnehmen
- Playbook mit Limit ausführen:
.venv/bin/ansible-playbook -l neuerhost site.yml - Beim ersten Login ins Terminal
p10k configurelaufen lassen (auf dem Client müssen MesloLGS NF Fonts eingestellt sein).
Restore-Spickzettel
Konfiguration zurückspielen (Beispiel tycho Sites):
rsync -aHAX backup-master@192.168.178.74:/volume1/tycho-cloudpanel/sites/ /home/
WireGuard-Konfig (behemoth) wiederherstellen:
rsync -aHAX backup-master@192.168.178.74:/volume1/behemoth-wireguard/wireguard/ /etc/wireguard/
systemctl enable --now wg-quick@wg0
Troubleshooting
-
Permission denied beim Backup-Ziel:
Stelle sicher, dass der NAS-Userbackup-masterZugriff auf den Zielpfad hat und das Verzeichnis existiert. -
SSH Host Key Fehler:
Entwederhost_key_checking = False(sieheansible.cfg) oder Hostkeys manuell akzeptieren:ssh backup-master@192.168.178.74 true -
Langsame Läufe / Hänger:
Prüfe VPN-Connectivity, ggf.--timeoutinansible.cfganheben. -
OMZ-Installationsskript hängt:
Wir rufen es mitRUNZSH=noauf, damit es nicht interaktiv wird. Danach Shell aufzshumstellen erfolgt per Ansible.
Sicherheit
- Keys und Passwörter nicht im Repo ablegen. Für Secrets → Ansible Vault nutzen.
- rsync läuft über SSH innerhalb deines WireGuard-VPNs.
- Zielrechte für Backups sind restriktiv: Verzeichnisse
700.
Nächste Ausbaustufen (optional)
- Ansible Vault für sensible Variablen (SMTP, API Keys, …).
- Weitere Rollen: CrowdSec-Agent, Traefik-Labels, Docker-Compose Deployments.
- Zentrales Logging/Monitoring: promtail/loki/grafana oder glances via VPN.
Viel Spaß beim Ausrollen 🚀