backup-automation/SETUP_CHECKLIST.md

5.6 KiB

Setup-Checkliste für Backup-Automation

Phase 1: Vorbereitung (einmalig)

  • Backup-Server VM unter Proxmox erstellen

    • 2+ CPUs
    • 4+ GB RAM
    • Großes Datenvolume (/backup mit genug Platz)
    • Hostname: backup01.mbotechit.de
  • Hetzner S3 Credentials besorgen

    • Access Key ID
    • Secret Access Key
    • Endpoint
    • Bucket Name: mbo-backups
  • Netbox API Token generieren

    • Admin → Users → Create Token
    • Token kopieren und sicher speichern
  • Git-Repository erstellen in Gitea

    • Name: backup-automation
    • Description: "Netbox-integrated Borg backup automation"
    • Visibility: Private

Phase 2: Git-Repository Setup

  • Repository lokal clonen
  • Verzeichnisstruktur erstellen:
    backup-automation/
    ├── kestra/
    │   └── workflows/
    ├── ansible/
    │   ├── playbooks/
    │   ├── roles/
    │   └── group_vars/
    ├── scripts/
    ├── docs/
    └── README.md
    
  • Alle Dateien ins Repo pushen
  • .gitignore hinzufügen:
    .ansible-vault-pass
    *.key
    *.pem
    ~/.ssh/
    vault.yml
    inventory/dynamic
    .env
    

Phase 3: Backup-Server einrichten

  • Server online bringen & SSH-Zugang testen
  • Ansible auf Server installieren: apt install ansible
  • SSH-Keys generieren:
    ssh-keygen -t ed25519 -N '' -f /root/.ssh/mbo-backup-key.ed25519
    
  • Ansible Playbook ausführen:
    ansible-playbook ansible/playbooks/configure-backup-server.yaml \
      -e "hetzner_s3_access_key=YOUR_KEY" \
      -e "hetzner_s3_secret_key=YOUR_SECRET"
    
  • Borg Repositories initialisieren pro Server
  • Rclone S3-Verbindung testen:
    sudo -u backup rclone ls hetzner:mbo-backups/
    
  • Systemd Timers aktivieren:
    systemctl status mbo-rclone-sync.timer
    

Phase 4: Netbox Tags setzen

  • In Netbox Admin: Tag backup=true erstellen
  • Tag zu allen zu backupenden Systemen hinzufügen
  • Mindestens 2-3 Test-Systeme markieren

Phase 5: Kestra Workflow

  • Kestra-Workflow YAML ins System laden:

    curl -X POST https://kestra.pve.mbo-tech-it.de/api/v1/flows \
      -H "Content-Type: application/yaml" \
      -d @kestra/workflows/backup-provision.yaml
    
  • Secrets in Kestra setzen:

  • Workflow manuell triggern & testen:

    Kestra UI → automation → backup-provision → Execute
    

Phase 6: Client Setup (pro Host)

  • Auf jedem Client (manuell oder via Kestra):

    # Ansible ausführen
    ansible-playbook -i inventory.ini \
      ansible/playbooks/install-borg-client.yaml
    
  • Pro Host Überprüfung:

    • Borg installiert? borg --version
    • SSH-Key kopiert? ls -la ~/.ssh/mbo-backup-key.ed25519
    • Systemd Timer aktiv? systemctl status mbo-backup.timer
    • Script vorhanden? ls -la /usr/local/bin/mbo-backup/

Phase 7: Erste Test-Backups

  • Auf Test-Server manuell Backup starten:

    systemctl start mbo-backup.service
    
  • Logs überprüfen:

    journalctl -u mbo-backup -f
    tail -f /var/log/mbo-backup/backup-*.log
    
  • Auf Backup-Server Repository prüfen:

    ssh backup@backup01.mbotechit.de
    borg list /backup/repos/TEST_SERVER
    borg info /backup/repos/TEST_SERVER
    
  • S3-Sync überprüfen:

    # Nach Rclone-Timer (04:00)
    rclone ls hetzner:mbo-backups/production/repos/
    

Phase 8: Automatisierung aktivieren

  • In Kestra: Timer aktivieren (täglich 02:00 Uhr)

  • Kestra-UI überwachen:

    • Erste Nacht Log-Ausgaben prüfen
    • Fehler oder Warnings?
  • SSH-Key Restrictions konfigurieren (Security-Hardening):

    # Auf Backup-Server authorized_keys anpassen:
    restrict,command="/usr/bin/borg serve --restrict-to-paths /backup/repos" ssh-ed25519 AAAA...
    

Phase 9: Monitoring & Alerting (optional)

  • Prometheus für Backup-Metriken (optional)
  • Alerting via Alertmanager (optional)
  • Webhook zu MatterMost/Slack (optional)

Phase 10: Dokumentation & Schulung

  • README aktualisieren mit eigenen Pfaden
  • Team-Training: Restore-Proceduren
  • Runbook für emergencies
  • Disaster Recovery Test planen

🔍 Häufige Probleme

"SSH connection refused"

  • SSH-Key nicht auf Backup-Server? ssh-copy-id nutzen
  • Firewall blockiert? Port 22 open?
  • SSH-Service läuft? systemctl status ssh

"Borg: Repository not found"

  • Repository nicht initialisiert? Manually: borg init /backup/repos/HOSTNAME
  • Pfad falsch? Check: ansible_hostname muss mit Verzeichnis passen

"Rclone: Access Denied to S3"

  • Credentials falsch? rclone config show hetzner
  • S3-Bucket nicht existent? rclone mkdir hetzner:mbo-backups
  • Region falsch? Hetzner FSN1 vs NBG1 unterschied?

"Docker dumps failing"

  • Docker nicht installiert? Script skipped automatisch
  • Container nicht gelabelt? Label setzen: docker label backup.mysql=true
  • DB-Dumps zu groß? Kompression anpassen

Erfolgs-Indikatoren

  • Kestra Workflow läuft täglich
  • Systemd Timers alle enabled
  • Logs zeigen "Backup completed successfully"
  • Rclone syncronisiert zu S3
  • S3 zeigt Daten: rclone ls hetzner:mbo-backups/production/repos/
  • Restore-Test erfolgreich durchgeführt

Status: Initial Setup
Letzte Überprüfung: --
Nächster Review: Nach 2 Wochen automatischer Operation