4.6 KiB
4.6 KiB
StFV Backup
Flask-basierte Backup-Verwaltung für SMB, LOCAL, FTP und SFTP – mit Web-UI, Zeitplan-Steuerung und Sync/Clone-Modus.
Schnellstart
# Einmalig: Venv anlegen, Abhängigkeiten installieren, Ersteinrichtung starten
python3 main.py
# Deployment auf einem Linux-Server (systemd)
python3 main.py --setup
systemctl --user enable nextcloud-backup
systemctl --user start nextcloud-backup
Nach dem Start ist die Oberfläche erreichbar unter:
http://<IP>:<Port>/ (Standard: http://127.0.0.1:5001/)
Deployment auf Oracle Linux / RHEL
Voraussetzungen
sudo dnf install python3 python3-pip git -y
# Service soll auch ohne aktive Login-Session laufen
sudo loginctl enable-linger $USER
Projekt klonen und einrichten
git clone https://gitea.example.com/user/stfv-backup.git ~/stfv-backup
cd ~/stfv-backup
python3 main.py --setup
--setup erledigt automatisch:
- Virtuelle Umgebung unter
.venv/anlegen - Abhängigkeiten installieren
- systemd-User-Service unter
~/.config/systemd/user/nextcloud-backup.serviceschreiben (mit echten Pfaden) systemctl --user daemon-reloadausführen
Service aktivieren
systemctl --user enable nextcloud-backup
systemctl --user start nextcloud-backup
systemctl --user status nextcloud-backup
journalctl --user -u nextcloud-backup -f
Beim ersten Start
Beim allerersten Aufruf ohne Konfiguration fragt das System interaktiv ab:
- IP und Port des Flask-Servers
- Admin-Benutzername und Passwort (wird als PBKDF2-SHA256-Hash gespeichert)
Funktionsübersicht
Backup-Modi
| Modus | Verhalten |
|---|---|
| Vollständig | Alle Dateien aus der Quelle werden jedes Mal übertragen |
| Sync | Nur neue oder geänderte Dateien (Vergleich per Größe + mtime) |
| Clone | Wie Sync, zusätzlich werden Dateien im Ziel gelöscht die in der Quelle nicht mehr existieren |
Unterstützte Protokolle
- SMB – mit integriertem Verzeichnis-Browser und Ordner-Erstellung
- LOCAL – lokales Dateisystem mit Browser und Ordner-Erstellung
- FTP – mit konfigurierbarem Port (Standard: 21)
- SFTP – SSH-basiert (Standard-Port: 22)
Zeitplan
- CRON-Ausdruck frei definierbar (z. B.
0 2 * * *für täglich um 02:00 Uhr) - CRON-Vorschau im Wizard zeigt den nächsten geplanten Zeitpunkt
- Leer lassen = nur manuelles Backup möglich
- „Nächster Lauf" im Dashboard wird nach jedem Backup automatisch aktualisiert
Rotation
- Anzahl aufzubewahrender Backups konfigurierbar
0= unbegrenzt (keine automatische Löschung)- Nur bei Modus Vollständig verfügbar (Sync/Clone verwalten den Zustand selbst)
Kompression & Verschlüsselung
| Methode | Unterstützt |
|---|---|
| Keine (1:1 Kopie) | ✅ |
| zip | ✅ |
| tar.gz / tar.bz2 / tar.xz | ✅ |
| 7z | ✅ (py7zr erforderlich) |
| AES-256 Archiv-Passwort | ✅ |
Sicherheit
- Passwörter werden nie im Klartext gespeichert
- Benutzerpasswörter: PBKDF2-SHA256
- Verbindungspasswörter: AES-verschlüsselt in der Datenbank
- Session-basierter Login mit Rollen (Admin / Benutzer)
Projektstruktur
main.py # Einstiegspunkt; --setup für Deployment
app/
app_runner.py # Bootstrap, Setup-Logik, systemd-Installation
web_server.py # Flask-Routen, Backup-Ausführung, Scheduler
config_store.py # SQLite-Schema, Migrationen, CRUD
config_model.py # Dataclasses
remote_targets.py # Verbindungstests, Browser-Helfer
setup_wizard.py # Interaktive Erstkonfiguration (CLI)
venv_manager.py # Venv-Prüfung und Re-Exec
dependencies.py # Paketinstallation
security.py # Passwort-Hashing
paths.py # Zentrale Pfadverwaltung
ui.py # Konsolenausgabe
templates/ # Jinja2-Templates (Dashboard, Wizard, ...)
data/
config.db # SQLite-Datenbank (wird automatisch angelegt)
deploy/
systemd/
nextcloud-backup.service # Vorlage; --setup schreibt echte Pfade
scripts/
service.sh # Manuelle Service-Verwaltung (Alternative zu --setup)
requirements.txt
Service manuell verwalten
./scripts/service.sh install # Service-Datei installieren + daemon-reload
./scripts/service.sh start
./scripts/service.sh stop
./scripts/service.sh restart
./scripts/service.sh status
./scripts/service.sh logs
./scripts/service.sh enable # Autostart aktivieren
./scripts/service.sh disable
Anforderungen
- Python 3.10+
- Abhängigkeiten: siehe
requirements.txt(werden beim Start automatisch installiert)