# 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: ```bash 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://:/` (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 ```bash # 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 ```bash 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) ```bash sudo systemctl daemon-reload sudo systemctl enable BackItUp sudo systemctl start BackItUp sudo systemctl status BackItUp sudo journalctl -u BackItUp -f ``` ### Alternative: User-Service ```bash 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). ```bash ./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 ```bash sudo journalctl -u BackItUp -f ``` ### Dienst-Status prüfen ```bash 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)