import os import threading from urllib.request import urlopen from urllib.error import URLError from routes import app, AIS_HUB_URL from ssl_utils import get_ssl_context, run_http_redirect, _get_local_ips def _check_ais_hub(): """Однократная проверка доступности ais_hub на старте (не критично).""" try: resp = urlopen(f"{AIS_HUB_URL}/api/v1/health", timeout=2.0) if getattr(resp, "status", 200) == 200: print(f"[ais_hub] OK: {AIS_HUB_URL}") return print(f"[ais_hub] unexpected status {resp.status} from {AIS_HUB_URL}") except URLError as e: print(f"[ais_hub] WARNING: {AIS_HUB_URL} недоступен ({e.reason}). " f"AIS-данные и /ws не будут работать, пока ais_hub не поднят.") except Exception as e: print(f"[ais_hub] WARNING: проверка {AIS_HUB_URL} не удалась: {e}") if __name__ == "__main__": _check_ais_hub() # Геолокация в браузере (телефон) требует secure context (HTTPS или localhost). # Поэтому HTTPS можно включать/выключать флагом окружения. use_https = os.environ.get("AISMAP_HTTPS", "1").strip().lower() not in ("0", "false", "no", "off") if use_https: ssl_ctx = get_ssl_context() else: ssl_ctx = None if ssl_ctx: https_port = int(os.environ.get("AISMAP_HTTPS_PORT", "443")) enable_redirect = os.environ.get("AISMAP_HTTP_REDIRECT", "1").strip().lower() not in ("0", "false", "no", "off") if enable_redirect: redir_thread = threading.Thread(target=run_http_redirect, args=(https_port,), daemon=True) redir_thread.start() local_ips = _get_local_ips() print(f"[HTTPS] Сервер запускается на порту {https_port}") for ip in local_ips: port_suffix = f":{https_port}" if https_port != 443 else "" print(f"[HTTPS] Карта: https://{ip}{port_suffix}/") print(f"[HTTPS] Сертификат: https://{ip}{port_suffix}/cert") print("[HTTPS] Чтобы убрать предупреждение — откройте /cert и установите CA-сертификат") app.run(host="0.0.0.0", port=https_port, debug=True, use_reloader=False, threaded=True, ssl_context=ssl_ctx) else: print("[HTTP] Запуск без HTTPS (геолокация телефона в браузере работать не будет)") local_ips = _get_local_ips() for ip in local_ips: print(f"[HTTP] Карта: http://{ip}/") app.run(host="0.0.0.0", port=80, debug=True, use_reloader=False, threaded=True)