# 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: `backup.mbo-tech-it.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: ```bash ssh-keygen -t ed25519 -N '' -f /root/.ssh/mbo-backup-key.ed25519 ``` - [ ] Ansible Playbook ausführen: ```bash 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: ```bash sudo -u backup rclone ls hetzner:mbo-backups/ ``` - [ ] Systemd Timers aktivieren: ```bash 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: ```bash curl -X POST https://kestra.mbo-tech-it.de/api/v1/flows \ -H "Content-Type: application/yaml" \ -d @kestra/workflows/backup-provision.yaml ``` - [ ] Secrets in Kestra setzen: - [ ] `NETBOX_TOKEN` = dein API Token - [ ] `NETBOX_URL` = https://netbox.mbo-tech-it.de - [ ] `HETZNER_S3_KEY` = S3 Access Key - [ ] `HETZNER_S3_SECRET` = S3 Secret Key - [ ] Workflow manuell triggern & testen: ``` Kestra UI → automation → backup-provision → Execute ``` ## Phase 6: Client Setup (pro Host) - [ ] Auf jedem Client (manuell oder via Kestra): ```bash # 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: ```bash systemctl start mbo-backup.service ``` - [ ] Logs überprüfen: ```bash journalctl -u mbo-backup -f tail -f /var/log/mbo-backup/backup-*.log ``` - [ ] Auf Backup-Server Repository prüfen: ```bash ssh backup@backup.mbo-tech-it.de borg list /backup/repos/TEST_SERVER borg info /backup/repos/TEST_SERVER ``` - [ ] S3-Sync überprüfen: ```bash # 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): ```bash # 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