backup-automation/SETUP_CHECKLIST.md

209 lines
5.6 KiB
Markdown

# 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_SERVER_HOSTNAME}`
- [ ] 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.pve.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_SERVER_HOSTNAME}
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