Doel
Alles van mijn AI-assistent Jarvis (de scripts, het geheugen en de werkdata) moet elke nacht buiten de machine staan. En de backup moet aantoonbaar terug te zetten zijn: een backup die je nooit hebt teruggezet, is een hoop.
Aanpak
- Een eigen cloud als doel. In het homelab draait OpenCloud. Die gaat zelf versleuteld naar een tweede plek buiten huis, dus een backup daarheen is een volwaardige keten.
- Git-bundles in plaats van losse bestanden. Een bundle is één bestand met de volledige geschiedenis van een repository, en
git clonekan er direct uit herstellen. - Eerst controleren, dan uploaden. Vóór elke upload doorzoekt het script de hele geschiedenis van de repositories op geheimen. Vindt het iets, dan wordt er niets verstuurd.
- Alleen melden als het misgaat. Een mislukte backup stuurt een bericht via Telegram; een geslaagde blijft stil.
Configuratie
Het script is gewoon Python zonder extra pakketten. Per nacht komt er een map met de datum, met daarin:
| Bestand | Inhoud |
|---|---|
<repository>.bundle |
per repository de volledige git-geschiedenis |
data.tar.gz |
werkdata die niet in git staat |
Uploaden gaat met WebDAV (MKCOL voor de map, PUT per bestand) en een app-token, omdat OpenCloud via WebDAV geen gewoon wachtwoord accepteert. De laatste 30 nachten blijven staan; oudere mappen ruimt het script zelf op. Een systemd-timer start het om 23:30.
Resultaten
De eerste backup en een volledige hersteltest zijn geslaagd: de bundles gekloond, de laatste commit gelijk aan het origineel en de werkdata compleet. De geheimcontrole gaf bij het testen twee keer vals alarm; beide zijn opgelost voordat de timer aanging.
Vervolgstappen
- De hersteltest periodiek automatisch laten draaien.
- Nieuwe repositories, zoals die van deze website, meenemen in dezelfde backup.
