233 lines
7.7 KiB
Markdown
233 lines
7.7 KiB
Markdown
# 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://<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
|
||
|
||
```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)
|