162 lines
4.6 KiB
Markdown
162 lines
4.6 KiB
Markdown
# StFV Backup
|
||
|
||
Flask-basierte Backup-Verwaltung für SMB, LOCAL, FTP und SFTP – mit Web-UI, Zeitplan-Steuerung und Sync/Clone-Modus.
|
||
|
||
---
|
||
|
||
## Schnellstart
|
||
|
||
```bash
|
||
# 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
|
||
|
||
```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)
|