Files
BackItUp/README.md
T

4.6 KiB
Raw Blame History

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:

  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

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)