218 lines
6.4 KiB
Python
218 lines
6.4 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
Production-Startskript für Mercedes-Benz TBA Marienfelde
|
|
MYP (Mercedes-Benz Your Printer) System - Air-Gapped Production Environment
|
|
|
|
Dieses Skript startet das System im Production-Modus mit allen
|
|
erforderlichen Sicherheits- und Performance-Optimierungen.
|
|
|
|
Verfügbare Modi:
|
|
- production: Mercedes-Benz TBA Air-Gapped (optimiert + sicher)
|
|
- development: Lokale Entwicklung (debug + flexibel)
|
|
|
|
Verwendung:
|
|
python start_production.py
|
|
|
|
Umgebungsvariablen:
|
|
FLASK_ENV=production
|
|
USE_PRODUCTION_CONFIG=true
|
|
MERCEDES_ENVIRONMENT=production
|
|
AIR_GAPPED_MODE=true
|
|
"""
|
|
|
|
import os
|
|
import sys
|
|
import logging
|
|
from datetime import datetime
|
|
|
|
# Production-Environment setzen
|
|
os.environ['FLASK_ENV'] = 'production'
|
|
os.environ['USE_PRODUCTION_CONFIG'] = 'true'
|
|
os.environ['MERCEDES_ENVIRONMENT'] = 'production'
|
|
os.environ['AIR_GAPPED_MODE'] = 'true'
|
|
|
|
# SSL für Production
|
|
os.environ['FLASK_SSL_REQUIRED'] = 'true'
|
|
|
|
# Logging-Level
|
|
os.environ['LOG_LEVEL'] = 'INFO'
|
|
|
|
# Performance-Optimierungen
|
|
os.environ['PYTHONOPTIMIZE'] = '1'
|
|
os.environ['PYTHONDONTWRITEBYTECODE'] = '1'
|
|
|
|
def print_production_banner():
|
|
"""Zeigt den Production-Start-Banner"""
|
|
banner = f"""
|
|
{'='*80}
|
|
🏢 MERCEDES-BENZ TBA MARIENFELDE - MYP PRODUCTION SYSTEM
|
|
{'='*80}
|
|
|
|
🚀 Environment: Production Air-Gapped
|
|
🔒 Security: Maximum (SSL + Security Headers + CSRF)
|
|
🌐 Network: Air-Gapped (Offline-Mode)
|
|
⚡ Performance: Fully Optimized (Cache + Minified Assets)
|
|
📊 Monitoring: Production-Grade Health Checks
|
|
🔍 Audit-Logging: Mercedes-Benz Compliance Mode
|
|
🎯 Modi: Nur Production + Development (konsolidiert)
|
|
📅 Start-Zeit: {datetime.now().strftime('%d.%m.%Y %H:%M:%S')}
|
|
|
|
{'='*80}
|
|
"""
|
|
print(banner)
|
|
|
|
def check_production_requirements():
|
|
"""Prüft Production-Voraussetzungen"""
|
|
print("🔍 Prüfe Production-Voraussetzungen...")
|
|
|
|
requirements = []
|
|
|
|
# Python-Version prüfen
|
|
if sys.version_info < (3, 8):
|
|
requirements.append("❌ Python 3.8+ erforderlich")
|
|
else:
|
|
requirements.append("✅ Python-Version OK")
|
|
|
|
# Erforderliche Dateien prüfen
|
|
required_files = [
|
|
'app.py',
|
|
'models.py',
|
|
'utils/settings.py',
|
|
'requirements.txt'
|
|
]
|
|
|
|
for file in required_files:
|
|
if os.path.exists(file):
|
|
requirements.append(f"✅ {file}")
|
|
else:
|
|
requirements.append(f"❌ {file} fehlt")
|
|
|
|
# Konsolidierte Modi-Konfiguration prüfen
|
|
try:
|
|
from app import ProductionConfig, DevelopmentConfig
|
|
requirements.append("✅ Konsolidierte Modi-Konfiguration verfügbar")
|
|
requirements.append(f" • ProductionConfig: Optimiert + Sicher")
|
|
requirements.append(f" • DevelopmentConfig: Debug + Flexibel")
|
|
except ImportError as e:
|
|
requirements.append(f"❌ Modi-Konfiguration fehlt: {e}")
|
|
|
|
# SSL-Zertifikate prüfen (optional)
|
|
ssl_files = [
|
|
'ssl/server.crt',
|
|
'ssl/server.key',
|
|
'certs/mercedes/cert.pem'
|
|
]
|
|
|
|
ssl_available = any(os.path.exists(f) for f in ssl_files)
|
|
if ssl_available:
|
|
requirements.append("✅ SSL-Zertifikate verfügbar")
|
|
else:
|
|
requirements.append("⚠️ SSL-Zertifikate nicht gefunden (HTTP-Mode)")
|
|
|
|
# Datenbank-Verzeichnis prüfen
|
|
if os.path.exists('instance'):
|
|
requirements.append("✅ Datenbank-Verzeichnis")
|
|
else:
|
|
requirements.append("❌ Instance-Verzeichnis fehlt")
|
|
os.makedirs('instance', exist_ok=True)
|
|
requirements.append("✅ Instance-Verzeichnis erstellt")
|
|
|
|
for req in requirements:
|
|
print(f" {req}")
|
|
|
|
# Kritische Fehler prüfen
|
|
critical_errors = [r for r in requirements if r.startswith("❌")]
|
|
if critical_errors:
|
|
print("\n❌ KRITISCHE FEHLER GEFUNDEN:")
|
|
for error in critical_errors:
|
|
print(f" {error}")
|
|
print("\n🛑 Production-Start abgebrochen!")
|
|
sys.exit(1)
|
|
|
|
print("✅ Alle Voraussetzungen erfüllt\n")
|
|
|
|
def set_production_optimizations():
|
|
"""Setzt Production-Optimierungen"""
|
|
print("⚡ Aktiviere Production-Optimierungen...")
|
|
|
|
# Memory-Optimierungen
|
|
os.environ['MALLOC_TRIM_THRESHOLD'] = '100000'
|
|
|
|
# Flask-Optimierungen
|
|
os.environ['FLASK_SKIP_DOTENV'] = '1'
|
|
|
|
# SQLite-Optimierungen für Air-Gapped
|
|
os.environ['SQLITE_SYNCHRONOUS'] = 'NORMAL'
|
|
os.environ['SQLITE_CACHE_SIZE'] = '10000'
|
|
|
|
# Asset-Optimierungen (konsolidiert)
|
|
os.environ['USE_MINIFIED_ASSETS'] = 'true'
|
|
os.environ['DISABLE_ANIMATIONS'] = 'true'
|
|
os.environ['LIMIT_GLASSMORPHISM'] = 'true'
|
|
|
|
print(" ✅ Memory-Optimierungen aktiviert")
|
|
print(" ✅ Flask-Optimierungen aktiviert")
|
|
print(" ✅ Datenbank-Optimierungen aktiviert")
|
|
print(" ✅ Asset-Optimierungen aktiviert (konsolidiert)")
|
|
print()
|
|
|
|
def setup_security():
|
|
"""Konfiguriert Production-Sicherheit"""
|
|
print("🔒 Konfiguriere Production-Sicherheit...")
|
|
|
|
# Security Headers
|
|
os.environ['FORCE_HTTPS'] = 'true'
|
|
os.environ['HSTS_MAX_AGE'] = '31536000'
|
|
|
|
# Session-Sicherheit
|
|
os.environ['SESSION_SECURE'] = 'true'
|
|
os.environ['SESSION_HTTPONLY'] = 'true'
|
|
os.environ['SESSION_SAMESITE'] = 'Strict'
|
|
|
|
# CSRF-Schutz
|
|
os.environ['CSRF_TIME_LIMIT'] = '3600'
|
|
|
|
# Mercedes-Benz Compliance
|
|
os.environ['COMPLIANCE_MODE'] = 'true'
|
|
os.environ['AUDIT_LOGGING'] = 'true'
|
|
|
|
print(" ✅ Security Headers konfiguriert")
|
|
print(" ✅ Session-Sicherheit aktiviert")
|
|
print(" ✅ CSRF-Schutz aktiviert")
|
|
print(" ✅ Mercedes-Benz Compliance aktiviert")
|
|
print()
|
|
|
|
def start_application():
|
|
"""Startet die Hauptanwendung"""
|
|
print("🚀 Starte MYP Production System (Konsolidierte Modi)...\n")
|
|
|
|
try:
|
|
# app.py importieren und starten
|
|
from app import main
|
|
main()
|
|
|
|
except KeyboardInterrupt:
|
|
print("\n🛑 Production-System durch Benutzer gestoppt")
|
|
except Exception as e:
|
|
print(f"\n❌ KRITISCHER FEHLER: {str(e)}")
|
|
sys.exit(1)
|
|
|
|
def main():
|
|
"""Haupt-Production-Start-Funktion"""
|
|
# Banner anzeigen
|
|
print_production_banner()
|
|
|
|
# Voraussetzungen prüfen
|
|
check_production_requirements()
|
|
|
|
# Optimierungen setzen
|
|
set_production_optimizations()
|
|
|
|
# Sicherheit konfigurieren
|
|
setup_security()
|
|
|
|
# Anwendung starten
|
|
start_application()
|
|
|
|
if __name__ == "__main__":
|
|
main() |