2025-08-28 15:42:18 +02:00
2025-08-28 15:42:18 +02:00
2025-08-28 15:42:18 +02:00
2025-08-28 15:42:18 +02:00
2025-08-28 15:42:18 +02:00
2025-08-28 15:42:18 +02:00
2025-08-28 15:42:18 +02:00
2025-08-28 15:42:18 +02:00
2025-08-28 15:42:18 +02:00
2025-08-28 15:42:18 +02:00

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)

  1. host_vars/tycho.yml erweitern:
    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
    
  2. Playbook laufen lassen:
    make run
    
  3. 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 configure laufen 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-User backup-master Zugriff auf den Zielpfad hat und das Verzeichnis existiert.

  • SSH Host Key Fehler:
    Entweder host_key_checking = False (siehe ansible.cfg) oder Hostkeys manuell akzeptieren:

    ssh backup-master@192.168.178.74 true
    
  • Langsame Läufe / Hänger:
    Prüfe VPN-Connectivity, ggf. --timeout in ansible.cfg anheben.

  • OMZ-Installationsskript hängt:
    Wir rufen es mit RUNZSH=no auf, damit es nicht interaktiv wird. Danach Shell auf zsh umstellen 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 🚀

Description
No description provided
Readme 32 KiB
Languages
Jinja 59.8%
Makefile 40.2%