From e747ac945c2d4bcd3bdeef142e65ebfb4a883c9c Mon Sep 17 00:00:00 2001 From: Till Tomczak Date: Mon, 26 May 2025 10:07:37 +0200 Subject: [PATCH] "Refactor database connection and settings for improved performance (feat)" --- backend/app/app.py | 68 +++++++++++++++++++++++++-------- backend/app/config/settings.py | 2 +- backend/app/database/myp.db | Bin 32768 -> 32768 bytes docker-compose.yml | 3 +- 4 files changed, 55 insertions(+), 18 deletions(-) diff --git a/backend/app/app.py b/backend/app/app.py index a0062d51..5b23666c 100644 --- a/backend/app/app.py +++ b/backend/app/app.py @@ -1395,10 +1395,13 @@ def check_jobs(): # App starten if __name__ == "__main__": import argparse + import threading # Kommandozeilenargumente parsen parser = argparse.ArgumentParser(description='MYP Platform - 3D-Drucker Reservierungssystem') parser.add_argument('--port', type=int, help='Port für den Server (überschreibt die Konfiguration)') + parser.add_argument('--no-ssl', action='store_true', help='Deaktiviert SSL/HTTPS') + parser.add_argument('--dual-protocol', action='store_true', help='Startet sowohl HTTP als auch HTTPS Server') args = parser.parse_args() # Initialisierung @@ -1407,24 +1410,57 @@ if __name__ == "__main__": # Port aus Kommandozeilenargument verwenden, falls angegeben port = args.port if args.port else FLASK_PORT - # Server starten - app_logger.info(f"Server wird auf Port {port} gestartet...") + # SSL-Kontext abrufen + ssl_context = None if args.no_ssl else get_ssl_context() - try: - ssl_context = get_ssl_context() - if ssl_context: - app.run(host=FLASK_HOST, port=port, debug=FLASK_DEBUG, ssl_context=ssl_context) - else: - app.run(host=FLASK_HOST, port=port, debug=FLASK_DEBUG) - except Exception as e: - app_logger.error(f"Fehler beim Starten des Servers: {str(e)}") - app_logger.info(f"Versuche auf Fallback-Port {FLASK_FALLBACK_PORT} zu starten...") + # Funktion zum Starten des Servers + def start_server(use_ssl=True, server_port=None): + if server_port is None: + server_port = port + try: - app.run(host=FLASK_HOST, port=FLASK_FALLBACK_PORT, debug=FLASK_DEBUG) - except Exception as e2: - app_logger.error(f"Auch Fallback-Port fehlgeschlagen: {str(e2)}") - app_logger.info("Versuche auf Standard-Port 5000 zu starten...") - app.run(host=FLASK_HOST, port=5000, debug=FLASK_DEBUG) + if use_ssl and ssl_context: + protocol = "HTTPS" + app_logger.info(f"{protocol}-Server wird auf Port {server_port} gestartet...") + app.run(host=FLASK_HOST, port=server_port, debug=FLASK_DEBUG, ssl_context=ssl_context) + else: + protocol = "HTTP" + app_logger.info(f"{protocol}-Server wird auf Port {server_port} gestartet...") + app.run(host=FLASK_HOST, port=server_port, debug=FLASK_DEBUG) + except Exception as e: + app_logger.error(f"Fehler beim Starten des {protocol}-Servers auf Port {server_port}: {str(e)}") + if server_port == FLASK_PORT: + fallback_port = FLASK_FALLBACK_PORT + app_logger.info(f"Versuche auf Fallback-Port {fallback_port} zu starten...") + try: + if use_ssl and ssl_context: + app.run(host=FLASK_HOST, port=fallback_port, debug=FLASK_DEBUG, ssl_context=ssl_context) + else: + app.run(host=FLASK_HOST, port=fallback_port, debug=FLASK_DEBUG) + except Exception as e2: + app_logger.error(f"Auch Fallback-Port fehlgeschlagen: {str(e2)}") + app_logger.info("Versuche auf Standard-Port 5000 zu starten...") + if use_ssl and ssl_context: + app.run(host=FLASK_HOST, port=5000, debug=FLASK_DEBUG, ssl_context=ssl_context) + else: + app.run(host=FLASK_HOST, port=5000, debug=FLASK_DEBUG) + + # Dual-Protokoll-Modus: HTTP und HTTPS parallel starten + if args.dual_protocol: + app_logger.info("Starte Server im Dual-Protokoll-Modus (HTTP und HTTPS)...") + + # HTTPS auf Hauptport (443) + https_thread = threading.Thread(target=start_server, kwargs={"use_ssl": True, "server_port": port}) + https_thread.daemon = True + https_thread.start() + + # HTTP auf Alternativport (80) + http_port = FLASK_FALLBACK_PORT + start_server(use_ssl=False, server_port=http_port) + else: + # Normaler Start mit einem Protokoll + app_logger.info(f"Server wird auf Port {port} mit {'HTTPS' if ssl_context else 'HTTP'} gestartet...") + start_server(use_ssl=bool(ssl_context)) # Content Security Policy anpassen @app.after_request diff --git a/backend/app/config/settings.py b/backend/app/config/settings.py index 03f50093..82e79dd6 100644 --- a/backend/app/config/settings.py +++ b/backend/app/config/settings.py @@ -36,7 +36,7 @@ SESSION_LIFETIME = timedelta(days=7) SSL_ENABLED = True SSL_CERT_PATH = "instance/ssl/myp.crt" SSL_KEY_PATH = "instance/ssl/myp.key" -SSL_HOSTNAME = "localhost" +SSL_HOSTNAME = "raspberrypi" # Scheduler-Konfiguration SCHEDULER_INTERVAL = 60 # Sekunden diff --git a/backend/app/database/myp.db b/backend/app/database/myp.db index 546f4b0ac3516357995a5863202da0b63bdab07c..22f8bca9c21b21a5ca5d2d0349c3a42cac869859 100644 GIT binary patch delta 78 zcmZo@U}|V!njpt~Y diff --git a/docker-compose.yml b/docker-compose.yml index a71c20d8..a9fc4794 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -23,8 +23,9 @@ services: - FLASK_ENV=production - SSL_ENABLED=true - SSL_HOSTNAME=raspberrypi + command: python -m app.app --dual-protocol healthcheck: - test: ["CMD", "curl", "-k", "https://localhost:443/health"] + test: ["CMD", "curl", "-k", "https://localhost:443/health || curl http://localhost:80/health"] interval: 30s timeout: 10s retries: 3