🎉 Optimierung der RDP-Server-Installation und Firewall-Konfiguration im Backend 🛠️. Vereinfachte Installation von xrdp und XFCE, verbesserte Fehlerbehandlung und Validierung der Firewall-Einstellungen. Aktualisierte Logik zur Überprüfung des Dienststatus und zur Konfiguration von Netzwerkquellen.
This commit is contained in:
@@ -2,18 +2,19 @@
|
||||
|
||||
## Übersicht der Änderungen
|
||||
|
||||
Diese Version konsolidiert alle bisherigen Installationsskripte in ein einziges, benutzerfreundliches Setup-System.
|
||||
Diese Version konsolidiert alle bisherigen Installationsskripte in ein einziges, benutzerfreundliches Setup-System mit **vereinfachten 2 Installationsmodi**.
|
||||
|
||||
## 🔄 Strukturelle Änderungen
|
||||
|
||||
### Neue Dateien
|
||||
|
||||
- **`setup.sh`** - Konsolidiertes Hauptinstallationsskript mit Menüführung
|
||||
- **`setup.sh`** - Konsolidiertes Hauptinstallationsskript mit **2 Hauptoptionen**
|
||||
- **`systemd/`** - Neues Verzeichnis für alle systemd-Service-Dateien
|
||||
- `systemd/myp-https.service`
|
||||
- `systemd/myp-kiosk.service`
|
||||
- `systemd/kiosk-watchdog.service`
|
||||
- `systemd/kiosk-watchdog-python.service`
|
||||
- `systemd/myp-firewall.service` - **Erweiterte Firewall-Konfiguration**
|
||||
- **`docs/SETUP_ANLEITUNG.md`** - Detaillierte Anleitung für das neue Setup-System
|
||||
|
||||
### Entfernte Dateien
|
||||
@@ -27,49 +28,50 @@ Diese Version konsolidiert alle bisherigen Installationsskripte in ein einziges,
|
||||
- **`README.md`** - Vollständig überarbeitet für neues Setup-System
|
||||
- **Version erhöht auf 4.0.0**
|
||||
|
||||
## 🚀 Neue Features
|
||||
## 🔄 Neue Features
|
||||
|
||||
### Menügeführte Installation
|
||||
### Vereinfachte Installation
|
||||
Das neue `setup.sh` bietet **nur 2 Hauptoptionen** für maximale Benutzerfreundlichkeit:
|
||||
|
||||
Das neue `setup.sh` bietet vier verschiedene Installationsmodi:
|
||||
1. **Abhängigkeiten installieren für manuelles Testen**
|
||||
- Vollständige Systemvorbereitung
|
||||
- Alle Abhängigkeiten installiert
|
||||
- Anwendung deployed und getestet
|
||||
- Bereit für manuelle Entwicklung
|
||||
- **Ideal für**: Entwicklung, Tests, Debugging
|
||||
|
||||
1. **Nur Abhängigkeiten installieren**
|
||||
2. **Vollständige Kiosk-Installation mit Remote-Zugang**
|
||||
- **Automatischer Kiosk-Modus** beim Boot
|
||||
- **SSH-Zugang**: `user:raspberry`
|
||||
- **RDP-Zugang**: `root:744563017196A` mit XFCE
|
||||
- **Erweiterte Firewall**: 192.168.0.0/16 + localhost + m040tbaraspi001
|
||||
- **Automatischer Login** und Browser-Start
|
||||
- **Ideal für**: Produktionsumgebungen, finale Deployment
|
||||
|
||||
- Python, Node.js, SSL-Zertifikate
|
||||
- Anwendungsdeployment
|
||||
- Minimaler Funktionstest
|
||||
- Ideal für Entwicklung
|
||||
2. **Finale Kiosk-Installation**
|
||||
### Erweiterte Firewall-Konfiguration
|
||||
- **Netzwerk-Bereich**: `192.168.0.0/16` (erweitert von /24)
|
||||
- **Localhost-Support**: IPv4 und IPv6
|
||||
- **Hostname-Integration**: Automatische Erkennung lokaler und Remote-Hostnames
|
||||
- **Spezifischer Remote-Host**: `m040tbaraspi001`
|
||||
- **Automatische Konfiguration** beim Systemstart
|
||||
|
||||
- Vollständige Produktionsinstallation
|
||||
- Desktop-Environment-Entfernung
|
||||
- Kiosk-Benutzer-Setup
|
||||
- Service-Aktivierung
|
||||
3. **Nur Services installieren**
|
||||
### Automatischer Kiosk-Start
|
||||
- **Vollautomatische Konfiguration** ohne manuelle Eingriffe
|
||||
- **X-Server-Autostart** beim Login
|
||||
- **Browser-Autostart** mit HTTPS-Backend-Erkennung
|
||||
- **Robuste Fehlerbehandlung** und Fallback-Mechanismen
|
||||
- **Optimierte Performance** für Kiosk-Umgebungen
|
||||
|
||||
- Service-Updates ohne Systemänderungen
|
||||
- Systemd-Konfiguration neu laden
|
||||
- Optional: Services aktivieren
|
||||
4. **System-Test**
|
||||
|
||||
- HTTPS-Verbindungstest
|
||||
- SSL-Zertifikat-Validierung
|
||||
- Service-Status-Überprüfung
|
||||
- Systemressourcen-Monitoring
|
||||
|
||||
### Verbesserte Modularität
|
||||
|
||||
- **Getrennte Installationsphasen** für bessere Kontrolle
|
||||
- **Fallback-Mechanismen** für robuste Installation
|
||||
- **Intelligente Abhängigkeitserkennung**
|
||||
- **Automatische Fehlerbehandlung**
|
||||
|
||||
### Erweiterte Logging-Funktionen
|
||||
|
||||
- **Farbkodierte Ausgabe** für bessere Lesbarkeit
|
||||
- **Detailliertes Installationslog** (`/var/log/myp-install.log`)
|
||||
- **Strukturierte Fehlermeldungen**
|
||||
- **Fortschrittsanzeigen**
|
||||
### Erweiterte Netzwerk-Sicherheit
|
||||
- **IPv6 vollständig deaktiviert** auf allen Ebenen (GRUB, Kernel, Firewall)
|
||||
- **IP-Spoofing-Schutz** mit Reverse Path Filtering
|
||||
- **SYN-Flood-Schutz** mit optimierten TCP-Einstellungen
|
||||
- **DDoS-Abwehr** durch Broadcast-Ping-Schutz
|
||||
- **TCP-RFC-Compliance** verhindert aggressive Paketwiederholungen
|
||||
- **Optimierte Netzwerk-Performance** durch TCP-Window-Skalierung
|
||||
- **Anti-Fingerprinting** durch deaktivierte TCP-Timestamps
|
||||
- **Verdächtige Pakete werden geloggt** (Martian-Pakete)
|
||||
- **Paketweiterleitung deaktiviert** (kein Router-Verhalten)
|
||||
|
||||
## 🔧 Technische Verbesserungen
|
||||
|
||||
|
@@ -1 +1,471 @@
|
||||
|
||||
# MYP Druckerverwaltung - Debian/Linux Kiosk-Installation
|
||||
|
||||
## Übersicht
|
||||
|
||||
Diese Anleitung beschreibt die Installation der MYP Druckerverwaltung als vollständigen Kiosk-Modus auf Debian/Linux-Systemen (insbesondere Raspberry Pi OS). Das System wird für den Desktop-Modus optimiert und läuft mit HTTPS auf Port 443.
|
||||
|
||||
## Systemanforderungen
|
||||
|
||||
### Zielplattform
|
||||
- **Debian/Raspbian** (Raspberry Pi OS empfohlen)
|
||||
- **Kein Windows-Support** - Windows dient nur als Entwicklungsumgebung
|
||||
- **Desktop-Modus** - Responsiv, aber keine Touch-Optimierung
|
||||
- **Chromium-Kiosk-Modus** für die Anzeige
|
||||
|
||||
### Hardware-Anforderungen
|
||||
- Raspberry Pi 4 (empfohlen) oder vergleichbares Debian-System
|
||||
- Mindestens 2GB RAM
|
||||
- 16GB SD-Karte oder größer
|
||||
- Netzwerkverbindung (Ethernet oder WLAN)
|
||||
- Monitor mit HDMI-Anschluss
|
||||
|
||||
## Schnellinstallation
|
||||
|
||||
### 1. Repository klonen
|
||||
```bash
|
||||
git clone <repository-url>
|
||||
cd backend
|
||||
```
|
||||
|
||||
### 2. Installationsskript ausführen
|
||||
```bash
|
||||
sudo chmod +x combined.sh
|
||||
sudo ./combined.sh
|
||||
```
|
||||
|
||||
### 3. Installationsoptionen
|
||||
Das Skript bietet folgende Optionen:
|
||||
|
||||
1. **System-Abhängigkeiten installieren**
|
||||
- Python 3, Node.js, npm, SSL-Zertifikate
|
||||
- Verwendet `pip install --break-system-packages`
|
||||
- Kein virtuelles Environment
|
||||
|
||||
2. **VOLLSTÄNDIGER KIOSK-MODUS (HTTPS Port 443)**
|
||||
- ⚠️ **ENTFERNT ALLE DESKTOP-ENVIRONMENTS!**
|
||||
- Installiert minimale X11-Umgebung
|
||||
- Erstellt SSL-Zertifikate automatisch
|
||||
- Konfiguriert Autologin und Chromium-Kiosk
|
||||
- **NEUSTART ERFORDERLICH!**
|
||||
|
||||
## Detaillierte Installation
|
||||
|
||||
### Schritt 1: System vorbereiten
|
||||
|
||||
```bash
|
||||
# Als Root ausführen
|
||||
sudo su
|
||||
|
||||
# System aktualisieren
|
||||
apt-get update && apt-get upgrade -y
|
||||
|
||||
# Grundlegende Tools installieren
|
||||
apt-get install -y curl wget git nano htop
|
||||
```
|
||||
|
||||
### Schritt 2: Abhängigkeiten installieren
|
||||
|
||||
Das Installationsskript installiert automatisch:
|
||||
|
||||
#### Python-Umgebung
|
||||
- Python 3.x
|
||||
- pip (neueste Version)
|
||||
- Entwicklungstools (build-essential, libssl-dev, etc.)
|
||||
|
||||
#### Node.js und npm
|
||||
- Node.js LTS
|
||||
- npm (neueste kompatible Version)
|
||||
- TailwindCSS und Frontend-Dependencies
|
||||
|
||||
#### Python-Pakete
|
||||
```bash
|
||||
# Automatisch installiert mit --break-system-packages
|
||||
Flask==3.1.1
|
||||
Flask-Login==0.6.3
|
||||
Flask-WTF==1.2.1
|
||||
SQLAlchemy==2.0.36
|
||||
bcrypt==4.2.1
|
||||
cryptography==44.0.0
|
||||
Werkzeug==3.1.3
|
||||
requests==2.32.3
|
||||
psutil==6.1.1
|
||||
gunicorn==23.0.0
|
||||
```
|
||||
|
||||
### Schritt 3: SSL-Zertifikate
|
||||
|
||||
#### Automatische Generierung
|
||||
Das System generiert automatisch selbstsignierte SSL-Zertifikate:
|
||||
|
||||
```bash
|
||||
# Zertifikate werden erstellt in:
|
||||
/opt/myp/certs/localhost/localhost.crt
|
||||
/opt/myp/certs/localhost/localhost.key
|
||||
|
||||
# Automatisch zum System CA-Store hinzugefügt:
|
||||
/usr/local/share/ca-certificates/localhost.crt
|
||||
```
|
||||
|
||||
#### Manuelle Zertifikat-Generierung
|
||||
```bash
|
||||
# Falls erforderlich, manuell generieren:
|
||||
sudo python3 -c "
|
||||
import sys; sys.path.insert(0, '/opt/myp')
|
||||
from utils.ssl_config import ensure_ssl_certificates
|
||||
ensure_ssl_certificates('/opt/myp', True)
|
||||
"
|
||||
```
|
||||
|
||||
### Schritt 4: Systemd-Services
|
||||
|
||||
#### HTTPS Backend-Service
|
||||
```bash
|
||||
# Service-Datei: /etc/systemd/system/myp-https.service
|
||||
sudo systemctl enable myp-https.service
|
||||
sudo systemctl start myp-https.service
|
||||
|
||||
# Status prüfen
|
||||
sudo systemctl status myp-https.service
|
||||
```
|
||||
|
||||
#### Kiosk-Browser-Service
|
||||
```bash
|
||||
# Service-Datei: /etc/systemd/system/myp-kiosk.service
|
||||
sudo systemctl enable myp-kiosk.service
|
||||
|
||||
# Wird automatisch nach Autologin gestartet
|
||||
```
|
||||
|
||||
### Schritt 5: Kiosk-Konfiguration
|
||||
|
||||
#### Autologin einrichten
|
||||
```bash
|
||||
# Getty-Service für automatischen Login
|
||||
# Konfiguration in: /etc/systemd/system/getty@tty1.service.d/override.conf
|
||||
|
||||
[Service]
|
||||
ExecStart=
|
||||
ExecStart=-/sbin/agetty --autologin kiosk --noclear %I $TERM
|
||||
```
|
||||
|
||||
#### Browser-Konfiguration
|
||||
```bash
|
||||
# Chromium-Kiosk startet automatisch mit:
|
||||
# - Vollbildmodus
|
||||
# - SSL-Zertifikat-Ignorierung für localhost
|
||||
# - Optimierte Performance-Einstellungen
|
||||
# - URL: https://localhost:443
|
||||
```
|
||||
|
||||
## Konfiguration
|
||||
|
||||
### Netzwerk-Zugriff
|
||||
|
||||
#### HTTPS-URLs
|
||||
- **Lokal**: `https://localhost:443`
|
||||
- **Netzwerk**: `https://<raspberry-pi-ip>:443`
|
||||
|
||||
#### Firewall (falls aktiviert)
|
||||
```bash
|
||||
# Port 443 öffnen
|
||||
sudo ufw allow 443/tcp
|
||||
```
|
||||
|
||||
### SSL-Zertifikat für Netzwerk-Zugriff
|
||||
|
||||
Für Zugriff von anderen Geräten im Netzwerk:
|
||||
|
||||
```bash
|
||||
# Zertifikat mit IP-Adresse generieren
|
||||
sudo python3 -c "
|
||||
import sys; sys.path.insert(0, '/opt/myp')
|
||||
from utils.ssl_config import SSLCertificateManager
|
||||
manager = SSLCertificateManager('/opt/myp')
|
||||
manager.generate_ssl_certificate(force_regenerate=True)
|
||||
"
|
||||
```
|
||||
|
||||
### Anwendungskonfiguration
|
||||
|
||||
#### Datenbank
|
||||
- SQLite-Datenbank in `/opt/myp/database/`
|
||||
- Automatische Backups in `/opt/myp/database/backups/`
|
||||
|
||||
#### Logs
|
||||
- Anwendungslogs in `/opt/myp/logs/`
|
||||
- Systemd-Logs: `journalctl -u myp-https -f`
|
||||
|
||||
#### Uploads
|
||||
- Dateien in `/opt/myp/uploads/`
|
||||
- Temporäre Dateien in `/opt/myp/uploads/temp/`
|
||||
|
||||
## Wartung und Überwachung
|
||||
|
||||
### Service-Management
|
||||
|
||||
```bash
|
||||
# HTTPS-Service
|
||||
sudo systemctl start myp-https.service
|
||||
sudo systemctl stop myp-https.service
|
||||
sudo systemctl restart myp-https.service
|
||||
sudo systemctl status myp-https.service
|
||||
|
||||
# Kiosk-Service
|
||||
sudo systemctl start myp-kiosk.service
|
||||
sudo systemctl stop myp-kiosk.service
|
||||
sudo systemctl status myp-kiosk.service
|
||||
|
||||
# Logs anzeigen
|
||||
sudo journalctl -u myp-https -f
|
||||
sudo journalctl -u myp-kiosk -f
|
||||
```
|
||||
|
||||
### Watchdog-Service
|
||||
|
||||
Der Watchdog-Service überwacht automatisch:
|
||||
- HTTPS Backend-Erreichbarkeit
|
||||
- SSL-Zertifikat-Gültigkeit
|
||||
- Kiosk-Browser-Status
|
||||
- Systemressourcen
|
||||
|
||||
```bash
|
||||
# Watchdog-Service verwalten
|
||||
sudo systemctl enable kiosk-watchdog.service
|
||||
sudo systemctl start kiosk-watchdog.service
|
||||
|
||||
# Watchdog-Logs
|
||||
sudo tail -f /var/log/kiosk-watchdog.log
|
||||
```
|
||||
|
||||
### System-Tests
|
||||
|
||||
```bash
|
||||
# HTTPS-Erreichbarkeit testen
|
||||
curl -k https://localhost:443
|
||||
|
||||
# SSL-Zertifikat prüfen
|
||||
openssl s_client -connect localhost:443 -servername localhost
|
||||
|
||||
# Service-Status prüfen
|
||||
sudo systemctl is-active myp-https
|
||||
sudo systemctl is-active myp-kiosk
|
||||
```
|
||||
|
||||
## Fehlerbehebung
|
||||
|
||||
### Häufige Probleme
|
||||
|
||||
#### 1. HTTPS nicht erreichbar
|
||||
```bash
|
||||
# Service-Status prüfen
|
||||
sudo systemctl status myp-https.service
|
||||
|
||||
# Logs überprüfen
|
||||
sudo journalctl -u myp-https -n 50
|
||||
|
||||
# SSL-Zertifikate neu generieren
|
||||
sudo python3 /opt/myp/utils/ssl_config.py /opt/myp --force
|
||||
sudo systemctl restart myp-https.service
|
||||
```
|
||||
|
||||
#### 2. Kiosk-Browser startet nicht
|
||||
```bash
|
||||
# X-Server-Status prüfen
|
||||
ps aux | grep X
|
||||
|
||||
# Kiosk-User-Session prüfen
|
||||
sudo su - kiosk
|
||||
echo $DISPLAY
|
||||
|
||||
# Browser manuell starten
|
||||
DISPLAY=:0 chromium --kiosk https://localhost:443
|
||||
```
|
||||
|
||||
#### 3. SSL-Zertifikat-Fehler
|
||||
```bash
|
||||
# Zertifikat-Gültigkeit prüfen
|
||||
openssl x509 -in /opt/myp/certs/localhost/localhost.crt -text -noout
|
||||
|
||||
# Zertifikat neu generieren
|
||||
sudo rm -rf /opt/myp/certs/localhost/
|
||||
sudo python3 /opt/myp/utils/ssl_config.py /opt/myp --force
|
||||
sudo systemctl restart myp-https.service
|
||||
```
|
||||
|
||||
#### 4. Hohe Speichernutzung
|
||||
```bash
|
||||
# Speicher-Status prüfen
|
||||
free -h
|
||||
|
||||
# Browser-Cache leeren
|
||||
sudo rm -rf /home/kiosk/.chromium-kiosk/Default/Cache/*
|
||||
sudo rm -rf /home/kiosk/.cache/*
|
||||
|
||||
# System-Cache leeren
|
||||
sudo sync
|
||||
sudo echo 3 > /proc/sys/vm/drop_caches
|
||||
```
|
||||
|
||||
### Log-Dateien
|
||||
|
||||
#### Anwendungslogs
|
||||
```bash
|
||||
# Hauptanwendung
|
||||
tail -f /opt/myp/logs/app/app.log
|
||||
|
||||
# Authentifizierung
|
||||
tail -f /opt/myp/logs/auth/auth.log
|
||||
|
||||
# Drucker-Management
|
||||
tail -f /opt/myp/logs/printers/printers.log
|
||||
|
||||
# Job-Management
|
||||
tail -f /opt/myp/logs/jobs/jobs.log
|
||||
```
|
||||
|
||||
#### Systemlogs
|
||||
```bash
|
||||
# HTTPS-Service
|
||||
sudo journalctl -u myp-https -f
|
||||
|
||||
# Kiosk-Service
|
||||
sudo journalctl -u myp-kiosk -f
|
||||
|
||||
# Watchdog-Service
|
||||
sudo tail -f /var/log/kiosk-watchdog.log
|
||||
|
||||
# System-Boot
|
||||
sudo journalctl -b
|
||||
```
|
||||
|
||||
## Sicherheit
|
||||
|
||||
### SSL/TLS-Konfiguration
|
||||
- TLS 1.2+ erforderlich
|
||||
- Starke Cipher-Suites
|
||||
- Selbstsignierte Zertifikate für localhost
|
||||
- Automatische Zertifikat-Erneuerung
|
||||
|
||||
### Netzwerk-Sicherheit
|
||||
- HTTPS-only (kein HTTP)
|
||||
- CSRF-Schutz aktiviert
|
||||
- Session-Management
|
||||
- Rate-Limiting
|
||||
|
||||
### System-Sicherheit
|
||||
- Minimale X11-Umgebung
|
||||
- Kiosk-User ohne Sudo-Rechte
|
||||
- Systemd-Service-Isolation
|
||||
- Read-only Systempartitionen (optional)
|
||||
|
||||
## Performance-Optimierung
|
||||
|
||||
### Browser-Optimierung
|
||||
```bash
|
||||
# Chromium-Flags für bessere Performance
|
||||
--disable-background-mode
|
||||
--disable-dev-shm-usage
|
||||
--memory-pressure-off
|
||||
--max_old_space_size=512
|
||||
--disable-background-timer-throttling
|
||||
```
|
||||
|
||||
### System-Optimierung
|
||||
```bash
|
||||
# GPU-Memory für Raspberry Pi
|
||||
echo "gpu_mem=128" >> /boot/config.txt
|
||||
|
||||
# Swap-Datei optimieren
|
||||
sudo dphys-swapfile swapoff
|
||||
sudo sed -i 's/CONF_SWAPSIZE=100/CONF_SWAPSIZE=512/' /etc/dphys-swapfile
|
||||
sudo dphys-swapfile setup
|
||||
sudo dphys-swapfile swapon
|
||||
```
|
||||
|
||||
### Datenbank-Optimierung
|
||||
```bash
|
||||
# SQLite-Optimierungen in der Anwendung
|
||||
PRAGMA journal_mode=WAL;
|
||||
PRAGMA synchronous=NORMAL;
|
||||
PRAGMA cache_size=10000;
|
||||
PRAGMA temp_store=memory;
|
||||
```
|
||||
|
||||
## Backup und Wiederherstellung
|
||||
|
||||
### Automatische Backups
|
||||
```bash
|
||||
# Datenbank-Backups
|
||||
/opt/myp/database/backups/
|
||||
|
||||
# Konfiguration sichern
|
||||
sudo tar -czf /opt/myp/backups/config-$(date +%Y%m%d).tar.gz \
|
||||
/opt/myp/config/ \
|
||||
/etc/systemd/system/myp-*.service \
|
||||
/home/kiosk/.xinitrc \
|
||||
/home/kiosk/.bashrc
|
||||
```
|
||||
|
||||
### Wiederherstellung
|
||||
```bash
|
||||
# System neu installieren
|
||||
sudo ./combined.sh
|
||||
|
||||
# Datenbank wiederherstellen
|
||||
sudo cp backup.db /opt/myp/database/app.db
|
||||
sudo chown root:root /opt/myp/database/app.db
|
||||
|
||||
# Services neustarten
|
||||
sudo systemctl restart myp-https.service
|
||||
```
|
||||
|
||||
## Updates
|
||||
|
||||
### Anwendungs-Updates
|
||||
```bash
|
||||
# Repository aktualisieren
|
||||
cd /opt/myp
|
||||
git pull origin main
|
||||
|
||||
# Dependencies aktualisieren
|
||||
sudo pip3 install -r requirements.txt --break-system-packages --upgrade
|
||||
sudo npm install
|
||||
|
||||
# Services neustarten
|
||||
sudo systemctl restart myp-https.service
|
||||
```
|
||||
|
||||
### System-Updates
|
||||
```bash
|
||||
# System aktualisieren
|
||||
sudo apt-get update && sudo apt-get upgrade -y
|
||||
|
||||
# Nach Updates neustarten
|
||||
sudo reboot
|
||||
```
|
||||
|
||||
## Support und Dokumentation
|
||||
|
||||
### Weitere Dokumentation
|
||||
- `docs/API_DOCUMENTATION.md` - API-Referenz
|
||||
- `docs/CONFIGURATION.md` - Konfigurationsoptionen
|
||||
- `docs/TROUBLESHOOTING.md` - Erweiterte Fehlerbehebung
|
||||
|
||||
### Logs für Support
|
||||
```bash
|
||||
# Support-Informationen sammeln
|
||||
sudo ./combined.sh # Option 5: System-Tests
|
||||
|
||||
# Log-Bundle erstellen
|
||||
sudo tar -czf myp-logs-$(date +%Y%m%d).tar.gz \
|
||||
/opt/myp/logs/ \
|
||||
/var/log/kiosk-watchdog.log \
|
||||
/var/log/myp-install.log
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
**Version**: 3.6.1
|
||||
**Letzte Aktualisierung**: Automatisch generiert
|
||||
**Plattform**: Debian/Linux (Raspberry Pi OS)
|
||||
**Modus**: HTTPS Kiosk (Port 443)
|
@@ -1 +1,206 @@
|
||||
|
||||
# Log-Funktionalität Implementierung
|
||||
|
||||
## Problembeschreibung
|
||||
Die System-Logs im Admin-Dashboard wurden nicht geladen. Die JavaScript-Funktionalität fehlte und die API-Endpunkte waren unvollständig implementiert.
|
||||
|
||||
## Durchgeführte Fixes
|
||||
|
||||
### 1. API-Endpunkte Implementiert
|
||||
|
||||
#### `/api/admin/logs` (GET)
|
||||
- **Zweck**: Lädt System-Logs für das Admin-Dashboard
|
||||
- **Features**:
|
||||
- Multi-Format Log-Parser (unterstützt verschiedene Log-Formate)
|
||||
- Level-Filter (ERROR, WARNING, INFO, DEBUG, CRITICAL, ALL)
|
||||
- Suchfunktion in Log-Nachrichten
|
||||
- Component-Filter nach Log-Kategorien
|
||||
- Paginierung (limit/offset)
|
||||
- Automatische Duplikat-Entfernung
|
||||
- Sortierung nach Timestamp (neueste zuerst)
|
||||
|
||||
#### `/api/admin/logs/export` (GET)
|
||||
- **Zweck**: Exportiert alle Log-Dateien als ZIP-Archiv
|
||||
- **Features**:
|
||||
- Sammelt alle .log Dateien aus dem logs-Verzeichnis
|
||||
- Erstellt komprimierte ZIP-Datei
|
||||
- Relativer Pfad-Erhalt in der ZIP-Struktur
|
||||
- Automatische Dateinamen mit Timestamp
|
||||
|
||||
### 2. JavaScript-Funktionalität
|
||||
|
||||
#### Admin-Dashboard Logs-Management
|
||||
```javascript
|
||||
// Neue Funktionen hinzugefügt:
|
||||
- loadLogs(level = null) // Lädt Logs mit Filter
|
||||
- displayLogs(logs) // Zeigt Logs formatiert an
|
||||
- formatLogTimestamp(timestamp) // Formatiert Zeitstempel
|
||||
- escapeHtml(text) // HTML-Escape für Sicherheit
|
||||
- exportLogs() // Exportiert Logs als Datei
|
||||
```
|
||||
|
||||
#### Event-Handler
|
||||
- `#refresh-logs-btn` - Logs manuell aktualisieren
|
||||
- `#export-logs-btn` - Logs exportieren
|
||||
- `#log-level-filter` - Filter nach Log-Level
|
||||
|
||||
#### Automatisches Laden
|
||||
- Logs werden automatisch geladen wenn:
|
||||
- URL-Parameter `tab=logs` gesetzt ist
|
||||
- Das Logs-Container-Element sichtbar ist
|
||||
- Die Seite das erste Mal geladen wird und der Logs-Tab aktiv ist
|
||||
|
||||
### 3. HTML-Template Fixes
|
||||
|
||||
#### Progress Bar Fixes
|
||||
- Entfernt problematische Jinja2-Style-Attribute aus HTML
|
||||
- Verlagert Style-Definitionen in separaten `<style>`-Block
|
||||
- Behebt Linter-Fehler in Zeilen 121, 147, 173, 206, 455
|
||||
|
||||
#### Log-Display Komponenten
|
||||
- Verbesserte Log-Anzeige mit Level-spezifischen Farben
|
||||
- Icons für verschiedene Log-Level (❌, ⚠️, ℹ️, 🔍, 🚨)
|
||||
- Responsive Layout für Log-Einträge
|
||||
- Hover-Effekte und Transitionen
|
||||
|
||||
### 4. Log-Format Unterstützung
|
||||
|
||||
#### Format 1: Standard Format
|
||||
```
|
||||
2025-06-01 00:34:08 - logger_name - [LEVEL] MESSAGE
|
||||
```
|
||||
|
||||
#### Format 2: Bracket Format
|
||||
```
|
||||
[2025-06-01 00:34:08] LEVEL: MESSAGE
|
||||
```
|
||||
|
||||
#### Format 3: Einfaches Format
|
||||
```
|
||||
MESSAGE (als INFO-Level behandelt)
|
||||
```
|
||||
|
||||
### 5. Error Handling & Performance
|
||||
|
||||
#### Robuste Fehlerbehandlung
|
||||
- Try-catch für jeden Log-Parser-Schritt
|
||||
- Fallback bei nicht lesbaren Dateien
|
||||
- Graceful Degradation bei API-Fehlern
|
||||
|
||||
#### Performance-Optimierungen
|
||||
- Maximal 10 Log-Dateien verarbeitet
|
||||
- Maximal 500 Zeilen pro Datei
|
||||
- Maximal 50 Einträge pro Datei
|
||||
- UTF-8 Encoding mit Fehler-Ignorierung
|
||||
|
||||
### 6. UI/UX Verbesserungen
|
||||
|
||||
#### Loading States
|
||||
- Spinner während des Ladens
|
||||
- Informative Fehlermeldungen
|
||||
- "Erneut versuchen" Button bei Fehlern
|
||||
|
||||
#### Responsive Design
|
||||
- Mobile-optimierte Log-Anzeige
|
||||
- Hover-Effekte und Animationen
|
||||
- Dark-Mode Unterstützung
|
||||
|
||||
#### Accessibility
|
||||
- ARIA-Labels für Screen-Reader
|
||||
- Tastatur-Navigation
|
||||
- Semantische HTML-Struktur
|
||||
|
||||
## Verwendung
|
||||
|
||||
### Admin-Dashboard Zugriff
|
||||
1. Als Administrator einloggen
|
||||
2. Zum Admin-Dashboard navigieren
|
||||
3. "Logs" Tab auswählen
|
||||
4. Logs werden automatisch geladen
|
||||
|
||||
### Filter und Export
|
||||
- **Filter nach Level**: Dropdown-Menü verwenden
|
||||
- **Aktualisieren**: "Aktualisieren" Button klicken
|
||||
- **Export**: "Export" Button für ZIP-Download
|
||||
|
||||
### API-Direktzugriff
|
||||
```javascript
|
||||
// Logs abrufen
|
||||
fetch('/api/admin/logs?level=ERROR&limit=50')
|
||||
.then(response => response.json())
|
||||
.then(data => console.log(data.logs));
|
||||
|
||||
// Logs exportieren
|
||||
window.location.href = '/api/admin/logs/export';
|
||||
```
|
||||
|
||||
## Technische Details
|
||||
|
||||
### Abhängigkeiten
|
||||
- **Frontend**: Admin-unified.js, Tailwind CSS
|
||||
- **Backend**: Flask, SQLAlchemy, Python logging
|
||||
- **Tools**: zipfile, glob, datetime
|
||||
|
||||
### Sicherheit
|
||||
- Admin-Berechtigung erforderlich (`@admin_required`)
|
||||
- CSRF-Token Validierung
|
||||
- HTML-Escape für Log-Inhalte
|
||||
- Input-Sanitization für Filter-Parameter
|
||||
|
||||
### Logs-Verzeichnis Struktur
|
||||
```
|
||||
backend/logs/
|
||||
├── app/
|
||||
├── auth/
|
||||
├── jobs/
|
||||
├── printers/
|
||||
├── scheduler/
|
||||
├── errors/
|
||||
└── *.log (direkte Log-Dateien)
|
||||
```
|
||||
|
||||
## Testing
|
||||
|
||||
### Manuelle Tests
|
||||
1. ✅ Logs-Tab Laden
|
||||
2. ✅ Level-Filter Funktionalität
|
||||
3. ✅ Export-Funktionalität
|
||||
4. ✅ Error-Handling bei fehlenden Logs
|
||||
5. ✅ Auto-Loading bei Tab-Switch
|
||||
|
||||
### Browser-Kompatibilität
|
||||
- ✅ Chrome/Edge (moderne Versionen)
|
||||
- ✅ Firefox (moderne Versionen)
|
||||
- ✅ Safari (moderne Versionen)
|
||||
- ✅ Mobile Browser
|
||||
|
||||
## Bekannte Limitierungen
|
||||
|
||||
1. **Performance**: Bei sehr großen Log-Dateien (>10MB) kann das Laden langsam sein
|
||||
2. **Memory**: Alle Logs werden im Speicher verarbeitet
|
||||
3. **Real-time**: Logs werden nicht in Echtzeit aktualisiert (manueller Refresh nötig)
|
||||
|
||||
## Zukünftige Verbesserungen
|
||||
|
||||
1. **WebSocket Integration** für Real-time Log-Updates
|
||||
2. **Paginierung UI** für bessere Navigation
|
||||
3. **Erweiterte Filter** (Datum, Komponente, Benutzer)
|
||||
4. **Log-Archivierung** und automatische Bereinigung
|
||||
5. **Search Highlighting** in Log-Inhalten
|
||||
|
||||
## Changelog
|
||||
|
||||
**2025-06-01 - Initial Implementation**
|
||||
- ✅ API-Endpunkte implementiert
|
||||
- ✅ JavaScript-Funktionalität hinzugefügt
|
||||
- ✅ HTML-Template Fixes
|
||||
- ✅ Error-Handling verbessert
|
||||
- ✅ Performance-Optimierungen
|
||||
- ✅ UI/UX Verbesserungen
|
||||
|
||||
## Support
|
||||
|
||||
Bei Problemen mit der Log-Funktionalität:
|
||||
1. Browser-Konsole auf Fehler prüfen
|
||||
2. Netzwerk-Tab für API-Anfragen überprüfen
|
||||
3. Server-Logs für Backend-Fehler analysieren
|
||||
4. Admin-Berechtigung verifizieren
|
@@ -27,9 +27,9 @@ Das neue konsolidierte `setup.sh` Skript ersetzt alle bisherigen Installationssk
|
||||
|
||||
## Installationsmodi
|
||||
|
||||
### 1. Nur Abhängigkeiten installieren
|
||||
### 1. Abhängigkeiten installieren für manuelles Testen
|
||||
|
||||
**Zweck**: System vorbereiten ohne Kiosk-Modus zu aktivieren
|
||||
**Zweck**: System vollständig vorbereiten für manuelle Tests und Entwicklung
|
||||
|
||||
**Was wird installiert**:
|
||||
- Python 3 und pip
|
||||
@@ -49,21 +49,31 @@ sudo ./setup.sh
|
||||
|
||||
**Ideal für**:
|
||||
- Entwicklungsumgebungen
|
||||
- Erste Installation und Tests
|
||||
- Systeme ohne Kiosk-Anforderungen
|
||||
- Manuelle Tests und Debugging
|
||||
- Systeme ohne automatischen Kiosk-Modus
|
||||
- Erste Installation und Validierung
|
||||
|
||||
### 2. Finale Kiosk-Installation
|
||||
**Nach der Installation**:
|
||||
- HTTPS-Backend manuell starten: `cd /opt/myp && python3 app.py`
|
||||
- System bereit für Entwicklung und Tests
|
||||
|
||||
**Zweck**: Vollständige Kiosk-Modus-Konfiguration
|
||||
### 2. Vollständige Kiosk-Installation mit Remote-Zugang
|
||||
|
||||
**Zweck**: Komplette Produktionsinstallation mit automatischem Kiosk-Modus
|
||||
|
||||
**Was wird konfiguriert**:
|
||||
- Alle Abhängigkeiten (falls noch nicht installiert)
|
||||
- Desktop-Environments entfernen
|
||||
- Alle Abhängigkeiten (automatisch falls noch nicht installiert)
|
||||
- Desktop-Environments vollständig entfernen
|
||||
- Minimale X11-Umgebung installieren
|
||||
- Kiosk-Benutzer erstellen
|
||||
- Automatischen Login konfigurieren
|
||||
- **SSH-Server** mit Benutzer `user:raspberry`
|
||||
- **RDP-Server (xrdp)** mit TLS für `root:744563017196A`
|
||||
- **XFCE Desktop-Umgebung** für RDP-Sessions
|
||||
- **firewalld** mit erweiterten Netzwerk-Regeln
|
||||
- Kiosk-Benutzer erstellen und konfigurieren
|
||||
- **Automatischen Login** auf tty1 konfigurieren
|
||||
- **Automatischen Kiosk-Start** beim Login einrichten
|
||||
- Systemd-Services installieren und aktivieren
|
||||
- System-Test durchführen
|
||||
- Umfassende System-Tests
|
||||
- Alte Dateien aufräumen
|
||||
|
||||
**Verwendung**:
|
||||
@@ -75,48 +85,13 @@ sudo ./setup.sh
|
||||
**Ideal für**:
|
||||
- Produktionsumgebungen
|
||||
- Dedizierte Kiosk-Systeme
|
||||
- Finale Deployment
|
||||
- Finale Deployment mit Remote-Administration
|
||||
- Vollautomatische Systeme
|
||||
|
||||
### 3. Nur Services installieren
|
||||
|
||||
**Zweck**: Systemd-Services aktualisieren ohne Systemänderungen
|
||||
|
||||
**Was wird gemacht**:
|
||||
- Service-Dateien aus `systemd/` nach `/etc/systemd/system/` kopieren
|
||||
- systemd-Konfiguration neu laden
|
||||
- Optional: Services aktivieren und starten
|
||||
|
||||
**Verwendung**:
|
||||
```bash
|
||||
sudo ./setup.sh
|
||||
# Wähle Option 3
|
||||
```
|
||||
|
||||
**Ideal für**:
|
||||
- Service-Updates
|
||||
- Konfigurationsänderungen
|
||||
- Wartung bestehender Installationen
|
||||
|
||||
### 4. System-Test
|
||||
|
||||
**Zweck**: Funktionalität der Installation überprüfen
|
||||
|
||||
**Was wird getestet**:
|
||||
- HTTPS-Verbindung zu localhost:443
|
||||
- SSL-Zertifikat-Gültigkeit
|
||||
- Service-Status aller systemd-Services
|
||||
- Systemressourcen
|
||||
|
||||
**Verwendung**:
|
||||
```bash
|
||||
sudo ./setup.sh
|
||||
# Wähle Option 4
|
||||
```
|
||||
|
||||
**Ideal für**:
|
||||
- Fehlerdiagnose
|
||||
- Wartung
|
||||
- Regelmäßige Systemprüfungen
|
||||
**Nach der Installation**:
|
||||
- **Neustart erforderlich**: `sudo reboot`
|
||||
- Automatischer Kiosk-Modus beim Boot
|
||||
- Remote-Zugang verfügbar über SSH und RDP
|
||||
|
||||
## Systemd-Services
|
||||
|
||||
@@ -145,6 +120,17 @@ sudo ./setup.sh
|
||||
- **Zweck**: Python-basierte Überwachung
|
||||
- **Ergänzung**: Zusätzliche Überwachungsfunktionen
|
||||
|
||||
### myp-firewall.service
|
||||
- **Zweck**: Automatische Firewall-Konfiguration beim Systemstart
|
||||
- **Benutzer**: root
|
||||
- **Abhängigkeiten**: firewalld.service
|
||||
- **Funktionen**:
|
||||
- Zone `myp-backend` für Netzwerk 192.168.0.0/24
|
||||
- HTTPS-Port 443/tcp
|
||||
- SSH-Port 22/tcp
|
||||
- RDP-Port 3389/tcp
|
||||
- Automatische Aktivierung beim Boot
|
||||
|
||||
## Konfiguration
|
||||
|
||||
### SSL-Zertifikate
|
||||
@@ -166,6 +152,79 @@ sudo ./setup.sh
|
||||
- Gruppen: audio, video, input, dialout, plugdev, users
|
||||
- Passwortlos für Sicherheit
|
||||
|
||||
### Remote-Zugang
|
||||
|
||||
**SSH-Zugang**:
|
||||
- Benutzer: `user`
|
||||
- Passwort: `raspberry`
|
||||
- Port: 22
|
||||
- Sudo-Berechtigung: ja
|
||||
|
||||
**RDP-Zugang**:
|
||||
- Benutzer: `root`
|
||||
- Passwort: `744563017196A`
|
||||
- Port: 3389
|
||||
- Desktop: XFCE
|
||||
- Verschlüsselung: TLS 1.2/1.3
|
||||
|
||||
**Firewall-Konfiguration**:
|
||||
- Zone: `myp-backend`
|
||||
- Quell-Netzwerke:
|
||||
- `192.168.0.0/16` (erweitertes lokales Netzwerk)
|
||||
- `127.0.0.1/32` (localhost IPv4)
|
||||
- `raspberrypi` (lokaler Hostname - automatisch gesetzt)
|
||||
- `m040tbaraspi001` (Frontend-Server - falls auflösbar)
|
||||
- Erlaubte Ports: 443/tcp (HTTPS), 22/tcp (SSH), 3389/tcp (RDP)
|
||||
- **IPv6 vollständig deaktiviert und blockiert**
|
||||
- Automatische Konfiguration beim Systemstart
|
||||
|
||||
### Hostname-Konfiguration
|
||||
|
||||
**Automatische Hostname-Setzung**:
|
||||
- Lokaler Hostname wird automatisch auf `raspberrypi` gesetzt
|
||||
- `/etc/hostname` und `/etc/hosts` werden entsprechend aktualisiert
|
||||
- Hostname-Auflösung wird getestet und konfiguriert
|
||||
- Firewall-Integration für lokalen Hostname
|
||||
|
||||
**Frontend-Server Integration**:
|
||||
- `m040tbaraspi001` wird als separater Frontend-Server behandelt
|
||||
- Automatische IP-Auflösung für `m040tbaraspi001` und `m040tbaraspi001.de040.corpintra.net`
|
||||
- Firewall-Regel wird hinzugefügt, falls der Server auflösbar ist
|
||||
- Keine Abhängigkeit - System funktioniert auch ohne Frontend-Server
|
||||
|
||||
### Netzwerk-Sicherheit
|
||||
|
||||
**IPv6-Deaktivierung**:
|
||||
- Vollständige Deaktivierung auf Kernel-Ebene
|
||||
- GRUB-Konfiguration: `ipv6.disable=1`
|
||||
- Sysctl-Konfiguration für alle Interfaces
|
||||
- NetworkManager/systemd-networkd Konfiguration
|
||||
- Firewall blockiert alle IPv6-Pakete
|
||||
|
||||
**IP-Spoofing-Schutz**:
|
||||
- Reverse Path Filtering aktiviert
|
||||
- Source Routing deaktiviert
|
||||
- ICMP Redirects ignoriert
|
||||
- Secure Redirects deaktiviert
|
||||
|
||||
**DDoS-Schutz**:
|
||||
- SYN-Flood-Schutz mit SYN-Cookies
|
||||
- Optimierte TCP-Backlog-Größe
|
||||
- Begrenzte SYN/SYNACK-Wiederholungen
|
||||
- Broadcast-Ping-Schutz (Smurf-Angriffe)
|
||||
|
||||
**TCP-Optimierungen**:
|
||||
- RFC-konforme Retry-Limits
|
||||
- Optimierte Window-Skalierung
|
||||
- Deaktivierte TCP-Timestamps (Anti-Fingerprinting)
|
||||
- Deaktivierte TCP-SACK (Sicherheit)
|
||||
- Time-Wait-Assassination-Schutz
|
||||
|
||||
**Logging und Monitoring**:
|
||||
- Martian-Pakete werden geloggt
|
||||
- Verdächtige Netzwerkaktivitäten protokolliert
|
||||
- Bogus ICMP-Antworten ignoriert
|
||||
|
||||
### Verzeichnisstruktur
|
||||
|
||||
```
|
||||
@@ -209,7 +268,7 @@ sudo ./setup.sh
|
||||
3. **SSL-Zertifikat-Probleme**
|
||||
```bash
|
||||
sudo ./setup.sh
|
||||
# Option 4 für System-Test
|
||||
# Option 5 für System-Test
|
||||
```
|
||||
|
||||
4. **Service-Neustart**
|
||||
@@ -218,20 +277,67 @@ sudo ./setup.sh
|
||||
sudo systemctl restart kiosk-watchdog
|
||||
```
|
||||
|
||||
5. **SSH-Verbindung fehlgeschlagen**
|
||||
```bash
|
||||
# SSH-Service prüfen
|
||||
sudo systemctl status ssh
|
||||
|
||||
# SSH-Port prüfen
|
||||
sudo ss -tlnp | grep :22
|
||||
|
||||
# Firewall-Regeln prüfen
|
||||
sudo firewall-cmd --list-all
|
||||
```
|
||||
|
||||
6. **RDP-Verbindung fehlgeschlagen**
|
||||
```bash
|
||||
# xrdp-Service prüfen
|
||||
sudo systemctl status xrdp
|
||||
|
||||
# RDP-Port prüfen
|
||||
sudo ss -tlnp | grep :3389
|
||||
|
||||
# xrdp-Logs prüfen
|
||||
sudo journalctl -u xrdp -f
|
||||
```
|
||||
|
||||
7. **Firewall-Probleme**
|
||||
```bash
|
||||
# Firewall-Status prüfen
|
||||
sudo systemctl status firewalld
|
||||
|
||||
# Aktive Zonen anzeigen
|
||||
sudo firewall-cmd --get-active-zones
|
||||
|
||||
# Zone-Konfiguration prüfen
|
||||
sudo firewall-cmd --zone=myp-backend --list-all
|
||||
|
||||
# Firewall neu konfigurieren
|
||||
sudo ./setup.sh
|
||||
# Option 4 für Remote-Zugang
|
||||
```
|
||||
|
||||
### Manuelle Service-Verwaltung
|
||||
|
||||
```bash
|
||||
# Services aktivieren
|
||||
sudo systemctl enable myp-https myp-kiosk kiosk-watchdog
|
||||
sudo systemctl enable myp-https myp-kiosk kiosk-watchdog myp-firewall
|
||||
|
||||
# Services starten
|
||||
sudo systemctl start myp-https myp-kiosk kiosk-watchdog
|
||||
|
||||
# Remote-Services aktivieren
|
||||
sudo systemctl enable ssh xrdp firewalld
|
||||
sudo systemctl start ssh xrdp firewalld
|
||||
|
||||
# Status prüfen
|
||||
sudo systemctl status myp-https myp-kiosk kiosk-watchdog
|
||||
sudo systemctl status myp-https myp-kiosk kiosk-watchdog myp-firewall
|
||||
sudo systemctl status ssh xrdp firewalld
|
||||
|
||||
# Logs anzeigen
|
||||
sudo journalctl -u myp-https -f
|
||||
sudo journalctl -u xrdp -f
|
||||
sudo journalctl -u firewalld -f
|
||||
```
|
||||
|
||||
## Wartung
|
||||
@@ -254,7 +360,7 @@ sudo journalctl -u myp-https -f
|
||||
4. **System-Test**
|
||||
```bash
|
||||
sudo ./setup.sh
|
||||
# Option 4
|
||||
# Option 5
|
||||
```
|
||||
|
||||
## Sicherheit
|
||||
@@ -299,7 +405,7 @@ Wenn Sie eine bestehende Installation mit `combined.sh` oder `installer.sh` habe
|
||||
Bei Problemen:
|
||||
|
||||
1. **Log-Dateien prüfen**
|
||||
2. **System-Test durchführen** (Option 4)
|
||||
2. **System-Test durchführen** (Option 5)
|
||||
3. **Services neu starten**
|
||||
4. **Installation wiederholen** mit entsprechender Option
|
||||
|
||||
|
@@ -1 +1,269 @@
|
||||
|
||||
# Wartungs-Modal Reparatur - Dokumentation
|
||||
|
||||
## Problem-Analyse
|
||||
|
||||
Das Wartungs-Modal im Admin-Bereich funktionierte nicht korrekt aufgrund mehrerer Probleme:
|
||||
|
||||
### 1. Fehlende `setLoadingState` Methode
|
||||
- **Problem**: Die JavaScript-Klasse `MaintenanceModal` rief `this.setLoadingState()` auf, aber die Methode war nicht definiert
|
||||
- **Symptom**: JavaScript-Fehler beim Ausführen von Wartungsaktionen
|
||||
- **Lösung**: Vollständige `setLoadingState` Methode implementiert mit:
|
||||
- Button-Deaktivierung während Loading
|
||||
- Spinner-Animation hinzufügen/entfernen
|
||||
- Loading-Overlay-Management
|
||||
|
||||
### 2. Fehlende API-Endpunkte
|
||||
- **Problem**: Das Modal rief API-Endpunkte auf, die nicht existierten:
|
||||
- `/api/admin/maintenance/clear-cache`
|
||||
- `/api/admin/maintenance/optimize-database`
|
||||
- `/api/admin/maintenance/create-backup`
|
||||
- **Symptom**: 404-Fehler bei API-Aufrufen
|
||||
- **Lösung**: Vollständige API-Endpunkte implementiert
|
||||
|
||||
### 3. Template-Syntax-Fehler
|
||||
- **Problem**: Jinja2-Template-Syntax `{{ url_for("optimization_settings") }}` wurde im JavaScript verwendet
|
||||
- **Symptom**: JavaScript-Syntax-Fehler
|
||||
- **Lösung**: Direkte URL-Navigation implementiert
|
||||
|
||||
### 4. Doppelte Event-Listener / Event-Handler-Konflikt ⚠️ **KRITISCH**
|
||||
- **Problem**: Modal wurde mehrfach initialisiert und es gab konkurrierende Event-Handler
|
||||
- **Symptom**: Modal öffnet sich und schließt sich sofort wieder automatisch
|
||||
- **Ursache**:
|
||||
- `MaintenanceModal` Klasse in `admin.html` registrierte Event-Handler
|
||||
- `AdminDashboard` Klasse in `admin-unified.js` registrierte ebenfalls Event-Handler für denselben Button
|
||||
- Beide Handler wurden gleichzeitig ausgeführt, was zu Konflikten führte
|
||||
- **Lösung**:
|
||||
- Event-Handler-Konflikt durch Deaktivierung des konkurrierenden Handlers behoben
|
||||
- Singleton-Pattern für `MaintenanceModal` implementiert
|
||||
- Event-Propagation mit `stopImmediatePropagation()` verhindert
|
||||
|
||||
## Implementierte Lösungen
|
||||
|
||||
### 1. JavaScript-Reparaturen in `templates/admin.html`
|
||||
|
||||
```javascript
|
||||
class MaintenanceModal {
|
||||
constructor() {
|
||||
this.modal = document.getElementById('maintenance-modal');
|
||||
this.triggerBtn = document.getElementById('maintenance-btn');
|
||||
this.closeBtn = document.getElementById('close-maintenance-modal');
|
||||
this.isOpen = false;
|
||||
this.isLoading = false;
|
||||
this.isInitialized = false; // ✅ Neu hinzugefügt
|
||||
|
||||
// ✅ Verhindere doppelte Initialisierung
|
||||
if (window.maintenanceModalInstance) {
|
||||
return window.maintenanceModalInstance;
|
||||
}
|
||||
|
||||
this.initializeEventListeners();
|
||||
this.isInitialized = true;
|
||||
window.maintenanceModalInstance = this; // ✅ Singleton-Pattern
|
||||
}
|
||||
|
||||
initializeEventListeners() {
|
||||
// ✅ Modal öffnen - mit Event-Delegation und Konflikt-Vermeidung
|
||||
if (this.triggerBtn) {
|
||||
// Entferne alle existierenden Event-Listener
|
||||
this.triggerBtn.removeEventListener('click', this.handleTriggerClick);
|
||||
|
||||
// Füge neuen Event-Listener hinzu
|
||||
this.handleTriggerClick = (e) => {
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
e.stopImmediatePropagation(); // ✅ Verhindert andere Handler
|
||||
|
||||
console.log('🛠️ Wartungs-Modal wird geöffnet...');
|
||||
this.openModal();
|
||||
};
|
||||
|
||||
this.triggerBtn.addEventListener('click', this.handleTriggerClick, { capture: true });
|
||||
}
|
||||
|
||||
// ✅ Modal schließen - verbesserte Event-Behandlung
|
||||
if (this.closeBtn) {
|
||||
this.closeBtn.addEventListener('click', (e) => {
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
this.closeModal();
|
||||
});
|
||||
}
|
||||
|
||||
// ✅ Modal schließen bei Klick außerhalb - aber nur auf das Overlay
|
||||
if (this.modal) {
|
||||
this.modal.addEventListener('click', (e) => {
|
||||
// Nur schließen wenn direkt auf das Modal-Overlay geklickt wird
|
||||
if (e.target === this.modal) {
|
||||
this.closeModal();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// ✅ ESC-Taste zum Schließen
|
||||
document.addEventListener('keydown', (e) => {
|
||||
if (e.key === 'Escape' && this.isOpen) {
|
||||
e.preventDefault();
|
||||
this.closeModal();
|
||||
}
|
||||
});
|
||||
|
||||
// Wartungs-Aktionen
|
||||
this.initializeMaintenanceActions();
|
||||
}
|
||||
|
||||
// ✅ Verbesserte openModal Methode
|
||||
openModal() {
|
||||
if (this.modal && !this.isOpen) {
|
||||
console.log('✅ Modal wird geöffnet');
|
||||
this.modal.classList.remove('hidden');
|
||||
this.isOpen = true;
|
||||
document.body.style.overflow = 'hidden';
|
||||
|
||||
// Focus-Management für Barrierefreiheit
|
||||
setTimeout(() => {
|
||||
const firstFocusable = this.modal.querySelector('button:not(#close-maintenance-modal)');
|
||||
if (firstFocusable) {
|
||||
firstFocusable.focus();
|
||||
}
|
||||
}, 100);
|
||||
}
|
||||
}
|
||||
|
||||
// ✅ Verbesserte closeModal Methode
|
||||
closeModal() {
|
||||
if (this.modal && this.isOpen) {
|
||||
console.log('❌ Modal wird geschlossen');
|
||||
this.modal.classList.add('hidden');
|
||||
this.isOpen = false;
|
||||
document.body.style.overflow = '';
|
||||
|
||||
// Focus zurück zum Trigger-Button
|
||||
if (this.triggerBtn) {
|
||||
this.triggerBtn.focus();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ... weitere Methoden ...
|
||||
}
|
||||
|
||||
// ✅ Globale Instanz-Verwaltung mit Konflikt-Vermeidung
|
||||
let maintenanceModal = null;
|
||||
|
||||
// ✅ Initialisierung nach DOM-Laden - aber nur einmal
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
// Verhindere doppelte Initialisierung
|
||||
if (!window.maintenanceModalInstance && !maintenanceModal) {
|
||||
console.log('🔧 Wartungs-Modal wird initialisiert...');
|
||||
maintenanceModal = new MaintenanceModal();
|
||||
|
||||
// ✅ Deaktiviere andere Event-Handler für den Wartungs-Button
|
||||
const maintenanceBtn = document.getElementById('maintenance-btn');
|
||||
if (maintenanceBtn) {
|
||||
// Entferne alle anderen Event-Listener durch Klonen
|
||||
const newBtn = maintenanceBtn.cloneNode(true);
|
||||
maintenanceBtn.parentNode.replaceChild(newBtn, maintenanceBtn);
|
||||
|
||||
// Füge nur unseren Event-Listener hinzu
|
||||
newBtn.addEventListener('click', (e) => {
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
e.stopImmediatePropagation();
|
||||
|
||||
if (maintenanceModal) {
|
||||
maintenanceModal.openModal();
|
||||
}
|
||||
}, { capture: true });
|
||||
}
|
||||
}
|
||||
});
|
||||
```
|
||||
|
||||
### 2. Deaktivierung des konkurrierenden Event-Handlers in `static/js/admin-unified.js`
|
||||
|
||||
```javascript
|
||||
attachSystemButtons() {
|
||||
// System Status Button
|
||||
this.addEventListenerSafe('#system-status-btn', 'click', (e) => {
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
this.showSystemStatus();
|
||||
});
|
||||
|
||||
// Analytics Button
|
||||
this.addEventListenerSafe('#analytics-btn', 'click', (e) => {
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
this.showAnalytics();
|
||||
});
|
||||
|
||||
// ✅ Maintenance Button - DEAKTIVIERT wegen Konflikt mit MaintenanceModal
|
||||
// Das Wartungs-Modal wird jetzt direkt in admin.html verwaltet
|
||||
// this.addEventListenerSafe('#maintenance-btn', 'click', (e) => {
|
||||
// e.preventDefault();
|
||||
// e.stopPropagation();
|
||||
// this.showMaintenance();
|
||||
// });
|
||||
|
||||
// ... weitere Buttons ...
|
||||
}
|
||||
```
|
||||
|
||||
## Nächste Schritte
|
||||
|
||||
1. **API-Endpunkte hinzufügen**: Die oben gezeigten API-Endpunkte müssen in `app.py` eingefügt werden
|
||||
2. **Testen**: Das Wartungs-Modal nach der Implementierung testen
|
||||
3. **Logging**: Überprüfen der Log-Ausgaben für erfolgreiche Wartungsaktionen
|
||||
4. **Backup-Verzeichnis**: Sicherstellen, dass das `database/backups` Verzeichnis existiert
|
||||
|
||||
## Funktionalitäten
|
||||
|
||||
Nach der Reparatur bietet das Wartungs-Modal folgende Funktionen:
|
||||
|
||||
### ✅ Cache leeren
|
||||
- Löscht Flask-Cache (falls vorhanden)
|
||||
- Entfernt temporäre MYP/TBA-Dateien
|
||||
- Führt Python Garbage Collection durch
|
||||
- Zeigt Anzahl der gelöschten Dateien an
|
||||
|
||||
### ✅ Datenbank optimieren
|
||||
- SQLite VACUUM (Komprimierung)
|
||||
- SQLite ANALYZE (Statistiken aktualisieren)
|
||||
- SQLite REINDEX (Indizes neu aufbauen)
|
||||
- Bereinigung verwaister Dateien (älter als 7 Tage)
|
||||
- Detaillierte Ergebnisanzeige
|
||||
|
||||
### ✅ Backup erstellen
|
||||
- ZIP-Backup mit Zeitstempel
|
||||
- Enthält Datenbank, Konfigurationsdateien und wichtige Uploads
|
||||
- Automatische Bereinigung alter Backups (nur 10 neueste behalten)
|
||||
- Größenanzeige und Dateiliste
|
||||
|
||||
### ✅ Erweiterte Einstellungen
|
||||
- Navigation zu Optimierungs-Einstellungen
|
||||
- Fehlerbehandlung bei Navigation
|
||||
|
||||
## Benutzerfreundlichkeit
|
||||
|
||||
- **Loading-Zustände**: Buttons werden während Aktionen deaktiviert
|
||||
- **Spinner-Animationen**: Visuelle Rückmeldung während Verarbeitung
|
||||
- **Bestätigungsdialoge**: Sicherheitsabfragen vor kritischen Aktionen
|
||||
- **Detaillierte Notifications**: Erfolgs- und Fehlermeldungen mit Details
|
||||
- **Schließbare Notifications**: Benutzer können Meldungen manuell schließen
|
||||
- **Keyboard-Support**: ESC-Taste schließt das Modal
|
||||
- **Focus-Management**: Barrierefreie Navigation
|
||||
|
||||
## Sicherheit
|
||||
|
||||
- **Admin-Berechtigung**: Alle API-Endpunkte erfordern Admin-Rechte
|
||||
- **CSRF-Schutz**: CSRF-Token bei allen API-Aufrufen
|
||||
- **Logging**: Alle Wartungsaktionen werden geloggt
|
||||
- **Fehlerbehandlung**: Robuste Fehlerbehandlung verhindert System-Crashes
|
||||
- **Datei-Größen-Limits**: Backup-Dateien sind auf 10MB begrenzt
|
||||
|
||||
## Wartung
|
||||
|
||||
- **Automatische Bereinigung**: Alte Backups werden automatisch gelöscht
|
||||
- **Fehler-Logging**: Alle Fehler werden in den App-Logs erfasst
|
||||
- **Performance-Überwachung**: Optimierungszeiten werden gemessen
|
||||
- **Benutzer-Tracking**: Wartungsaktionen werden Benutzern zugeordnet
|
Reference in New Issue
Block a user