Files
BackItUp/README.md
T

162 lines
4.6 KiB
Markdown
Raw Normal View History

2026-07-29 17:36:22 +02:00
# StFV Backup
Flask-basierte Backup-Verwaltung für SMB, LOCAL, FTP und SFTP – mit Web-UI, Zeitplan-Steuerung und Sync/Clone-Modus.
2026-07-29 17:36:22 +02:00
---
2026-07-29 17:36:22 +02:00
## Schnellstart
2026-07-29 17:36:22 +02:00
```bash
# Einmalig: Venv anlegen, Abhängigkeiten installieren, Ersteinrichtung starten
2026-07-29 17:36:22 +02:00
python3 main.py
# Deployment auf einem Linux-Server (systemd)
python3 main.py --setup
systemctl --user enable nextcloud-backup
systemctl --user start nextcloud-backup
2026-07-29 17:36:22 +02:00
```
2026-07-27 00:34:40 +02:00
Nach dem Start ist die Oberfläche erreichbar unter:
`http://<IP>:<Port>/` (Standard: `http://127.0.0.1:5001/`)
---
## Deployment auf Oracle Linux / RHEL
### Voraussetzungen
```bash
sudo dnf install python3 python3-pip git -y
# Service soll auch ohne aktive Login-Session laufen
sudo loginctl enable-linger $USER
```
### Projekt klonen und einrichten
```bash
git clone https://gitea.example.com/user/stfv-backup.git ~/stfv-backup
cd ~/stfv-backup
python3 main.py --setup
```
`--setup` erledigt automatisch:
1. Virtuelle Umgebung unter `.venv/` anlegen
2. Abhängigkeiten installieren
3. systemd-User-Service unter `~/.config/systemd/user/nextcloud-backup.service` schreiben (mit echten Pfaden)
4. `systemctl --user daemon-reload` ausführen
### Service aktivieren
```bash
systemctl --user enable nextcloud-backup
systemctl --user start nextcloud-backup
systemctl --user status nextcloud-backup
journalctl --user -u nextcloud-backup -f
```
### Beim ersten Start
Beim allerersten Aufruf ohne Konfiguration fragt das System interaktiv ab:
- IP und Port des Flask-Servers
- Admin-Benutzername und Passwort (wird als PBKDF2-SHA256-Hash gespeichert)
---
## Funktionsübersicht
### Backup-Modi
| Modus | Verhalten |
|---|---|
| **Vollständig** | Alle Dateien aus der Quelle werden jedes Mal übertragen |
| **Sync** | Nur neue oder geänderte Dateien (Vergleich per Größe + mtime) |
| **Clone** | Wie Sync, zusätzlich werden Dateien im Ziel gelöscht die in der Quelle nicht mehr existieren |
### Unterstützte Protokolle
- **SMB** – mit integriertem Verzeichnis-Browser und Ordner-Erstellung
- **LOCAL** – lokales Dateisystem mit Browser und Ordner-Erstellung
- **FTP** – mit konfigurierbarem Port (Standard: 21)
- **SFTP** – SSH-basiert (Standard-Port: 22)
### Zeitplan
- CRON-Ausdruck frei definierbar (z. B. `0 2 * * *` für täglich um 02:00 Uhr)
- CRON-Vorschau im Wizard zeigt den nächsten geplanten Zeitpunkt
- Leer lassen = nur manuelles Backup möglich
- „Nächster Lauf" im Dashboard wird nach jedem Backup automatisch aktualisiert
### Rotation
- Anzahl aufzubewahrender Backups konfigurierbar
- `0` = unbegrenzt (keine automatische Löschung)
- Nur bei Modus **Vollständig** verfügbar (Sync/Clone verwalten den Zustand selbst)
### Kompression & Verschlüsselung
| Methode | Unterstützt |
|---|---|
| Keine (1:1 Kopie) | ✅ |
| zip | ✅ |
| tar.gz / tar.bz2 / tar.xz | ✅ |
| 7z | ✅ (py7zr erforderlich) |
| AES-256 Archiv-Passwort | ✅ |
### Sicherheit
- Passwörter werden nie im Klartext gespeichert
- Benutzerpasswörter: PBKDF2-SHA256
- Verbindungspasswörter: AES-verschlüsselt in der Datenbank
- Session-basierter Login mit Rollen (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 # Dataclasses
remote_targets.py # Verbindungstests, Browser-Helfer
setup_wizard.py # Interaktive Erstkonfiguration (CLI)
venv_manager.py # Venv-Prüfung und Re-Exec
dependencies.py # Paketinstallation
security.py # Passwort-Hashing
paths.py # Zentrale Pfadverwaltung
ui.py # Konsolenausgabe
templates/ # Jinja2-Templates (Dashboard, Wizard, ...)
data/
config.db # SQLite-Datenbank (wird automatisch angelegt)
deploy/
systemd/
nextcloud-backup.service # Vorlage; --setup schreibt echte Pfade
scripts/
service.sh # Manuelle Service-Verwaltung (Alternative zu --setup)
requirements.txt
```
---
## Service manuell verwalten
```bash
./scripts/service.sh install # Service-Datei installieren + daemon-reload
./scripts/service.sh start
./scripts/service.sh stop
./scripts/service.sh restart
./scripts/service.sh status
./scripts/service.sh logs
./scripts/service.sh enable # Autostart aktivieren
./scripts/service.sh disable
```
---
## Anforderungen
- Python 3.10+
- Abhängigkeiten: siehe `requirements.txt` (werden beim Start automatisch installiert)