Files
BackItUp/README.md
T
2026-08-16 00:38:25 +02:00

218 lines
7.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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-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:
```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://<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
```bash
# 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
```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
### Dienst aktivieren und starten
```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:
```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
journalctl --user -u BackItUp -f
```
### Dienst-Status prüfen
```bash
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)