# 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://:/` (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)