final-cleanup: Produktionsfertige Konfiguration - Alle Ports auf 443 vereinheitlicht, TLS-Zertifikate vorgeneriert, Zentraler Installer erstellt

This commit is contained in:
2025-05-26 22:16:22 +02:00
parent 7aa70cf976
commit f719f74195
40 changed files with 598 additions and 11815 deletions

View File

@@ -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

View File

@@ -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`.

View File

@@ -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;
}

View File

@@ -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;
}