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.dbmit GUI-Ansicht (Menü: Logs) - Dienst: systemd-User-Service (läuft automatisch im Hintergrund)
- 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.0und5001) - 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.
Der Dienst startet automatisch beim Booten und läuft auch ohne aktive Anmeldesitzung.
Voraussetzungen
# Python, pip und git installieren (Oracle Linux / RHEL)
sudo dnf install python3 python3-pip git -y
# Sicherstellen, dass der Dienst auch ohne Login läuft
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:
- Virtuelle Python-Umgebung unter
.venv/anlegen - Alle Abhängigkeiten installieren
- systemd-User-Service unter
~/.config/systemd/user/BackItUp.serviceschreiben (mit korrekten Pfaden) systemctl --user daemon-reloadausführen
Dienst aktivieren und starten
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 Uhr0 */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:
./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
journalctl --user -u BackItUp -f
Dienst-Status prüfen
systemctl --user 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)