fix: WebSocket-URL in Browser nutzt echte IP statt 0.0.0.0
This commit is contained in:
46
serve_tui.py
46
serve_tui.py
@@ -4,10 +4,16 @@ Startet einen Web-Server, der die TUI pro Browser-Verbindung als Subprocess ausf
|
|||||||
Voraussetzung: MCM API-Server muss bereits laufen (python main_api_only.py).
|
Voraussetzung: MCM API-Server muss bereits laufen (python main_api_only.py).
|
||||||
|
|
||||||
Verwendung:
|
Verwendung:
|
||||||
python serve_tui.py [--host 0.0.0.0] [--port 8001]
|
# Lokal:
|
||||||
|
python serve_tui.py
|
||||||
|
|
||||||
|
# Raspberry Pi / entfernter Rechner:
|
||||||
|
python serve_tui.py --host 0.0.0.0 --public-host 192.168.1.100 --port 8001
|
||||||
|
# Browser: http://192.168.1.100:8001
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import asyncio
|
import asyncio
|
||||||
|
import socket
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
from textual_serve.server import Server
|
from textual_serve.server import Server
|
||||||
@@ -15,25 +21,51 @@ from textual_serve.server import Server
|
|||||||
from config import settings
|
from config import settings
|
||||||
|
|
||||||
|
|
||||||
|
def _local_ip() -> str:
|
||||||
|
"""Ermittelt die lokale IP-Adresse (für den public_url-Fallback)."""
|
||||||
|
try:
|
||||||
|
with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as s:
|
||||||
|
s.connect(("8.8.8.8", 80))
|
||||||
|
return s.getsockname()[0]
|
||||||
|
except Exception:
|
||||||
|
return "localhost"
|
||||||
|
|
||||||
|
|
||||||
def main() -> None:
|
def main() -> None:
|
||||||
import argparse
|
import argparse
|
||||||
|
|
||||||
parser = argparse.ArgumentParser(description="MCM TUI Web-Server")
|
parser = argparse.ArgumentParser(description="MCM TUI Web-Server")
|
||||||
parser.add_argument("--host", default="0.0.0.0", help="Host (default: 0.0.0.0)")
|
parser.add_argument("--host", default="0.0.0.0", help="Bind-Adresse (default: 0.0.0.0)")
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
"--port", type=int, default=settings.web_port, help=f"Port (default: {settings.web_port})"
|
"--port", type=int, default=settings.web_port,
|
||||||
|
help=f"Port (default: {settings.web_port})"
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"--public-host", default=None,
|
||||||
|
help="Öffentlicher Hostname/IP für WebSocket-URL (default: automatisch ermittelt)"
|
||||||
)
|
)
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
|
|
||||||
# Pfad zum Python-Interpreter im venv, damit alle Pakete verfügbar sind
|
# Öffentliche URL für die WebSocket-Verbindung im Browser
|
||||||
|
public_host = args.public_host or (
|
||||||
|
"localhost" if args.host in ("localhost", "127.0.0.1") else _local_ip()
|
||||||
|
)
|
||||||
|
public_url = f"http://{public_host}:{args.port}"
|
||||||
|
|
||||||
python = sys.executable
|
python = sys.executable
|
||||||
command = f"{python} tui_standalone.py"
|
command = f"{python} tui_standalone.py"
|
||||||
|
|
||||||
print(f"MCM TUI Web-Server startet auf http://{args.host}:{args.port}")
|
print(f"MCM TUI Web-Server lauscht auf {args.host}:{args.port}")
|
||||||
print(f"Subprocess-Befehl: {command}")
|
print(f"Browser-URL: {public_url}")
|
||||||
print("Ctrl+C zum Beenden.")
|
print("Ctrl+C zum Beenden.")
|
||||||
|
|
||||||
server = Server(command=command, host=args.host, port=args.port, title="MCM – MultiCustomerMessenger")
|
server = Server(
|
||||||
|
command=command,
|
||||||
|
host=args.host,
|
||||||
|
port=args.port,
|
||||||
|
title="MCM – MultiCustomerMessenger",
|
||||||
|
public_url=public_url,
|
||||||
|
)
|
||||||
asyncio.run(server.serve())
|
asyncio.run(server.serve())
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user