2026-07-29 17:36:22 +02:00
|
|
|
|
# StFV Backup
|
|
|
|
|
|
|
2026-08-11 22:45:58 +02:00
|
|
|
|
Flask-basierte Backup-Verwaltung für SMB, LOCAL, FTP und SFTP – mit Web-UI, Zeitplan-Steuerung und Sync/Clone-Modus.
|
2026-07-29 17:36:22 +02:00
|
|
|
|
|
2026-08-11 22:45:58 +02:00
|
|
|
|
---
|
2026-07-29 17:36:22 +02:00
|
|
|
|
|
2026-08-11 22:45:58 +02:00
|
|
|
|
## Schnellstart
|
2026-07-29 17:36:22 +02:00
|
|
|
|
|
|
|
|
|
|
```bash
|
2026-08-11 22:45:58 +02:00
|
|
|
|
# Einmalig: Venv anlegen, Abhängigkeiten installieren, Ersteinrichtung starten
|
2026-07-29 17:36:22 +02:00
|
|
|
|
python3 main.py
|
2026-08-11 22:45:58 +02:00
|
|
|
|
|
|
|
|
|
|
# Deployment auf einem Linux-Server (systemd)
|
|
|
|
|
|
python3 main.py --setup
|
|
|
|
|
|
systemctl --user enable nextcloud-backup
|
|
|
|
|
|
systemctl --user start nextcloud-backup
|
2026-07-29 17:36:22 +02:00
|
|
|
|
```
|
2026-07-27 00:34:40 +02:00
|
|
|
|
|
2026-08-11 22:45:58 +02:00
|
|
|
|
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
|
|
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
|
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
|
|
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
|
git clone https://gitea.example.com/user/stfv-backup.git ~/stfv-backup
|
|
|
|
|
|
cd ~/stfv-backup
|
|
|
|
|
|
python3 main.py --setup
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
`--setup` erledigt automatisch:
|
|
|
|
|
|
1. Virtuelle Umgebung unter `.venv/` anlegen
|
|
|
|
|
|
2. Abhängigkeiten installieren
|
|
|
|
|
|
3. systemd-User-Service unter `~/.config/systemd/user/nextcloud-backup.service` schreiben (mit echten Pfaden)
|
|
|
|
|
|
4. `systemctl --user daemon-reload` ausführen
|
|
|
|
|
|
|
|
|
|
|
|
### Service aktivieren
|
|
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
|
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
|
|
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
|
./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)
|