#!/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()