5.6 KiB
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:
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
- Name:
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
.gitignorehinzufü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=trueerstellen - 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.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 TokenNETBOX_URL= https://netbox.mbo-tech-it.deHETZNER_S3_KEY= S3 Access KeyHETZNER_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):
# 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/
- Borg installiert?
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@backup.mbo-tech-it.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-idnutzen - 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_hostnamemuss 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