Projektarbeit-MYP/backend/docs/MYP_SYSTEMDOKUMENTATION.md
2025-06-05 01:34:10 +02:00

418 lines
11 KiB
Markdown

# MYP Platform - Systemdokumentation
## Projektübersicht
MYP (Manage Your Printers) ist ein umfassendes 3D-Drucker-Verwaltungssystem für Mercedes-Benz, das für den Betrieb auf Debian/Linux-Systemen (speziell Raspberry Pi) im HTTPS-Kiosk-Modus entwickelt wurde. Das System verwaltet Drucker-Terminplanung, Benutzerauthentifizierung, Job-Warteschlangen und Smart-Plug-Integration mit TP-Link Tapo-Geräten.
## Architektur-Übersicht
### Core-Struktur
Die Anwendung folgt einer Flask-Blueprint-Architektur mit klarer Trennung der Zuständigkeiten:
- **app.py**: Hauptanwendungs-Einstiegspunkt mit HTTPS-Konfiguration und Raspberry Pi-Optimierungen
- **models.py**: SQLAlchemy-Modelle mit SQLite-Optimierung (WAL-Modus, Caching, Performance-Tuning)
- **blueprints/**: Modulare Feature-Implementierungen
- `auth.py`: Authentifizierung und Session-Management
- `admin.py` & `admin_api.py`: Administrative Schnittstellen und APIs
- `printers.py`: Drucker-Verwaltung und Smart-Plug-Integration
- `jobs.py`: Job-Warteschlangen-Management
- `guest.py`: Gastzugang mit OTP-System
- `calendar.py`: Terminplanung mit Konflikt-Management
- `users.py` & `user.py`: Benutzerverwaltung und Profile
### Design-Patterns
#### 1. Datenbank-Sessions
Verwendet Scoped Sessions mit ordnungsgemäßer Bereinigung:
```python
with get_db_session() as session:
# Datenbankoperationen
```
#### 2. Berechtigungssystem
Rollenbasiert mit spezifischen Berechtigungen:
- Decorators: `@login_required`, `@admin_required`, `@permission_required`
- Berechtigungen: `can_manage_printers`, `can_approve_jobs`, etc.
#### 3. Konflikt-Management
Intelligente Drucker-Zuweisung basierend auf:
- Verfügbarkeitsfenstern
- Prioritätsstufen (dringend, hoch, normal, niedrig)
- Job-Dauer-Kompatibilität
- Echtzeit-Konflikterkennung
#### 4. Logging-Strategie
Modulares Logging mit separaten Dateien pro Komponente:
```python
from utils.logging_config import get_logger
logger = get_logger("component_name")
```
## Installation und Setup
### Systemvoraussetzungen
- **Betriebssystem**: Debian/Raspbian (Raspberry Pi OS)
- **Berechtigung**: Root-Zugriff (sudo)
- **Internetverbindung**: Für Paket-Downloads erforderlich
- **Hardware**: Raspberry Pi oder kompatibles Debian-System
### Installationsmodi
#### 1. Abhängigkeiten für manuelles Testen
**Zweck**: System vollständig für manuelle Tests und Entwicklung vorbereiten
**Installation**:
```bash
sudo ./setup.sh
# Option 1 wählen
```
**Umfasst**:
- Python 3 und pip
- Node.js und npm
- SSL-Zertifikate (inkl. Mercedes Corporate)
- Python-Pakete (Flask, SQLAlchemy, etc.)
- npm-Abhängigkeiten
- Anwendungsdeployment nach `/opt/myp`
- SSL-Zertifikat-Generierung
- Minimaler Funktionstest
#### 2. Vollständige Kiosk-Installation mit Remote-Zugang
**Zweck**: Komplette Produktionsinstallation mit automatischem Kiosk-Modus
**Installation**:
```bash
sudo ./setup.sh
# Option 2 wählen
```
**Umfasst**:
- Alle Abhängigkeiten
- Desktop-Environment-Entfernung
- Minimale X11-Umgebung
- SSH-Server (user:raspberry)
- RDP-Server (xrdp) mit TLS (root:744563017196A)
- XFCE Desktop-Umgebung für RDP
- firewalld mit erweiterten Netzwerk-Regeln
- Kiosk-Benutzer-Konfiguration
- Automatischer Login und Kiosk-Start
- Systemd-Services
### Systemd-Services
#### myp-https.service
- **Zweck**: HTTPS-Backend auf Port 443
- **Benutzer**: root (für privilegierten Port)
- **SSL**: Automatische Zertifikat-Generierung
#### myp-kiosk.service
- **Zweck**: Chromium-Browser im Kiosk-Modus
- **Benutzer**: kiosk
- **Features**: Vollbild, SSL-Ignorierung, automatische Auflösungserkennung
#### kiosk-watchdog.service
- **Zweck**: Intelligente Systemüberwachung
- **Funktionen**:
- HTTPS-Backend-Überwachung
- SSL-Zertifikat-Überwachung
- Kiosk-Session-Überwachung
- Speicher-Überwachung
- Automatische Neustarts
#### myp-firewall.service
- **Zweck**: Automatische Firewall-Konfiguration beim Systemstart
- **Zone**: `myp-backend` für Netzwerk 192.168.0.0/24
- **Ports**: 443/tcp (HTTPS), 22/tcp (SSH), 3389/tcp (RDP)
### Verzeichnisstruktur
```
/opt/myp/ # Hauptanwendungsverzeichnis
├── app.py # Flask-Hauptanwendung
├── models.py # Datenbankmodelle
├── blueprints/ # Flask-Blueprints
├── config/ # Konfigurationsdateien
├── database/ # SQLite-Datenbank
├── static/ # Statische Dateien (CSS, JS)
├── templates/ # HTML-Templates
├── uploads/ # Upload-Verzeichnis
├── utils/ # Hilfsfunktionen
├── logs/ # Log-Dateien
└── certs/ # SSL-Zertifikate
└── localhost/ # Localhost-Zertifikate
```
## Konfiguration
### SSL-Zertifikate
**Mercedes Corporate Zertifikate**:
- Automatische Installation aus `certs/mercedes/`
- Unterstützte Formate: .crt, .pem, .cer
- DER-zu-PEM Konvertierung
**Localhost-Zertifikat**:
- Automatische Generierung für HTTPS
- Gültigkeitsdauer: 365 Tage
- Speicherort: `/opt/myp/certs/localhost/`
### Netzwerk-Sicherheit
**IPv6-Deaktivierung**:
- Vollständige Deaktivierung auf Kernel-Ebene
- GRUB-Konfiguration: `ipv6.disable=1`
- Firewall blockiert alle IPv6-Pakete
**Firewall-Konfiguration**:
- Zone: `myp-backend`
- Quell-Netzwerke: 192.168.0.0/16, 127.0.0.1/32
- Erlaubte Ports: 443/tcp, 22/tcp, 3389/tcp
- Automatische Hostname-Integration
**Sicherheitsmaßnahmen**:
- IP-Spoofing-Schutz (Reverse Path Filtering)
- DDoS-Schutz (SYN-Cookies)
- TCP-Optimierungen
- Deaktivierte TCP-Timestamps (Anti-Fingerprinting)
### Remote-Zugang
**SSH-Zugang**:
- Benutzer: `user`
- Passwort: `raspberry`
- Port: 22
**RDP-Zugang**:
- Benutzer: `root`
- Passwort: `744563017196A`
- Port: 3389
- Desktop: XFCE
- Verschlüsselung: TLS 1.2/1.3
## Performance-Optimierungen
### Raspberry Pi-spezifische Optimierungen
1. **Frontend-Optimierungen**:
- Reduzierte Animationen und Glassmorphism-Effekte
- Minifizierte Assets mit gzip-Kompression
- Optimierte SQLite-Einstellungen für SD-Karten
- Speicher-effiziente Session-Behandlung
2. **Caching-Strategie**:
- Statische Datei-Caching (1 Jahr)
- Datenbank-Query-Caching
- Session-basiertes Caching für teure Operationen
3. **Datenbank-Optimierungen**:
- WAL-Modus für gleichzeitigen Zugriff
- Ordnungsgemäße Indizierung auf Fremdschlüsseln
- Connection Pooling mit StaticPool
- Automatische Bereinigung alter Datensätze
## Integration und Schnittstellen
### TP-Link Tapo Smart Plugs
- PyP100-Bibliothek für Gerätesteuerung
- Status-Überwachung und Terminplanung
- Automatisches Energiemanagement
### E-Mail-Benachrichtigungen
- Gastanfrage-Benachrichtigungen
- Job-Abschluss-Alerts
- System-Status-Updates
### Datei-Uploads
- Unterstützung für STL, OBJ, 3MF, AMF, GCODE
- Sichere Dateibehandlung mit Validierung
- Organisierte Speicherung im uploads/-Verzeichnis
## Sicherheit
### Implementierte Maßnahmen
- **SSL/TLS**: Selbstsignierte Zertifikate mit automatischer Generierung
- **CSRF-Schutz**: Global aktiviert mit Flask-WTF
- **Session-Sicherheit**: Sichere Cookies, HTTPOnly, SameSite=Lax
- **Rate Limiting**: Eingebaut für API-Endpunkte
- **Input-Validierung**: WTForms für alle Benutzereingaben
- **Systemd-Härtung**: NoNewPrivileges, ProtectSystem
### Berechtigungssystem
```python
class UserPermission:
can_manage_users = True
can_manage_printers = True
can_approve_jobs = True
can_view_analytics = True
can_manage_system = True
can_access_admin = True
```
## Wartung und Überwachung
### Logging-System
**Log-Verzeichnisse**:
- `/opt/myp/logs/` - Anwendungs-Logs
- `/var/log/myp-install.log` - Installations-Log
- `journalctl -u <service-name>` - Service-Logs
**Komponenten-spezifische Logs**:
- `logs/app/app.log` - Hauptanwendung
- `logs/admin/admin.log` - Admin-Aktivitäten
- `logs/printers/printers.log` - Drucker-Status
- `logs/security/security.log` - Sicherheitsereignisse
### Automatische Wartung
**Tägliche Tasks**:
```bash
# Cache-Bereinigung
POST /api/admin/cache/clear
# Database-Optimierung
sqlite3 database/myp.db "PRAGMA optimize;"
# Log-Rotation
logrotate /etc/logrotate.d/myp-webapp
```
**Wöchentliche Tasks**:
```bash
# Vollständige Database-Wartung
sqlite3 database/myp.db "VACUUM; ANALYZE;"
# Performance-Analyse
curl /api/admin/performance/weekly-report
```
### System-Monitoring
**Watchdog-Funktionen**:
- HTTPS-Backend-Überwachung
- SSL-Zertifikat-Überwachung
- Kiosk-Session-Überwachung
- Speicher-Überwachung mit automatischen Neustarts
**Performance-Metriken**:
```python
def get_performance_metrics():
return {
'system': {
'cpu_usage': psutil.cpu_percent(),
'memory_usage': psutil.virtual_memory().percent,
'disk_usage': psutil.disk_usage('/').percent
},
'database': {
'connection_pool_usage': get_db_pool_usage(),
'slow_queries': get_slow_queries()
}
}
```
## Troubleshooting
### Häufige Probleme
1. **HTTPS-Backend nicht erreichbar**
```bash
sudo systemctl status myp-https
sudo journalctl -u myp-https -f
```
2. **Kiosk-Browser startet nicht**
```bash
sudo systemctl status myp-kiosk
sudo journalctl -u myp-kiosk -f
```
3. **SSL-Zertifikat-Probleme**
```bash
sudo ./setup.sh
# Option 5 für System-Test
```
4. **Firewall-Probleme**
```bash
sudo systemctl status firewalld
sudo firewall-cmd --get-active-zones
sudo firewall-cmd --zone=myp-backend --list-all
```
### Debug-Tools
- **System-Status**: `/api/admin/system/health`
- **Performance-Metriken**: `/api/admin/performance/metrics`
- **Live-Logs**: `tail -f logs/app/app.log`
## Backup und Recovery
### Automatisches Backup
```python
def create_system_backup():
timestamp = datetime.now().strftime('%Y%m%d_%H%M%S')
# Database Backup
shutil.copy('database/myp.db', f'backups/db_{timestamp}.db')
# Config Backup
backup_settings(f'backups/settings_{timestamp}.json')
# Log Backup
compress_logs(f'backups/logs_{timestamp}.tar.gz')
```
### Recovery-Verfahren
```bash
# System-Backup wiederherstellen
sudo ./setup.sh --restore-backup backup_file.zip
# Datenbank-Recovery
sqlite3 database/myp.db ".backup backup_file.db"
# System neu starten
sudo systemctl restart myp-https
```
## Entwicklungsumgebung
### Essential Commands
```bash
# Development
pip install -r requirements.txt --break-system-packages
npm install
npm run build:css
# Run development server
python app.py --debug
# Run production server
sudo python app.py
# Testing
pytest -v --cov=.
flake8 .
black . --check
```
### Neue Features hinzufügen
1. **Neue Blueprint**: Erstellen in `blueprints/`, registrieren in `app.py`
2. **Datenbank-Modell**: Hinzufügen zu `models.py`, Migration erstellen falls nötig
3. **Frontend-Assets**: CSS in `static/css/`, JavaScript in `static/js/`
4. **Logging**: `get_logger("component_name")` für konsistentes Logging
5. **Berechtigungen**: Neue Berechtigungen zum `UserPermission`-Modell hinzufügen
---
**Status**: ✅ Vollständig funktional
**Letzte Aktualisierung**: Januar 2025
**Version**: 3.1.3 - Kiosk-Fix
**Kompatibilität**: Python 3.9+, Flask 3.1+, SQLAlchemy 2.0+