BackItUp

Überblick

BackItUp ist eine webbasierte Anwendung zur Verwaltung automatischer Datei-Backups.
Sie läuft als Hintergrunddienst auf einem Linux-Server und ist über einen Browser erreichbar.

  • Technologie: Python 3 / Flask (Webanwendung)
  • Oberfläche: Web-UI im Browser (kein Programmieren nötig)
  • Datenbank: SQLite (wird automatisch angelegt unter data/config.db)
  • Logging: SQLite-Logdatenbank unter data/log.db mit GUI-Ansicht (Menü: Logs)
  • Dienst: systemd-Service (als Systemdienst oder Benutzerdienst)
  • Standard-Adresse: http://127.0.0.1:5001/
  • Einstiegspunkt: main.py

Hintergrund / Wozu dient das?

Das Tool ermöglicht es, Dateien von einem Ort (Quelle) regelmäßig an einen anderen Ort (Ziel) zu kopieren – vollautomatisch nach einem selbst definierten Zeitplan.

Typische Anwendungsfälle:

  • Dateien von einem Netzlaufwerk (SMB) auf einen lokalen Server sichern
  • Inhalte per SFTP oder FTP auf einen entfernten Server übertragen
  • Regelmäßige Spiegelung eines Verzeichnisses (Sync/Clone)

Die Konfiguration erfolgt komplett über die Weboberfläche – kein Editieren von Konfigurationsdateien nötig.


Schnellstart (erster Start / Entwicklung)

Beim allerersten Aufruf ohne vorhandene Konfiguration richtet das System sich selbst ein:

python3 main.py

Das Programm fragt dann interaktiv ab:

  • IP und Port des Webservers (z. B. 0.0.0.0 und 5001)
  • Admin-Benutzername und Passwort für den Login im Browser

Danach ist die Oberfläche erreichbar unter: http://<IP>:<Port>/ (Standard: http://127.0.0.1:5001/)


Deployment auf einem Linux-Server (produktiv)

Für den dauerhaften Betrieb wird die Anwendung als systemd-Dienst eingerichtet.
Im produktiven Betrieb ist üblicherweise ein Systemdienst sinnvoll (/etc/systemd/system/BackItUp.service).

Voraussetzungen

# Python, pip und git installieren (Oracle Linux / RHEL)
sudo dnf install python3 python3-pip git -y

# Nur fuer User-Services noetig (nicht fuer Systemdienst):
# sudo loginctl enable-linger $USER

Projekt klonen und einrichten

git clone git@10.11.12.66:EDV/BackItUp.git ~/BackItUp
cd ~/BackItUp
python3 main.py --setup

--setup erledigt automatisch:

  1. Virtuelle Python-Umgebung unter .venv/ anlegen
  2. Alle Abhängigkeiten installieren
  3. systemd-User-Service unter ~/.config/systemd/user/BackItUp.service schreiben (mit korrekten Pfaden)
  4. systemctl --user daemon-reload ausführen

Hinweis: --setup richtet aktuell einen User-Service ein. Wenn BackItUp als Systemdienst laufen soll, muss die Service-Datei unter /etc/systemd/system/BackItUp.service installiert und mit sudo systemctl ... verwaltet werden.

Dienst aktivieren und starten (Systemdienst, empfohlen fuer Prod)

sudo systemctl daemon-reload
sudo systemctl enable BackItUp
sudo systemctl start BackItUp
sudo systemctl status BackItUp
sudo journalctl -u BackItUp -f

Alternative: User-Service

systemctl --user enable BackItUp   # Autostart beim Booten aktivieren
systemctl --user start  BackItUp   # Dienst jetzt starten
systemctl --user status BackItUp   # Aktuellen Status anzeigen
journalctl --user -u BackItUp -f   # Live-Log verfolgen

Funktionsübersicht

Backup-Modi

Es gibt drei Betriebsmodi, die sich im Umgang mit bereits vorhandenen Zieldateien unterscheiden:

Modus Verhalten
Vollständig Alle Dateien aus der Quelle werden jedes Mal übertragen (neue Kopie)
Sync Nur neue oder geänderte Dateien werden übertragen (Vergleich per Größe + Änderungsdatum)
Clone Wie Sync, aber Dateien im Ziel, die in der Quelle nicht mehr existieren, werden gelöscht

Faustregel: Vollständig für versionierte Snapshots, Sync für einfache Spiegelung, Clone für exakte 1:1-Kopie.

Unterstützte Protokolle / Verbindungsarten

Protokoll Beschreibung
SMB Windows-Netzlaufwerke; mit integriertem Verzeichnis-Browser
LOCAL Lokales Dateisystem des Servers; mit Verzeichnis-Browser
FTP Standard-FTP; Port konfigurierbar (Standard: 21)
SFTP SSH-basierte Dateiübertragung (Standard-Port: 22)

Zeitplan (CRON)

Der Backup-Zeitplan wird als CRON-Ausdruck angegeben.
Die Oberfläche zeigt dabei eine Vorschau des nächsten geplanten Zeitpunkts an.

Beispiele:

  • 0 2 * * * → täglich um 02:00 Uhr
  • 0 */6 * * * → alle 6 Stunden
  • (leer lassen) → kein automatischer Lauf, nur manuelles Backup möglich

Rotation (nur Modus „Vollständig")

  • Legt fest, wie viele Backup-Kopien aufbewahrt werden
  • Ältere Kopien werden automatisch gelöscht, sobald der Wert überschritten wird
  • 0 = unbegrenzt (keine automatische Löschung)
  • Im Sync/Clone-Modus nicht verfügbar, da dort kein Versionsarchiv angelegt wird

Kompression & Verschlüsselung

Backups können wahlweise komprimiert und/oder mit einem Passwort gesichert werden:

Methode Unterstützt
Keine (1:1 Kopie) ✅
zip ✅
tar.gz / tar.bz2 / tar.xz ✅
7z ✅ (py7zr ist bereits in requirements.txt enthalten)
AES-256 Archiv-Passwort ✅

Sicherheitsmodell

Zugangsdaten werden grundsätzlich nie im Klartext gespeichert:

  • Benutzerpasswörter (Login): PBKDF2-SHA256-Hash
  • Verbindungspasswörter (SMB, FTP usw.): AES-256-verschlüsselt in der Datenbank
  • Session-Login: rollenbasiert (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             # Datenklassen (Backup-Jobs, Benutzer usw.)
  remote_targets.py           # Verbindungstests, Verzeichnis-Browser
  setup_wizard.py             # Interaktive Erstkonfiguration (CLI)
  venv_manager.py             # Venv-Prüfung und automatischer Re-Start
  dependencies.py             # Automatische Paketinstallation
  security.py                 # Passwort-Hashing
  paths.py                    # Zentrale Pfadverwaltung
  ui.py                       # Konsolenausgabe (Farben, Fortschritt)
  templates/                  # HTML-Vorlagen für die Weboberfläche
data/
  config.db                   # SQLite-Datenbank (wird beim ersten Start angelegt)
  log.db                      # SQLite-Logdatenbank für Laufzeit-, Fehler- und Audit-Logs
deploy/
  systemd/
    BackItUp.service           # Vorlage; --setup schreibt die echten Pfade
scripts/
  service.sh                  # Manuelle Service-Verwaltung (Alternative zu --setup)
requirements.txt              # Python-Abhängigkeiten

Betrieb

Dienst manuell verwalten

Das Script scripts/service.sh bietet eine komfortable Alternative zu den systemctl-Befehlen:

Hinweis: Das Script arbeitet aktuell mit systemctl --user (User-Service).

./scripts/service.sh install   # Service-Datei installieren + daemon-reload
./scripts/service.sh start     # Dienst starten
./scripts/service.sh stop      # Dienst stoppen
./scripts/service.sh restart   # Dienst neu starten
./scripts/service.sh status    # Aktuellen Status anzeigen
./scripts/service.sh logs      # Log ausgeben
./scripts/service.sh enable    # Autostart aktivieren
./scripts/service.sh disable   # Autostart deaktivieren

Log live verfolgen

sudo journalctl -u BackItUp -f

Dienst-Status prüfen

sudo systemctl status BackItUp

Anforderungen

  • Python: 3.10 oder neuer
  • Abhängigkeiten: werden beim ersten Start automatisch installiert (siehe requirements.txt)
  • Betriebssystem: Linux mit systemd (getestet auf Oracle Linux / RHEL)
S
Description
No description provided
Readme
258 KiB
Languages
Python 60%
HTML 39.4%
Shell 0.6%