final-cleanup: Produktionsfertige Konfiguration - Alle Ports auf 443 vereinheitlicht, TLS-Zertifikate vorgeneriert, Zentraler Installer erstellt
This commit is contained in:
@@ -1,169 +0,0 @@
|
||||
# Häufige Fehler und Lösungen - Mercedes-Benz MYP Platform
|
||||
|
||||
## JavaScript-Fehler
|
||||
|
||||
### 1. `animateCounters is not defined`
|
||||
**Problem:** Die Funktion `animateCounters` wird in `admin.js` aufgerufen, aber nicht definiert.
|
||||
**Lösung:** Funktion wurde hinzugefügt in `admin.js` mit Intersection Observer für bessere Performance.
|
||||
|
||||
### 2. `showPrinterModal is not defined`
|
||||
**Problem:** Die Funktion `showPrinterModal` wird aufgerufen, aber nicht definiert.
|
||||
**Lösung:** Vollständige Modal-Funktion mit Formular-Handling wurde hinzugefügt.
|
||||
|
||||
### 3. `JSON.parse: unexpected character at line 1 column 1`
|
||||
**Problem:** API-Aufrufe geben HTML statt JSON zurück (404-Fehler).
|
||||
**Ursache:** Frontend läuft auf Port 8443, Backend auf Port 5000.
|
||||
**Lösung:** Dynamische API-URL-Erkennung mit intelligentem Fallback implementiert.
|
||||
|
||||
## API-Fehler (404 NOT FOUND)
|
||||
|
||||
### 1. `/api/admin/stats/live` - 404 Fehler
|
||||
**Problem:** Live-Statistiken API gibt 404 zurück.
|
||||
**Ursache:** Port-Mismatch zwischen Frontend (8443) und Backend (5000).
|
||||
**Lösung:**
|
||||
- Dynamische API-Base-URL-Erkennung implementiert
|
||||
- Automatischer Fallback von HTTPS:8443 zu HTTP:5000
|
||||
- Verbesserte Fehlerbehandlung in der Route
|
||||
- Sichere Admin-Berechtigung-Prüfung
|
||||
|
||||
### 2. `/api/admin/system/status` - 404 Fehler
|
||||
**Problem:** System-Status API gibt 404 zurück.
|
||||
**Lösung:**
|
||||
- Dynamische URL-Erkennung implementiert
|
||||
- Sichere psutil-Imports mit Fallback
|
||||
- Verbesserte Fehlerbehandlung
|
||||
- Graceful degradation wenn Systemüberwachung nicht verfügbar
|
||||
|
||||
### 3. `/api/admin/database/status` - 404 Fehler
|
||||
**Problem:** Datenbank-Status API gibt 404 zurück.
|
||||
**Lösung:**
|
||||
- Dynamische URL-Erkennung implementiert
|
||||
- Sichere Datenbankpfad-Erkennung
|
||||
- Verbesserte Verbindungstests
|
||||
- Fallback für fehlende Dateien
|
||||
|
||||
## Modal-Dialog Probleme
|
||||
|
||||
### 1. Automatische Weiterleitung zu 404-Seiten
|
||||
**Problem:** Modal-Formulare submitten automatisch und leiten zu nicht existierenden Routen weiter.
|
||||
**Ursache:** Fehlende `preventDefault()` in Form-Event-Handlers.
|
||||
**Lösung:**
|
||||
- `e.preventDefault()` zu allen Form-Submit-Handlers hinzugefügt
|
||||
- Explizite Event-Handler-Bindung statt onclick-Attribute
|
||||
- Verbesserte Modal-Schließung nach erfolgreichen Aktionen
|
||||
|
||||
### 2. Modal öffnet und schließt sofort
|
||||
**Problem:** Modal-Dialoge erscheinen kurz und verschwinden dann.
|
||||
**Ursache:** Automatische Form-Submission ohne preventDefault.
|
||||
**Lösung:** Korrekte Event-Handler-Implementierung mit preventDefault.
|
||||
|
||||
## Port-Konfiguration Probleme
|
||||
|
||||
### 1. Server läuft auf Port 5000 statt 8443
|
||||
**Problem:** Logs zeigen Port 5000, aber Frontend erwartet 8443.
|
||||
**Ursache:** SSL-Konfiguration fehlgeschlagen, Fallback auf HTTP.
|
||||
**Lösung:**
|
||||
- Intelligente Port-Erkennung implementiert
|
||||
- Automatischer Fallback von HTTPS:8443 zu HTTP:5000
|
||||
- Dynamische API-Base-URL-Generierung
|
||||
- Detailliertes Logging der URL-Erkennung
|
||||
|
||||
### 2. Cross-Origin-Probleme
|
||||
**Problem:** CORS-Fehler bei API-Aufrufen zwischen verschiedenen Ports.
|
||||
**Lösung:** Dynamische URL-Erkennung verhindert Cross-Origin-Requests.
|
||||
|
||||
### 3. Favicon 404-Fehler
|
||||
**Problem:** `/favicon.ico` gibt 404 zurück.
|
||||
**Lösung:** Route hinzugefügt die vorhandene PNG-Datei verwendet.
|
||||
|
||||
## Debugging-Strategien
|
||||
|
||||
### 1. Admin-API-Test-Route
|
||||
**Zweck:** Überprüfung ob Admin-API grundsätzlich funktioniert.
|
||||
**Route:** `/api/admin/test`
|
||||
**Verwendung:** Zeigt Benutzer-Status und Admin-Berechtigung an.
|
||||
|
||||
### 2. Debug-Routen-Übersicht
|
||||
**Route:** `/debug/routes`
|
||||
**Zweck:** Zeigt alle registrierten Flask-Routen an.
|
||||
|
||||
### 3. Verbesserte Fehlerbehandlung
|
||||
- Alle Admin-API-Routen haben jetzt try-catch-Blöcke
|
||||
- Detaillierte Fehlermeldungen
|
||||
- Graceful degradation bei fehlenden Abhängigkeiten
|
||||
- Intelligente URL-Erkennung mit Logging
|
||||
|
||||
### 4. URL-Debugging
|
||||
**Konsolen-Logs:** Alle API-Aufrufe loggen jetzt die verwendete URL
|
||||
**Port-Erkennung:** Detaillierte Informationen über erkannte Ports und Protokolle
|
||||
**Fallback-Mechanismus:** Automatische Umschaltung zwischen Ports
|
||||
|
||||
## Präventive Maßnahmen
|
||||
|
||||
### 1. JavaScript-Funktionen
|
||||
- Alle aufgerufenen Funktionen sind jetzt definiert
|
||||
- Fallback-Mechanismen für fehlende Elemente
|
||||
- Bessere Fehlerbehandlung in Event-Listenern
|
||||
- Korrekte Form-Event-Handler mit preventDefault
|
||||
|
||||
### 2. API-Routen
|
||||
- Konsistente Admin-Berechtigung-Prüfung
|
||||
- Sichere Datenbankzugriffe mit finally-Blöcken
|
||||
- Fallback-Werte für alle Statistiken
|
||||
- Dynamische URL-Erkennung für alle API-Aufrufe
|
||||
|
||||
### 3. Template-Handling
|
||||
- Alle Admin-Templates existieren
|
||||
- Korrekte Template-Pfade
|
||||
- Fehlerbehandlung für fehlende Templates
|
||||
|
||||
### 4. Port-Management
|
||||
- Intelligente Port-Erkennung
|
||||
- Automatische Fallback-Mechanismen
|
||||
- Cross-Origin-Problem-Vermeidung
|
||||
- Detailliertes URL-Logging
|
||||
|
||||
## Aktuelle Status
|
||||
|
||||
✅ **Behoben:**
|
||||
- `animateCounters` Funktion hinzugefügt
|
||||
- `showPrinterModal` Funktion implementiert
|
||||
- Admin-API-Routen verbessert
|
||||
- Favicon-Route hinzugefügt
|
||||
- Fehlerbehandlung verstärkt
|
||||
- **Dynamische API-URL-Erkennung implementiert**
|
||||
- **Modal-Dialog preventDefault-Problem behoben**
|
||||
- **Port-Mismatch-Problem gelöst**
|
||||
- **JSON-Parse-Fehler behoben**
|
||||
|
||||
🔄 **In Bearbeitung:**
|
||||
- SSL-Konfiguration optimieren
|
||||
- Live-Updates stabilisieren
|
||||
|
||||
⚠️ **Zu überwachen:**
|
||||
- Admin-Berechtigung-Prüfung
|
||||
- Datenbankverbindung-Stabilität
|
||||
- JavaScript-Performance bei Animationen
|
||||
- **API-URL-Fallback-Mechanismus**
|
||||
|
||||
## Nächste Schritte
|
||||
|
||||
1. **Server-Neustart testen** - Die Port-Erkennung sollte jetzt funktionieren
|
||||
2. **Admin-Dashboard-Funktionalität verifizieren** - Alle Modals sollten funktionieren
|
||||
3. **Live-Updates überwachen** - API-Aufrufe sollten erfolgreich sein
|
||||
4. SSL-Konfiguration finalisieren
|
||||
5. Performance-Optimierungen implementieren
|
||||
|
||||
## Technische Details
|
||||
|
||||
### Port-Erkennung-Algorithmus
|
||||
1. **Gleicher Port:** Wenn Frontend und Backend auf gleichem Port → relative URLs
|
||||
2. **HTTPS:8443 → HTTP:5000:** Automatischer Fallback für häufigsten Fall
|
||||
3. **Andere Ports:** Standard-Backend-Port basierend auf Protokoll
|
||||
4. **Logging:** Alle Entscheidungen werden in der Konsole geloggt
|
||||
|
||||
### Modal-Dialog-Fixes
|
||||
- `e.preventDefault()` in allen Form-Submit-Handlers
|
||||
- Explizite Event-Listener statt onclick-Attribute
|
||||
- Korrekte Modal-Schließung nach erfolgreichen API-Aufrufen
|
||||
- Verbesserte Fehlerbehandlung mit Benutzer-Feedback
|
@@ -1,351 +0,0 @@
|
||||
# MYP Platform - Raspberry Pi Deployment Guide
|
||||
|
||||
## Übersicht
|
||||
|
||||
Diese Anleitung beschreibt die vollständige Installation und Konfiguration der MYP Platform auf Raspberry Pi Systemen.
|
||||
|
||||
## Voraussetzungen
|
||||
|
||||
### Hardware
|
||||
- Raspberry Pi 4 (empfohlen) oder Raspberry Pi 3B+
|
||||
- Mindestens 4GB RAM
|
||||
- 32GB+ SD-Karte (Class 10)
|
||||
- Netzwerkverbindung (Ethernet oder WiFi)
|
||||
|
||||
### Software
|
||||
- Raspberry Pi OS (Bullseye oder neuer)
|
||||
- SSH-Zugang aktiviert
|
||||
- Benutzer `user` erstellt
|
||||
|
||||
## Installation
|
||||
|
||||
### 1. Projekt auf Raspberry Pi kopieren
|
||||
|
||||
```bash
|
||||
# Auf dem Entwicklungsrechner
|
||||
scp -r Projektarbeit-MYP user@raspberrypi:/home/user/
|
||||
|
||||
# Oder mit Git
|
||||
ssh user@raspberrypi
|
||||
cd /home/user
|
||||
git clone <repository-url> Projektarbeit-MYP
|
||||
```
|
||||
|
||||
### 2. Setup-Skript ausführen
|
||||
|
||||
```bash
|
||||
ssh user@raspberrypi
|
||||
cd /home/user/Projektarbeit-MYP/backend
|
||||
chmod +x setup_raspberry_pi.sh
|
||||
./setup_raspberry_pi.sh
|
||||
```
|
||||
|
||||
Das Setup-Skript führt automatisch folgende Schritte aus:
|
||||
|
||||
1. **System-Updates**: Aktualisiert alle Pakete
|
||||
2. **Abhängigkeiten**: Installiert Python, Nginx, Supervisor etc.
|
||||
3. **Virtual Environment**: Erstellt isolierte Python-Umgebung
|
||||
4. **Python-Pakete**: Installiert alle Requirements
|
||||
5. **Verzeichnisse**: Erstellt notwendige Ordnerstruktur
|
||||
6. **Datenbank**: Initialisiert SQLite-Datenbank
|
||||
7. **SSL-Zertifikate**: Generiert selbstsignierte Zertifikate
|
||||
8. **Services**: Konfiguriert Systemd, Nginx, Supervisor
|
||||
9. **Firewall**: Öffnet notwendige Ports
|
||||
10. **Drucker**: Trägt hardkodierte Drucker in DB ein
|
||||
|
||||
### 3. Manuelle Drucker-Konfiguration (optional)
|
||||
|
||||
Falls die Drucker separat konfiguriert werden sollen:
|
||||
|
||||
```bash
|
||||
cd /home/user/Projektarbeit-MYP/backend/app
|
||||
source ../venv/bin/activate
|
||||
python setup_drucker_db.py
|
||||
```
|
||||
|
||||
## Konfiguration
|
||||
|
||||
### Pfadstruktur
|
||||
|
||||
```
|
||||
/home/user/Projektarbeit-MYP/
|
||||
├── backend/
|
||||
│ ├── app/
|
||||
│ │ ├── database/
|
||||
│ │ │ └── myp.db
|
||||
│ │ ├── logs/
|
||||
│ │ │ ├── app/
|
||||
│ │ │ ├── auth/
|
||||
│ │ │ ├── jobs/
|
||||
│ │ │ ├── printers/
|
||||
│ │ │ ├── scheduler/
|
||||
│ │ │ └── errors/
|
||||
│ │ └── ...
|
||||
│ ├── certs/
|
||||
│ │ ├── myp.crt
|
||||
│ │ └── myp.key
|
||||
│ ├── venv/
|
||||
│ └── requirements.txt
|
||||
└── frontend/
|
||||
└── ssl/
|
||||
├── myp.crt
|
||||
└── myp.key
|
||||
```
|
||||
|
||||
### Hardkodierte Drucker
|
||||
|
||||
Die folgenden Drucker werden automatisch konfiguriert:
|
||||
|
||||
| Name | IP-Adresse | Status |
|
||||
|------|------------|--------|
|
||||
| Printer 1 | 192.168.0.100 | Available |
|
||||
| Printer 2 | 192.168.0.101 | Available |
|
||||
| Printer 3 | 192.168.0.102 | Available |
|
||||
| Printer 4 | 192.168.0.103 | Available |
|
||||
| Printer 5 | 192.168.0.104 | Available |
|
||||
| Printer 6 | 192.168.0.106 | Available |
|
||||
|
||||
### Standard-Anmeldedaten
|
||||
|
||||
- **E-Mail**: admin@mercedes-benz.com
|
||||
- **Passwort**: 744563017196A
|
||||
|
||||
## Services
|
||||
|
||||
### Systemd Service
|
||||
|
||||
```bash
|
||||
# Service-Status prüfen
|
||||
sudo systemctl status myp-platform
|
||||
|
||||
# Service neu starten
|
||||
sudo systemctl restart myp-platform
|
||||
|
||||
# Service aktivieren/deaktivieren
|
||||
sudo systemctl enable myp-platform
|
||||
sudo systemctl disable myp-platform
|
||||
|
||||
# Logs anzeigen
|
||||
sudo journalctl -u myp-platform -f
|
||||
```
|
||||
|
||||
### Nginx
|
||||
|
||||
```bash
|
||||
# Nginx-Status prüfen
|
||||
sudo systemctl status nginx
|
||||
|
||||
# Konfiguration testen
|
||||
sudo nginx -t
|
||||
|
||||
# Nginx neu laden
|
||||
sudo systemctl reload nginx
|
||||
```
|
||||
|
||||
### Supervisor
|
||||
|
||||
```bash
|
||||
# Supervisor-Status
|
||||
sudo supervisorctl status
|
||||
|
||||
# Service neu starten
|
||||
sudo supervisorctl restart myp-platform
|
||||
|
||||
# Logs anzeigen
|
||||
sudo supervisorctl tail -f myp-platform
|
||||
```
|
||||
|
||||
## Zugriff
|
||||
|
||||
### URLs
|
||||
|
||||
- **HTTPS**: https://raspberrypi
|
||||
- **HTTPS (IP)**: https://[IP-ADRESSE]
|
||||
- **HTTP**: Automatische Weiterleitung zu HTTPS
|
||||
|
||||
### SSL-Zertifikat
|
||||
|
||||
Das System verwendet selbstsignierte SSL-Zertifikate:
|
||||
|
||||
- Browser-Warnung beim ersten Zugriff ist normal
|
||||
- Zertifikat manuell akzeptieren
|
||||
- Für Produktionsumgebung: Echte Zertifikate verwenden
|
||||
|
||||
## Wartung
|
||||
|
||||
### Logs
|
||||
|
||||
```bash
|
||||
# Anwendungs-Logs
|
||||
tail -f /home/user/Projektarbeit-MYP/backend/app/logs/app/app.log
|
||||
|
||||
# System-Logs
|
||||
sudo journalctl -u myp-platform -f
|
||||
|
||||
# Nginx-Logs
|
||||
sudo tail -f /var/log/nginx/access.log
|
||||
sudo tail -f /var/log/nginx/error.log
|
||||
```
|
||||
|
||||
### Datenbank-Backup
|
||||
|
||||
```bash
|
||||
# Backup erstellen
|
||||
cp /home/user/Projektarbeit-MYP/backend/app/database/myp.db \
|
||||
/home/user/backup_$(date +%Y%m%d_%H%M%S).db
|
||||
|
||||
# Automatisches Backup (Crontab)
|
||||
crontab -e
|
||||
# Hinzufügen:
|
||||
# 0 2 * * * cp /home/user/Projektarbeit-MYP/backend/app/database/myp.db /home/user/backup_$(date +\%Y\%m\%d).db
|
||||
```
|
||||
|
||||
### Updates
|
||||
|
||||
```bash
|
||||
# Code aktualisieren
|
||||
cd /home/user/Projektarbeit-MYP
|
||||
git pull
|
||||
|
||||
# Python-Abhängigkeiten aktualisieren
|
||||
source backend/venv/bin/activate
|
||||
pip install -r backend/requirements.txt
|
||||
|
||||
# Service neu starten
|
||||
sudo systemctl restart myp-platform
|
||||
```
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Häufige Probleme
|
||||
|
||||
#### Service startet nicht
|
||||
|
||||
```bash
|
||||
# Logs prüfen
|
||||
sudo journalctl -u myp-platform -n 50
|
||||
|
||||
# Manuell starten (Debug)
|
||||
cd /home/user/Projektarbeit-MYP/backend/app
|
||||
source ../venv/bin/activate
|
||||
python app.py
|
||||
```
|
||||
|
||||
#### SSL-Probleme
|
||||
|
||||
```bash
|
||||
# Zertifikate neu generieren
|
||||
cd /home/user/Projektarbeit-MYP/backend/app
|
||||
source ../venv/bin/activate
|
||||
python -c "from utils.ssl_manager import ssl_manager; ssl_manager.generate_mercedes_certificate()"
|
||||
|
||||
# Nginx neu starten
|
||||
sudo systemctl restart nginx
|
||||
```
|
||||
|
||||
#### Datenbank-Probleme
|
||||
|
||||
```bash
|
||||
# Datenbank neu initialisieren
|
||||
cd /home/user/Projektarbeit-MYP/backend/app
|
||||
source ../venv/bin/activate
|
||||
python -c "from models import init_database, create_initial_admin; init_database(); create_initial_admin()"
|
||||
|
||||
# Drucker neu einrichten
|
||||
python setup_drucker_db.py
|
||||
```
|
||||
|
||||
#### Port-Konflikte
|
||||
|
||||
```bash
|
||||
# Verwendete Ports prüfen
|
||||
sudo netstat -tlnp | grep :443
|
||||
sudo netstat -tlnp | grep :80
|
||||
|
||||
# Prozesse beenden
|
||||
sudo pkill -f "python app.py"
|
||||
```
|
||||
|
||||
### Performance-Optimierung
|
||||
|
||||
#### Systemressourcen
|
||||
|
||||
```bash
|
||||
# RAM-Nutzung prüfen
|
||||
free -h
|
||||
|
||||
# CPU-Nutzung prüfen
|
||||
htop
|
||||
|
||||
# Festplatte prüfen
|
||||
df -h
|
||||
```
|
||||
|
||||
#### Log-Rotation
|
||||
|
||||
```bash
|
||||
# Logrotate konfigurieren
|
||||
sudo tee /etc/logrotate.d/myp-platform > /dev/null <<EOF
|
||||
/home/user/Projektarbeit-MYP/backend/app/logs/*/*.log {
|
||||
daily
|
||||
missingok
|
||||
rotate 7
|
||||
compress
|
||||
delaycompress
|
||||
notifempty
|
||||
copytruncate
|
||||
}
|
||||
EOF
|
||||
```
|
||||
|
||||
## Sicherheit
|
||||
|
||||
### Firewall
|
||||
|
||||
```bash
|
||||
# UFW-Status prüfen
|
||||
sudo ufw status
|
||||
|
||||
# Zusätzliche Regeln
|
||||
sudo ufw allow from 192.168.0.0/24 to any port 22
|
||||
sudo ufw deny 22
|
||||
```
|
||||
|
||||
### SSL-Härtung
|
||||
|
||||
Für Produktionsumgebung:
|
||||
|
||||
1. Echte SSL-Zertifikate verwenden (Let's Encrypt)
|
||||
2. HSTS aktivieren
|
||||
3. Security Headers konfigurieren
|
||||
4. Regelmäßige Updates
|
||||
|
||||
### Backup-Strategie
|
||||
|
||||
1. Tägliche Datenbank-Backups
|
||||
2. Wöchentliche Vollbackups
|
||||
3. Externe Speicherung
|
||||
4. Restore-Tests
|
||||
|
||||
## Support
|
||||
|
||||
### Kontakt
|
||||
|
||||
- **E-Mail**: admin@mercedes-benz.com
|
||||
- **Dokumentation**: /home/user/Projektarbeit-MYP/docs/
|
||||
|
||||
### Nützliche Befehle
|
||||
|
||||
```bash
|
||||
# System-Informationen
|
||||
hostnamectl
|
||||
cat /etc/os-release
|
||||
python3 --version
|
||||
|
||||
# Netzwerk-Informationen
|
||||
ip addr show
|
||||
hostname -I
|
||||
|
||||
# Service-Übersicht
|
||||
systemctl list-units --type=service --state=running
|
||||
```
|
@@ -1,121 +0,0 @@
|
||||
# MYP Platform - Raspberry Pi Setup
|
||||
|
||||
## Schnellstart
|
||||
|
||||
### 1. Projekt kopieren
|
||||
```bash
|
||||
scp -r Projektarbeit-MYP user@raspberrypi:/home/user/
|
||||
```
|
||||
|
||||
### 2. Setup ausführen
|
||||
```bash
|
||||
ssh user@raspberrypi
|
||||
cd /home/user/Projektarbeit-MYP/backend
|
||||
chmod +x setup_raspberry_pi.sh
|
||||
./setup_raspberry_pi.sh
|
||||
```
|
||||
|
||||
### 3. Zugriff
|
||||
- **URL**: https://raspberrypi
|
||||
- **Login**: admin@mercedes-benz.com
|
||||
- **Passwort**: 744563017196A
|
||||
|
||||
## Was wird installiert?
|
||||
|
||||
### System-Pakete
|
||||
- Python 3 + pip + venv
|
||||
- Nginx (Reverse Proxy)
|
||||
- Supervisor (Process Manager)
|
||||
- SQLite3 (Datenbank)
|
||||
- OpenSSL (SSL-Zertifikate)
|
||||
- Build-Tools (gcc, make, etc.)
|
||||
|
||||
### Python-Abhängigkeiten
|
||||
- Flask 2.3.3 (Web Framework)
|
||||
- SQLAlchemy 2.0.21 (ORM)
|
||||
- cryptography 41.0.4 (SSL)
|
||||
- PyP100 0.1.4 (Tapo Smart Plugs)
|
||||
- psutil 5.9.5 (System Monitoring)
|
||||
- gunicorn 21.2.0 (Production Server)
|
||||
- RPi.GPIO 0.7.1 (Hardware Interface)
|
||||
- Weitere 20+ Pakete (siehe requirements.txt)
|
||||
|
||||
### Services
|
||||
- **myp-platform.service**: Hauptanwendung
|
||||
- **nginx**: Reverse Proxy + SSL
|
||||
- **supervisor**: Process Management
|
||||
- **ufw**: Firewall (Ports 22, 80, 443)
|
||||
|
||||
### Verzeichnisstruktur
|
||||
```
|
||||
/home/user/Projektarbeit-MYP/
|
||||
├── backend/
|
||||
│ ├── app/ # Hauptanwendung
|
||||
│ │ ├── database/myp.db # SQLite Datenbank
|
||||
│ │ └── logs/ # Log-Dateien
|
||||
│ ├── certs/ # SSL-Zertifikate
|
||||
│ ├── venv/ # Python Virtual Environment
|
||||
│ └── requirements.txt # Python-Abhängigkeiten
|
||||
└── frontend/ssl/ # Frontend SSL-Zertifikate
|
||||
```
|
||||
|
||||
### Hardkodierte Drucker
|
||||
- **Printer 1**: 192.168.0.100
|
||||
- **Printer 2**: 192.168.0.101
|
||||
- **Printer 3**: 192.168.0.102
|
||||
- **Printer 4**: 192.168.0.103
|
||||
- **Printer 5**: 192.168.0.104
|
||||
- **Printer 6**: 192.168.0.106
|
||||
|
||||
## Wartung
|
||||
|
||||
### Service-Befehle
|
||||
```bash
|
||||
# Status prüfen
|
||||
sudo systemctl status myp-platform
|
||||
|
||||
# Neu starten
|
||||
sudo systemctl restart myp-platform
|
||||
|
||||
# Logs anzeigen
|
||||
sudo journalctl -u myp-platform -f
|
||||
```
|
||||
|
||||
### Drucker neu einrichten
|
||||
```bash
|
||||
cd /home/user/Projektarbeit-MYP/backend/app
|
||||
source ../venv/bin/activate
|
||||
python setup_drucker_db.py
|
||||
```
|
||||
|
||||
### SSL-Zertifikate erneuern
|
||||
```bash
|
||||
cd /home/user/Projektarbeit-MYP/backend/app
|
||||
source ../venv/bin/activate
|
||||
python -c "from utils.ssl_manager import ssl_manager; ssl_manager.generate_mercedes_certificate()"
|
||||
sudo systemctl restart nginx
|
||||
```
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Service startet nicht
|
||||
```bash
|
||||
sudo journalctl -u myp-platform -n 50
|
||||
```
|
||||
|
||||
### Manueller Start (Debug)
|
||||
```bash
|
||||
cd /home/user/Projektarbeit-MYP/backend/app
|
||||
source ../venv/bin/activate
|
||||
python app.py
|
||||
```
|
||||
|
||||
### Ports prüfen
|
||||
```bash
|
||||
sudo netstat -tlnp | grep :443
|
||||
sudo netstat -tlnp | grep :80
|
||||
```
|
||||
|
||||
## Vollständige Dokumentation
|
||||
|
||||
Siehe: `DEPLOYMENT.md` für detaillierte Anweisungen.
|
@@ -1,120 +0,0 @@
|
||||
# MYP - Manage Your Printer
|
||||
|
||||
Ein System zur Verwaltung und Steuerung von 3D-Druckern über TP-Link Tapo P110 Smart Plugs.
|
||||
|
||||
## Verzeichnisstruktur
|
||||
|
||||
Diese MYP-Installation ist wie folgt organisiert:
|
||||
|
||||
- **app/** - Enthält den Anwendungscode (app.py, models.py)
|
||||
- **docs/** - Enthält die Dokumentation (README, Anleitungen, Fehlerbehebung)
|
||||
- **install/** - Enthält Installationsskripte und Konfigurationsdateien
|
||||
|
||||
## Installation
|
||||
|
||||
Zur Installation und Konfiguration nutzen Sie bitte das Hauptinstallationsskript:
|
||||
|
||||
```bash
|
||||
chmod +x setup_myp.sh
|
||||
./setup_myp.sh
|
||||
```
|
||||
|
||||
Das Skript führt Sie durch die verfügbaren Optionen:
|
||||
1. Standardinstallation (nur MYP-Anwendung)
|
||||
2. Kiosk-Modus Installation (vollautomatischer Start nach Boot)
|
||||
3. Dokumentation anzeigen
|
||||
|
||||
## Ausführliche Dokumentation
|
||||
|
||||
Die vollständige Dokumentation finden Sie im `docs/`-Verzeichnis:
|
||||
|
||||
- Allgemeine Anleitung: [docs/README.md](docs/README.md)
|
||||
- Kiosk-Modus Anleitung: [docs/KIOSK-SETUP.md](docs/KIOSK-SETUP.md)
|
||||
- Fehlerbehebung: [docs/COMMON_ERRORS.md](docs/COMMON_ERRORS.md)
|
||||
- Entwicklungsplan: [docs/ROADMAP.md](docs/ROADMAP.md)
|
||||
|
||||
## Funktionsumfang
|
||||
|
||||
- Benutzer- und Rechteverwaltung (Admin/User)
|
||||
- Verwaltung von Druckern und Smart Plugs
|
||||
- Reservierungssystem für Drucker (Zeitplanung)
|
||||
- Automatisches Ein-/Ausschalten der Drucker über Smart Plugs
|
||||
- Statistikerfassung für Druckaufträge
|
||||
- **NEU**: Kiosk-Modus für automatischen Start auf Raspberry Pi
|
||||
|
||||
## Systemvoraussetzungen
|
||||
|
||||
- Raspberry Pi 4 (oder kompatibel)
|
||||
- Python 3.11+
|
||||
- Internetzugang für die Installation (danach offline nutzbar)
|
||||
- TP-Link Tapo P110 Smart Plugs im lokalen Netzwerk
|
||||
|
||||
## Erster Start
|
||||
|
||||
Beim ersten Start wird eine leere Datenbank angelegt. Es muss ein erster Administrator angelegt werden:
|
||||
|
||||
```
|
||||
POST /api/create-initial-admin
|
||||
```
|
||||
|
||||
Mit folgendem JSON-Body:
|
||||
```json
|
||||
{
|
||||
"email": "admin@example.com",
|
||||
"password": "sicheres-passwort",
|
||||
"name": "Administrator"
|
||||
}
|
||||
```
|
||||
|
||||
## API-Dokumentation
|
||||
|
||||
Die Anwendung stellt folgende REST-API-Endpunkte bereit:
|
||||
|
||||
### Authentifizierung
|
||||
|
||||
- `POST /auth/register` - Neuen Benutzer registrieren
|
||||
- `POST /auth/login` - Anmelden (erstellt eine Session für 7 Tage)
|
||||
|
||||
### Drucker
|
||||
|
||||
- `GET /api/printers` - Alle Drucker auflisten
|
||||
- `GET /api/printers/<printerId>` - Einzelnen Drucker abrufen
|
||||
- `POST /api/printers` - Neuen Drucker anlegen
|
||||
- `DELETE /api/printers/<printerId>` - Drucker löschen
|
||||
|
||||
### Jobs/Reservierungen
|
||||
|
||||
- `GET /api/jobs` - Alle Reservierungen abrufen
|
||||
- `POST /api/jobs` - Neue Reservierung anlegen
|
||||
- `GET /api/jobs/<jobId>` - Reservierungsdetails abrufen
|
||||
- `POST /api/jobs/<jobId>/finish` - Job beenden (Plug ausschalten)
|
||||
- `POST /api/jobs/<jobId>/abort` - Job abbrechen (Plug ausschalten)
|
||||
- `POST /api/jobs/<jobId>/extend` - Endzeit verschieben
|
||||
- `GET /api/jobs/<jobId>/status` - Aktuellen Plug-Status abrufen
|
||||
- `GET /api/jobs/<jobId>/remaining-time` - Restzeit in Sekunden abrufen
|
||||
- `DELETE /api/jobs/<jobId>` - Job löschen
|
||||
|
||||
### Benutzer
|
||||
|
||||
- `GET /api/users` - Alle Benutzer auflisten (nur Admin)
|
||||
- `GET /api/users/<userId>` - Einzelnen Benutzer abrufen
|
||||
- `DELETE /api/users/<userId>` - Benutzer löschen (nur Admin)
|
||||
|
||||
### Sonstiges
|
||||
|
||||
- `GET /api/stats` - Globale Statistik (Druckzeit, etc.)
|
||||
- `GET /api/test` - Health-Check
|
||||
|
||||
## Sicherheitshinweise
|
||||
|
||||
- Diese Anwendung speichert alle Zugangsdaten direkt im Code und in der Datenbank.
|
||||
- Die Anwendung sollte ausschließlich in einem geschützten, lokalen Netzwerk betrieben werden.
|
||||
- Es wird keine Verschlüsselung für die API-Kommunikation verwendet.
|
||||
|
||||
## Wartung und Troubleshooting
|
||||
|
||||
- Die Logdatei `myp.log` enthält alle wichtigen Ereignisse und Fehler
|
||||
- Die Datenbank wird in `database/myp.db` gespeichert
|
||||
- Häufig auftretende Probleme und Lösungen finden sich in [COMMON_ERRORS.md](COMMON_ERRORS.md)
|
||||
- Zukünftige Entwicklungspläne sind in [ROADMAP.md](ROADMAP.md) dokumentiert
|
||||
|
@@ -1,199 +0,0 @@
|
||||
# Mercedes-Benz MYP Platform - Roadmap
|
||||
|
||||
## Aktueller Stand (Dezember 2024)
|
||||
|
||||
### ✅ Abgeschlossen
|
||||
|
||||
#### Backend-Infrastruktur
|
||||
- ✅ Flask-App mit SQLAlchemy-Modellen
|
||||
- ✅ User-Management mit Admin-Rollen
|
||||
- ✅ Drucker-Management-System
|
||||
- ✅ Job-Scheduling-System
|
||||
- ✅ Logging-System implementiert
|
||||
- ✅ SSL-Konfiguration (teilweise)
|
||||
|
||||
#### Frontend-Grundlagen
|
||||
- ✅ Admin-Dashboard HTML-Templates
|
||||
- ✅ Basis-JavaScript-Funktionalität
|
||||
- ✅ Responsive Design mit Bootstrap
|
||||
|
||||
#### API-Endpunkte
|
||||
- ✅ Basis-CRUD-Operationen für alle Entitäten
|
||||
- ✅ Admin-API-Routen definiert
|
||||
- ✅ Authentifizierung und Autorisierung
|
||||
|
||||
### 🔧 Kürzlich behoben
|
||||
|
||||
#### JavaScript-Probleme
|
||||
- ✅ `animateCounters` Funktion implementiert
|
||||
- ✅ `showPrinterModal` Funktion hinzugefügt
|
||||
- ✅ `animateProgressBars` Funktion erstellt
|
||||
- ✅ `addHoverEffects` Funktion implementiert
|
||||
|
||||
#### API-Stabilität
|
||||
- ✅ Verbesserte Fehlerbehandlung in Admin-API-Routen
|
||||
- ✅ Sichere Admin-Berechtigung-Prüfung
|
||||
- ✅ Fallback-Mechanismen für System-Monitoring
|
||||
- ✅ Test-Route für Admin-API-Debugging
|
||||
|
||||
#### Infrastruktur
|
||||
- ✅ Favicon-Route hinzugefügt
|
||||
- ✅ Verbesserte Logging-Konfiguration
|
||||
- ✅ COMMON_ERRORS.md aktualisiert
|
||||
|
||||
## 🔄 Aktuell in Bearbeitung
|
||||
|
||||
### Kritische Probleme
|
||||
1. **SSL/HTTPS-Konfiguration**
|
||||
- Server läuft auf Port 5000 statt 8443
|
||||
- SSL-Zertifikate müssen überprüft werden
|
||||
- Port-Konsistenz zwischen Frontend und Backend
|
||||
|
||||
2. **Admin-Dashboard-Stabilität**
|
||||
- Live-Updates funktionieren teilweise
|
||||
- Einige API-Endpunkte geben noch 404-Fehler zurück
|
||||
- Modal-Funktionalität muss getestet werden
|
||||
|
||||
3. **Datenbankverbindung**
|
||||
- Session-Management optimieren
|
||||
- Connection-Pool-Konfiguration
|
||||
- Backup-Strategien implementieren
|
||||
|
||||
## 📋 Nächste Prioritäten
|
||||
|
||||
### Kurzfristig (1-2 Wochen)
|
||||
|
||||
#### 1. SSL/HTTPS-Stabilisierung
|
||||
- [ ] SSL-Zertifikate validieren
|
||||
- [ ] Port-Konfiguration vereinheitlichen
|
||||
- [ ] Reverse-Proxy-Setup dokumentieren
|
||||
- [ ] Fallback-Mechanismus für HTTP/HTTPS
|
||||
|
||||
#### 2. Admin-Dashboard-Vervollständigung
|
||||
- [ ] Alle Modal-Funktionen testen
|
||||
- [ ] Live-Update-Mechanismus stabilisieren
|
||||
- [ ] Drucker-Management-Funktionen verifizieren
|
||||
- [ ] Benutzer-Management-Interface finalisieren
|
||||
|
||||
#### 3. API-Konsistenz
|
||||
- [ ] Alle 404-Fehler beheben
|
||||
- [ ] Einheitliche Error-Response-Struktur
|
||||
- [ ] API-Dokumentation erstellen
|
||||
- [ ] Rate-Limiting implementieren
|
||||
|
||||
### Mittelfristig (2-4 Wochen)
|
||||
|
||||
#### 1. Performance-Optimierung
|
||||
- [ ] Database-Query-Optimierung
|
||||
- [ ] Frontend-Asset-Minimierung
|
||||
- [ ] Caching-Strategien implementieren
|
||||
- [ ] Load-Testing durchführen
|
||||
|
||||
#### 2. Sicherheit
|
||||
- [ ] Security-Audit durchführen
|
||||
- [ ] CSRF-Protection verstärken
|
||||
- [ ] Input-Validation verbessern
|
||||
- [ ] Session-Security optimieren
|
||||
|
||||
#### 3. Monitoring & Analytics
|
||||
- [ ] System-Monitoring-Dashboard
|
||||
- [ ] Performance-Metriken sammeln
|
||||
- [ ] Error-Tracking implementieren
|
||||
- [ ] Usage-Analytics hinzufügen
|
||||
|
||||
### Langfristig (1-3 Monate)
|
||||
|
||||
#### 1. Feature-Erweiterungen
|
||||
- [ ] Mobile-App-Unterstützung
|
||||
- [ ] Push-Notifications
|
||||
- [ ] Advanced-Scheduling-Features
|
||||
- [ ] Reporting-System
|
||||
|
||||
#### 2. Skalierung
|
||||
- [ ] Multi-Tenant-Architektur
|
||||
- [ ] Microservices-Migration
|
||||
- [ ] Container-Orchestrierung
|
||||
- [ ] Cloud-Deployment
|
||||
|
||||
#### 3. Integration
|
||||
- [ ] LDAP/Active Directory-Integration
|
||||
- [ ] Drucker-API-Integration
|
||||
- [ ] ERP-System-Anbindung
|
||||
- [ ] Workflow-Automation
|
||||
|
||||
## 🚨 Bekannte Probleme
|
||||
|
||||
### Kritisch
|
||||
- SSL-Konfiguration instabil
|
||||
- Einige Admin-API-Endpunkte nicht erreichbar
|
||||
- Live-Updates funktionieren nicht zuverlässig
|
||||
|
||||
### Wichtig
|
||||
- Favicon-Requests verursachen 404-Fehler (behoben)
|
||||
- JavaScript-Funktionen fehlen (behoben)
|
||||
- Admin-Berechtigung-Prüfung inkonsistent (verbessert)
|
||||
|
||||
### Niedrig
|
||||
- Logging-Performance bei hoher Last
|
||||
- Frontend-Animationen können optimiert werden
|
||||
- Dokumentation unvollständig
|
||||
|
||||
## 🎯 Erfolgskriterien
|
||||
|
||||
### Phase 1 (Stabilisierung)
|
||||
- [ ] Alle Admin-Dashboard-Funktionen arbeiten fehlerfrei
|
||||
- [ ] SSL/HTTPS funktioniert zuverlässig
|
||||
- [ ] Keine 404-Fehler in der Konsole
|
||||
- [ ] Live-Updates funktionieren in Echtzeit
|
||||
|
||||
### Phase 2 (Optimierung)
|
||||
- [ ] Seitenladezeiten unter 2 Sekunden
|
||||
- [ ] 99.9% Uptime
|
||||
- [ ] Alle Security-Scans bestanden
|
||||
- [ ] Performance-Benchmarks erreicht
|
||||
|
||||
### Phase 3 (Erweiterung)
|
||||
- [ ] Mobile-Responsive Design
|
||||
- [ ] Multi-Language-Support
|
||||
- [ ] Advanced-Features implementiert
|
||||
- [ ] Skalierbarkeit nachgewiesen
|
||||
|
||||
## 📊 Metriken & KPIs
|
||||
|
||||
### Technische Metriken
|
||||
- Response-Zeit: < 200ms für API-Calls
|
||||
- Uptime: > 99.9%
|
||||
- Error-Rate: < 0.1%
|
||||
- Database-Query-Zeit: < 50ms
|
||||
|
||||
### Business-Metriken
|
||||
- Benutzer-Zufriedenheit: > 4.5/5
|
||||
- Feature-Adoption-Rate: > 80%
|
||||
- Support-Tickets: < 5 pro Woche
|
||||
- System-Effizienz: > 95%
|
||||
|
||||
## 🔧 Entwicklungsrichtlinien
|
||||
|
||||
### Code-Qualität
|
||||
- Alle Funktionen müssen getestet werden
|
||||
- Code-Coverage > 80%
|
||||
- Linting-Regeln befolgen
|
||||
- Dokumentation für alle neuen Features
|
||||
|
||||
### Deployment
|
||||
- Staging-Environment für Tests
|
||||
- Automated-Testing vor Deployment
|
||||
- Rollback-Strategien definiert
|
||||
- Monitoring nach Deployment
|
||||
|
||||
### Sicherheit
|
||||
- Regelmäßige Security-Audits
|
||||
- Dependency-Updates
|
||||
- Penetration-Testing
|
||||
- Compliance-Checks
|
||||
|
||||
---
|
||||
|
||||
**Letzte Aktualisierung:** Dezember 2024
|
||||
**Nächste Review:** In 2 Wochen
|
||||
**Verantwortlich:** Entwicklungsteam Mercedes-Benz MYP
|
@@ -1,177 +0,0 @@
|
||||
# MYP Platform - Sicherheitsdokumentation
|
||||
|
||||
## Übersicht
|
||||
Diese Dokumentation beschreibt die Sicherheitsmaßnahmen der MYP Platform, insbesondere für den Kiosk-Modus.
|
||||
|
||||
## Kiosk-Sicherheit
|
||||
|
||||
### Passwort-Schutz
|
||||
- **Deaktivierungspasswort**: `744563017196A`
|
||||
- Das Passwort ist als sicherer Hash gespeichert
|
||||
- Fehlgeschlagene Versuche werden protokolliert
|
||||
|
||||
### Systemhärtung
|
||||
- Kernel-Parameter für erhöhte Sicherheit
|
||||
- SSH-Härtung mit Fail2Ban
|
||||
- Firewall-Konfiguration (UFW)
|
||||
- Automatische Sicherheitsupdates
|
||||
|
||||
### Überwachung
|
||||
- Audit-Logs für Systemzugriffe
|
||||
- Monitoring verdächtiger Prozesse
|
||||
- Integritätsprüfung des Dateisystems
|
||||
- Automatische Benachrichtigungen bei Sicherheitsereignissen
|
||||
|
||||
## Netzwerksicherheit
|
||||
|
||||
### Firewall-Regeln
|
||||
```bash
|
||||
# Eingehende Verbindungen
|
||||
Port 22 (SSH) - Nur von lokalen Netzwerken
|
||||
Port 80 (HTTP) - Für Web-Interface
|
||||
Port 443 (HTTPS) - Für sichere Verbindungen
|
||||
|
||||
# Ausgehende Verbindungen
|
||||
Nur notwendige Dienste erlaubt
|
||||
```
|
||||
|
||||
### Rate Limiting
|
||||
- Login-Versuche: 5 pro Minute
|
||||
- API-Aufrufe: 200 pro Tag, 50 pro Stunde
|
||||
- Automatische IP-Sperrung bei Missbrauch
|
||||
|
||||
## Authentifizierung
|
||||
|
||||
### Benutzerrollen
|
||||
- **Admin**: Vollzugriff auf alle Funktionen
|
||||
- **User**: Eingeschränkter Zugriff auf eigene Daten
|
||||
- **Kiosk**: Nur Anzeige-Berechtigung
|
||||
|
||||
### Session-Management
|
||||
- Sichere Session-Cookies
|
||||
- Automatische Abmeldung nach Inaktivität
|
||||
- CSRF-Schutz für alle Formulare
|
||||
|
||||
## Datenschutz
|
||||
|
||||
### Verschlüsselung
|
||||
- Passwörter mit bcrypt gehashed
|
||||
- HTTPS für alle Verbindungen
|
||||
- Sichere Cookie-Einstellungen
|
||||
|
||||
### Logging
|
||||
- Keine sensiblen Daten in Logs
|
||||
- Strukturierte Logs für Audit-Zwecke
|
||||
- Automatische Log-Rotation
|
||||
|
||||
## Kiosk-Deaktivierung
|
||||
|
||||
### Notfall-Deaktivierung
|
||||
1. Zugriff auf Terminal (Strg+Alt+T)
|
||||
2. API-Aufruf: `POST /api/kiosk/deactivate`
|
||||
3. Passwort eingeben: `744563017196A`
|
||||
4. System wird automatisch neu gestartet
|
||||
|
||||
### Manuelle Deaktivierung
|
||||
```bash
|
||||
# Service stoppen
|
||||
sudo systemctl stop myp-kiosk
|
||||
sudo systemctl disable myp-kiosk
|
||||
|
||||
# Desktop wiederherstellen
|
||||
sudo systemctl set-default graphical.target
|
||||
|
||||
# Neustart
|
||||
sudo reboot
|
||||
```
|
||||
|
||||
## Wartung
|
||||
|
||||
### Regelmäßige Aufgaben
|
||||
- Sicherheitsupdates installieren
|
||||
- Log-Dateien überprüfen
|
||||
- Backup-Integrität testen
|
||||
- Benutzerkonten auditieren
|
||||
|
||||
### Monitoring-Befehle
|
||||
```bash
|
||||
# System-Status
|
||||
systemctl status myp-kiosk
|
||||
systemctl status myp-backend
|
||||
|
||||
# Logs überprüfen
|
||||
journalctl -u myp-kiosk -f
|
||||
tail -f /var/log/myp/security.log
|
||||
|
||||
# Netzwerk-Status
|
||||
ufw status
|
||||
fail2ban-client status
|
||||
```
|
||||
|
||||
## Incident Response
|
||||
|
||||
### Bei Sicherheitsvorfällen
|
||||
1. System isolieren (Netzwerk trennen)
|
||||
2. Logs sichern
|
||||
3. Forensische Analyse
|
||||
4. System neu aufsetzen
|
||||
5. Sicherheitsmaßnahmen verstärken
|
||||
|
||||
### Kontakte
|
||||
- IT-Sicherheit: security@mercedes-benz.com
|
||||
- System-Administrator: admin@mercedes-benz.com
|
||||
- Notfall-Hotline: +49 711 17-0
|
||||
|
||||
## Compliance
|
||||
|
||||
### Standards
|
||||
- ISO 27001 Informationssicherheit
|
||||
- DSGVO Datenschutz
|
||||
- Mercedes-Benz IT-Sicherheitsrichtlinien
|
||||
|
||||
### Audit-Anforderungen
|
||||
- Monatliche Sicherheitsberichte
|
||||
- Jährliche Penetrationstests
|
||||
- Kontinuierliche Vulnerability-Scans
|
||||
|
||||
## Konfiguration
|
||||
|
||||
### Sicherheitsparameter
|
||||
```python
|
||||
# Flask-Konfiguration
|
||||
SECRET_KEY = "zufälliger-256-bit-schlüssel"
|
||||
SESSION_COOKIE_SECURE = True
|
||||
SESSION_COOKIE_HTTPONLY = True
|
||||
SESSION_COOKIE_SAMESITE = 'Lax'
|
||||
|
||||
# Rate Limiting
|
||||
RATELIMIT_STORAGE_URL = "redis://localhost:6379"
|
||||
RATELIMIT_DEFAULT = "200 per day, 50 per hour"
|
||||
```
|
||||
|
||||
### Systemparameter
|
||||
```bash
|
||||
# Kernel-Härtung
|
||||
net.ipv4.conf.all.send_redirects = 0
|
||||
net.ipv4.conf.default.send_redirects = 0
|
||||
net.ipv4.conf.all.accept_redirects = 0
|
||||
net.ipv4.conf.default.accept_redirects = 0
|
||||
```
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Häufige Probleme
|
||||
1. **Kiosk startet nicht**: Service-Status prüfen
|
||||
2. **Passwort funktioniert nicht**: Hash-Integrität überprüfen
|
||||
3. **Netzwerk blockiert**: Firewall-Regeln kontrollieren
|
||||
|
||||
### Debug-Modus
|
||||
```bash
|
||||
# Kiosk im Debug-Modus starten
|
||||
sudo systemctl stop myp-kiosk
|
||||
sudo -u kiosk /opt/myp/kiosk/start_kiosk.sh --debug
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
**WICHTIG**: Diese Dokumentation enthält sicherheitskritische Informationen und darf nur autorisierten Personen zugänglich gemacht werden.
|
@@ -1,276 +0,0 @@
|
||||
# Datenbank-Verbesserungen - MYP System
|
||||
|
||||
## Übersicht
|
||||
|
||||
Das MYP-System wurde mit umfassenden Datenbank-Verbesserungen ausgestattet, die Stabilität, Sicherheit und Performance erheblich steigern. Diese Dokumentation beschreibt alle implementierten Features.
|
||||
|
||||
## 🚀 Implementierte Features
|
||||
|
||||
### 1. Write-Ahead Logging (WAL)
|
||||
- **Aktiviert**: SQLite WAL-Modus für bessere Concurrency
|
||||
- **Vorteile**:
|
||||
- Gleichzeitige Lese- und Schreiboperationen
|
||||
- Bessere Performance bei hoher Last
|
||||
- Reduzierte Sperrzeiten
|
||||
- **Konfiguration**: Automatisch aktiviert in `models.py`
|
||||
|
||||
### 2. Connection Pooling
|
||||
- **Engine-Optimierung**: Konfigurierte SQLAlchemy-Engine mit Pooling
|
||||
- **Parameter**:
|
||||
- Pool-Größe: 20 Verbindungen
|
||||
- Max Overflow: 30 zusätzliche Verbindungen
|
||||
- Connection Timeout: 30 Sekunden
|
||||
- Pool Recycle: 3600 Sekunden
|
||||
|
||||
### 3. Intelligentes Caching-System
|
||||
- **Thread-sicherer Cache**: Implementiert mit `threading.local()`
|
||||
- **Cache-Strategien**:
|
||||
- User-Daten: 5-10 Minuten
|
||||
- Printer-Status: 1-2 Minuten
|
||||
- Job-Daten: 30 Sekunden - 5 Minuten
|
||||
- Statistiken: 10 Minuten
|
||||
- **Cache-Invalidierung**: Automatisch bei Datenänderungen
|
||||
|
||||
### 4. Automatisches Backup-System
|
||||
- **Tägliche Backups**: Automatisch um Mitternacht
|
||||
- **Komprimierung**: Gzip-Komprimierung für Speichereffizienz
|
||||
- **Rotation**: Automatische Bereinigung alter Backups (30 Tage)
|
||||
- **Manueller Trigger**: Admin-Interface für sofortige Backups
|
||||
|
||||
### 5. Datenbank-Monitoring
|
||||
- **Gesundheitsprüfung**: Integritätschecks und Performance-Monitoring
|
||||
- **Statistiken**: Detaillierte DB-Metriken
|
||||
- **Wartungsalerts**: Automatische Benachrichtigungen bei Problemen
|
||||
|
||||
### 6. Automatische Wartung
|
||||
- **Scheduler**: Hintergrund-Thread für Wartungsaufgaben
|
||||
- **Operationen**:
|
||||
- ANALYZE für Query-Optimierung
|
||||
- WAL-Checkpoints
|
||||
- Incremental Vacuum
|
||||
- PRAGMA optimize
|
||||
|
||||
## 📁 Dateistruktur
|
||||
|
||||
```
|
||||
backend/app/
|
||||
├── models.py # Erweiterte Modelle mit Caching
|
||||
├── utils/
|
||||
│ └── database_utils.py # Backup & Monitoring Utilities
|
||||
├── database/
|
||||
│ ├── myp_database.db # Hauptdatenbank
|
||||
│ ├── myp_database.db-wal # WAL-Datei
|
||||
│ ├── myp_database.db-shm # Shared Memory
|
||||
│ └── backups/ # Backup-Verzeichnis
|
||||
│ ├── myp_backup_20241201_120000.db.gz
|
||||
│ └── ...
|
||||
```
|
||||
|
||||
## 🔧 Konfiguration
|
||||
|
||||
### SQLite-Optimierungen
|
||||
```sql
|
||||
PRAGMA journal_mode = WAL;
|
||||
PRAGMA synchronous = NORMAL;
|
||||
PRAGMA cache_size = -64000; # 64MB Cache
|
||||
PRAGMA temp_store = MEMORY;
|
||||
PRAGMA mmap_size = 268435456; # 256MB Memory Map
|
||||
PRAGMA foreign_keys = ON;
|
||||
```
|
||||
|
||||
### Cache-Konfiguration
|
||||
```python
|
||||
# Cache-Zeiten (Sekunden)
|
||||
USER_CACHE_TIME = 300 # 5 Minuten
|
||||
PRINTER_CACHE_TIME = 120 # 2 Minuten
|
||||
JOB_CACHE_TIME = 180 # 3 Minuten
|
||||
STATS_CACHE_TIME = 600 # 10 Minuten
|
||||
```
|
||||
|
||||
## 🛠 API-Endpunkte
|
||||
|
||||
### Datenbank-Statistiken
|
||||
```http
|
||||
GET /api/admin/database/stats
|
||||
```
|
||||
**Response:**
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"stats": {
|
||||
"database_size_mb": 15.2,
|
||||
"wal_size_mb": 2.1,
|
||||
"journal_mode": "wal",
|
||||
"cache_size": -64000,
|
||||
"table_counts": {
|
||||
"users": 25,
|
||||
"printers": 8,
|
||||
"jobs": 1247
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Gesundheitsprüfung
|
||||
```http
|
||||
GET /api/admin/database/health
|
||||
```
|
||||
**Response:**
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"health": {
|
||||
"status": "healthy",
|
||||
"issues": [],
|
||||
"recommendations": []
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Backup erstellen
|
||||
```http
|
||||
POST /api/admin/database/backup
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"compress": true
|
||||
}
|
||||
```
|
||||
|
||||
### Backup-Liste abrufen
|
||||
```http
|
||||
GET /api/admin/database/backups
|
||||
```
|
||||
|
||||
### Backup wiederherstellen
|
||||
```http
|
||||
POST /api/admin/database/backup/restore
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"backup_path": "/path/to/backup.db.gz"
|
||||
}
|
||||
```
|
||||
|
||||
### Datenbank optimieren
|
||||
```http
|
||||
POST /api/admin/database/optimize
|
||||
```
|
||||
|
||||
### Alte Backups bereinigen
|
||||
```http
|
||||
POST /api/admin/database/backup/cleanup
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"keep_days": 30
|
||||
}
|
||||
```
|
||||
|
||||
## 📊 Performance-Verbesserungen
|
||||
|
||||
### Vor den Verbesserungen
|
||||
- Einzelne DB-Verbindung
|
||||
- Keine Caching-Mechanismen
|
||||
- Manuelle Backups erforderlich
|
||||
- Keine Performance-Überwachung
|
||||
|
||||
### Nach den Verbesserungen
|
||||
- **50-80% schnellere Abfragen** durch Caching
|
||||
- **Verbesserte Concurrency** durch WAL-Modus
|
||||
- **Automatische Wartung** reduziert manuelle Eingriffe
|
||||
- **Proaktive Überwachung** verhindert Ausfälle
|
||||
|
||||
## 🔒 Sicherheitsfeatures
|
||||
|
||||
### Backup-Sicherheit
|
||||
- Komprimierte Backups reduzieren Speicherbedarf
|
||||
- Automatische Rotation verhindert Speicherüberläufe
|
||||
- Sicherheitsbackup vor Wiederherstellung
|
||||
|
||||
### Zugriffskontrolle
|
||||
- Alle Admin-Endpunkte erfordern Admin-Berechtigung
|
||||
- Pfad-Validierung bei Backup-Operationen
|
||||
- Fehlerbehandlung mit detailliertem Logging
|
||||
|
||||
### Datenintegrität
|
||||
- Regelmäßige Integritätsprüfungen
|
||||
- WAL-Modus verhindert Datenverlust
|
||||
- Foreign Key Constraints aktiviert
|
||||
|
||||
## 🚨 Monitoring & Alerts
|
||||
|
||||
### Automatische Überwachung
|
||||
- **WAL-Dateigröße**: Alert bei >100MB
|
||||
- **Freier Speicherplatz**: Warnung bei <1GB
|
||||
- **Integritätsprüfung**: Tägliche Checks
|
||||
- **Performance-Metriken**: Kontinuierliche Sammlung
|
||||
|
||||
### Log-Kategorien
|
||||
```
|
||||
[DATABASE] - Allgemeine Datenbank-Operationen
|
||||
[BACKUP] - Backup-Operationen
|
||||
[CACHE] - Cache-Operationen
|
||||
[MAINTENANCE] - Wartungsaufgaben
|
||||
[HEALTH] - Gesundheitsprüfungen
|
||||
```
|
||||
|
||||
## 🔄 Wartungsplan
|
||||
|
||||
### Automatisch (Hintergrund)
|
||||
- **Täglich**: Backup, Optimierung, Gesundheitsprüfung
|
||||
- **Wöchentlich**: Bereinigung alter Backups
|
||||
- **Stündlich**: Cache-Bereinigung, WAL-Checkpoints
|
||||
|
||||
### Manuell (Admin-Interface)
|
||||
- Sofortige Backups vor kritischen Änderungen
|
||||
- Manuelle Optimierung bei Performance-Problemen
|
||||
- Backup-Wiederherstellung bei Datenverlust
|
||||
|
||||
## 📈 Metriken & KPIs
|
||||
|
||||
### Performance-Indikatoren
|
||||
- Durchschnittliche Query-Zeit
|
||||
- Cache-Hit-Rate
|
||||
- WAL-Checkpoint-Häufigkeit
|
||||
- Backup-Erfolgsrate
|
||||
|
||||
### Kapazitätsplanung
|
||||
- Datenbankwachstum pro Monat
|
||||
- Backup-Speicherverbrauch
|
||||
- Cache-Effizienz
|
||||
|
||||
## 🛡 Disaster Recovery
|
||||
|
||||
### Backup-Strategie
|
||||
1. **Tägliche automatische Backups**
|
||||
2. **30-Tage Aufbewahrung**
|
||||
3. **Komprimierte Speicherung**
|
||||
4. **Schnelle Wiederherstellung**
|
||||
|
||||
### Recovery-Prozess
|
||||
1. System stoppen
|
||||
2. Backup auswählen
|
||||
3. Wiederherstellung durchführen
|
||||
4. Integritätsprüfung
|
||||
5. System neu starten
|
||||
|
||||
## 🎯 Nächste Schritte
|
||||
|
||||
### Geplante Erweiterungen
|
||||
- [ ] Replikation für High Availability
|
||||
- [ ] Erweiterte Metriken-Dashboard
|
||||
- [ ] Automatische Performance-Tuning
|
||||
- [ ] Cloud-Backup-Integration
|
||||
|
||||
### Optimierungsmöglichkeiten
|
||||
- [ ] Adaptive Cache-Größen
|
||||
- [ ] Intelligente Backup-Zeitpunkte
|
||||
- [ ] Predictive Maintenance
|
||||
- [ ] Real-time Monitoring Dashboard
|
||||
|
||||
---
|
||||
|
||||
**Status**: ✅ Vollständig implementiert und getestet
|
||||
**Version**: 2.0
|
||||
**Letzte Aktualisierung**: Dezember 2024
|
@@ -1,127 +0,0 @@
|
||||
# MYP Platform - 3D-Drucker Reservierungssystem
|
||||
|
||||
Ein Reservierungssystem für 3D-Drucker, das automatisch TP-Link Tapo P110 Smart Plugs steuert, um die Stromversorgung von Druckern basierend auf den reservierten Zeitslots zu verwalten.
|
||||
|
||||
## Features
|
||||
|
||||
- Reservierung von 3D-Druckern für bestimmte Zeiträume
|
||||
- Automatische Steuerung der TP-Link Tapo P110 Smart Plugs
|
||||
- Echtzeit-Überwachung von laufenden Druckaufträgen
|
||||
- Administrationsbereich für Druckerverwaltung
|
||||
- Benutzerauthentifizierung und Autorisierung
|
||||
- Statistiken zu Druckaufträgen und Materialverbrauch
|
||||
- Dark Mode für eine angenehme Nutzung bei schlechten Lichtverhältnissen
|
||||
- Responsive Design für verschiedene Gerätegrößen
|
||||
|
||||
## Technologie-Stack
|
||||
|
||||
- **Backend**: Python 3.11 mit Flask
|
||||
- **Frontend**: HTML/CSS/JavaScript mit Tailwind CSS
|
||||
- **Datenbank**: SQLite mit SQLAlchemy ORM
|
||||
- **Authentifizierung**: Flask-Login
|
||||
- **Hardware-Integration**: PyP100 für Tapo Smart Plug Steuerung
|
||||
- **Automatisierung**: Integrierter Job-Scheduler für Drucker-Steuerung
|
||||
|
||||
## Systemanforderungen
|
||||
|
||||
- Python 3.11+
|
||||
- Node.js und npm (für Tailwind CSS)
|
||||
- Netzwerkzugang zu TP-Link Tapo P110 Smart Plugs
|
||||
- Unterstützte Betriebssysteme: Linux, Windows, macOS
|
||||
|
||||
## Installation
|
||||
|
||||
1. **Repository klonen**:
|
||||
```bash
|
||||
git clone <repository-url>
|
||||
cd myp-platform
|
||||
```
|
||||
|
||||
2. **Python-Abhängigkeiten installieren**:
|
||||
```bash
|
||||
cd backend/app
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
|
||||
3. **Node-Abhängigkeiten installieren und CSS bauen**:
|
||||
```bash
|
||||
npm install
|
||||
npm run build:css
|
||||
```
|
||||
|
||||
4. **Datenbank initialisieren**:
|
||||
```bash
|
||||
python init_db.py
|
||||
```
|
||||
|
||||
5. **Server starten**:
|
||||
```bash
|
||||
# Standardstart
|
||||
python app.py
|
||||
|
||||
# Oder mit spezifischem Port (empfohlen)
|
||||
python app.py --port=5000
|
||||
```
|
||||
|
||||
## API Endpunkte
|
||||
|
||||
| Methode | Endpunkt | Beschreibung |
|
||||
|---------|------------------------|--------------------------------------------------------|
|
||||
| GET | /api/jobs | Gibt alle Jobs (für Admins) oder eigene Jobs zurück |
|
||||
| GET | /api/jobs/active | Gibt alle aktiven Druckaufträge zurück |
|
||||
| GET | /api/jobs/{id} | Gibt Details zu einem bestimmten Job zurück |
|
||||
| POST | /api/jobs | Erstellt eine neue Druckerreservierung |
|
||||
| GET | /api/printers | Gibt alle verfügbaren Drucker zurück |
|
||||
|
||||
## Scheduler
|
||||
|
||||
Das System enthält einen eingebauten Scheduler, der automatisch:
|
||||
- Drucker einschaltet, wenn ein Auftrag beginnt
|
||||
- Drucker ausschaltet, wenn ein Auftrag endet
|
||||
- Den Status von Druckern aktualisiert
|
||||
- Die Auftragsstatistiken sammelt
|
||||
|
||||
## Konfiguration
|
||||
|
||||
Die Konfiguration erfolgt über die Datei `config/settings.py`. Wichtige Einstellungen umfassen:
|
||||
- Datenbankpfad
|
||||
- Tapo-Zugangsdaten
|
||||
- Drucker-Konfigurationen
|
||||
- Logging-Einstellungen
|
||||
- Webserver-Einstellungen
|
||||
|
||||
## CSS-System
|
||||
|
||||
Die Anwendung nutzt Tailwind CSS für das Styling mit separaten Dateien für Light- und Dark-Mode.
|
||||
|
||||
### Tailwind Build
|
||||
|
||||
```bash
|
||||
# CSS bauen
|
||||
npm run build:css
|
||||
|
||||
# CSS im Watch-Modus (für Entwicklung)
|
||||
npm run watch:css
|
||||
```
|
||||
|
||||
## Sicherheit
|
||||
|
||||
- Nur angemeldete Benutzer können Druckaufträge erstellen
|
||||
- Nur Besitzer eines Druckauftrags können diesen verwalten
|
||||
- Nur Administratoren haben Zugriff auf alle Jobs und Systemeinstellungen
|
||||
- Passwörter werden mit bcrypt gesichert
|
||||
|
||||
## Fehlerbehandlung und Logging
|
||||
|
||||
Das System führt detaillierte Logs in folgenden Kategorien:
|
||||
- App-Log (allgemeine Anwendungslogs)
|
||||
- Auth-Log (Authentifizierungsereignisse)
|
||||
- Jobs-Log (Druckauftragsoperationen)
|
||||
- Printer-Log (Druckerstatusänderungen)
|
||||
- Scheduler-Log (Automatisierungsaktionen)
|
||||
- Error-Log (Fehlerprotokollierung)
|
||||
|
||||
## Entwicklung
|
||||
|
||||
Diese Anwendung ist für den Offline-Betrieb konzipiert und verwendet keine externen CDNs.
|
||||
Weitere Informationen zur Entwicklungsumgebung finden Sie in der `TAILWIND_SETUP.md`.
|
@@ -18,35 +18,21 @@ class AdminLiveDashboard {
|
||||
}
|
||||
|
||||
detectApiBaseUrl() {
|
||||
// Versuche verschiedene Ports zu erkennen
|
||||
const currentHost = window.location.hostname;
|
||||
const currentPort = window.location.port;
|
||||
const currentProtocol = window.location.protocol;
|
||||
const currentPort = window.location.port;
|
||||
|
||||
console.log('🔍 Aktuelle URL-Informationen:', {
|
||||
host: currentHost,
|
||||
port: currentPort,
|
||||
protocol: currentProtocol,
|
||||
fullUrl: window.location.href
|
||||
});
|
||||
console.log('🔍 Live Dashboard API URL Detection:', { currentHost, currentProtocol, currentPort });
|
||||
|
||||
// Wenn wir bereits auf dem richtigen Port sind, verwende relative URLs
|
||||
if (currentPort === '5000' || !currentPort) {
|
||||
console.log('✅ Verwende relative URLs (gleicher Port oder Standard)');
|
||||
if (currentPort === '443' || !currentPort) {
|
||||
console.log('✅ Verwende relative URLs (HTTPS Port 443)');
|
||||
return '';
|
||||
}
|
||||
|
||||
// Wenn wir auf 8443 sind, versuche 5000 (häufiger Fall)
|
||||
if (currentPort === '8443') {
|
||||
const fallbackUrl = `http://${currentHost}:5000`;
|
||||
console.log('🔄 Fallback von HTTPS:8443 zu HTTP:5000:', fallbackUrl);
|
||||
return fallbackUrl;
|
||||
}
|
||||
|
||||
// Für andere Ports, verwende Standard-Backend-Port
|
||||
const defaultPort = currentProtocol === 'https:' ? '8443' : '5000';
|
||||
const fallbackUrl = `${currentProtocol}//${currentHost}:${defaultPort}`;
|
||||
console.log('🔄 Standard-Fallback:', fallbackUrl);
|
||||
// Für alle anderen Fälle, verwende HTTPS auf Port 443
|
||||
const fallbackUrl = `https://${currentHost}`;
|
||||
console.log('🔄 Fallback zu HTTPS:443:', fallbackUrl);
|
||||
|
||||
return fallbackUrl;
|
||||
}
|
||||
|
@@ -12,34 +12,20 @@ let csrfToken;
|
||||
// Dynamische API-Base-URL-Erkennung
|
||||
function detectApiBaseUrl() {
|
||||
const currentHost = window.location.hostname;
|
||||
const currentPort = window.location.port;
|
||||
const currentProtocol = window.location.protocol;
|
||||
const currentPort = window.location.port;
|
||||
|
||||
console.log('🔍 Admin API URL-Informationen:', {
|
||||
host: currentHost,
|
||||
port: currentPort,
|
||||
protocol: currentProtocol,
|
||||
fullUrl: window.location.href
|
||||
});
|
||||
console.log('🔍 Admin API URL Detection:', { currentHost, currentProtocol, currentPort });
|
||||
|
||||
// Wenn wir bereits auf dem richtigen Port sind, verwende relative URLs
|
||||
if (currentPort === '5000' || !currentPort) {
|
||||
console.log('✅ Verwende relative URLs (gleicher Port oder Standard)');
|
||||
if (currentPort === '443' || !currentPort) {
|
||||
console.log('✅ Verwende relative URLs (HTTPS Port 443)');
|
||||
return '';
|
||||
}
|
||||
|
||||
// Wenn wir auf 8443 sind, versuche 5000 (häufiger Fall)
|
||||
if (currentPort === '8443') {
|
||||
const fallbackUrl = `http://${currentHost}:5000`;
|
||||
console.log('🔄 Admin Fallback von HTTPS:8443 zu HTTP:5000:', fallbackUrl);
|
||||
return fallbackUrl;
|
||||
}
|
||||
|
||||
// Für andere Ports, verwende Standard-Backend-Port
|
||||
const defaultPort = currentProtocol === 'https:' ? '8443' : '5000';
|
||||
const fallbackUrl = `${currentProtocol}//${currentHost}:${defaultPort}`;
|
||||
console.log('🔄 Admin Standard-Fallback:', fallbackUrl);
|
||||
|
||||
// Für alle anderen Fälle, verwende HTTPS auf Port 443
|
||||
const fallbackUrl = `https://${currentHost}`;
|
||||
console.log('🔄 Admin Fallback zu HTTPS:443:', fallbackUrl);
|
||||
return fallbackUrl;
|
||||
}
|
||||
|
||||
|
30
backend/myp.service
Normal file
30
backend/myp.service
Normal file
@@ -0,0 +1,30 @@
|
||||
[Unit]
|
||||
Description=MYP Reservation Platform Backend
|
||||
After=network.target
|
||||
Wants=network.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=user
|
||||
Group=user
|
||||
WorkingDirectory=/home/user/Projektarbeit-MYP/backend/app
|
||||
Environment=PYTHONPATH=/home/user/Projektarbeit-MYP/backend/app
|
||||
Environment=FLASK_ENV=production
|
||||
Environment=FLASK_APP=app.py
|
||||
ExecStart=/home/user/Projektarbeit-MYP/backend/venv/bin/python3 app.py --host 0.0.0.0 --port 443 --cert certs/backend.crt --key certs/backend.key
|
||||
Restart=always
|
||||
RestartSec=10
|
||||
StandardOutput=journal
|
||||
StandardError=journal
|
||||
SyslogIdentifier=myp-backend
|
||||
|
||||
# Security settings
|
||||
NoNewPrivileges=true
|
||||
PrivateTmp=true
|
||||
ProtectSystem=strict
|
||||
ProtectHome=true
|
||||
ReadWritePaths=/home/user/Projektarbeit-MYP/backend/app/logs
|
||||
ReadWritePaths=/home/user/Projektarbeit-MYP/backend/app/database
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
Reference in New Issue
Block a user