Integrate Cloudflare tunnel support in web UI

linuztx committed Nov 10, 2024 at 14:54 UTC cca85d7f5da336d6fdc185cc247741a113e25f74
1 file changed +25 -2
run_ui.py
+25 -2
@@ -14,6 +14,7 @@ from python.helpers.print_style import PrintStyle
14 from python.helpers.dotenv import load_dotenv
15 from python.helpers import persist_chat, settings
16 from werkzeug.utils import secure_filename
17 +from python.helpers.cloudflare_tunnel import CloudflareTunnel
18
19
20 # initialize the internal Flask server
@@ -465,10 +466,32 @@ def run():
466 def log_request(self, code="-", size="-"):
467 pass # Override to suppress request logging
468
468 - # run the server on port from .env
469 + # Get configuration from environment
470 port = int(os.environ.get("WEB_UI_PORT", 0)) or None
470 - app.run(request_handler=NoRequestLoggingWSGIRequestHandler, port=port)
471 + host = os.environ.get("WEB_UI_HOST") or None
472 + use_cloudflare = os.environ.get("USE_CLOUDFLARE", "false").lower() == "true"
473 +
474 + # Initialize and start Cloudflare tunnel if enabled
475 + tunnel = None
476 + if use_cloudflare and port:
477 + try:
478 + tunnel = CloudflareTunnel(port)
479 + tunnel.start()
480 + except Exception as e:
481 + print(f"Failed to start Cloudflare tunnel: {e}")
482 + print("Continuing without tunnel...")
483
484 + try:
485 + # Run Flask app
486 + app.run(
487 + request_handler=NoRequestLoggingWSGIRequestHandler,
488 + port=port,
489 + host=host
490 + )
491 + finally:
492 + # Clean up tunnel if it was started
493 + if tunnel:
494 + tunnel.stop()
495
496 # run the internal server
497 if __name__ == "__main__":