Files
WebAisMap/main.py
T
Grigo 03075f1ef1 Initial import: WebAisMap
Closes TG-4

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-04 07:56:45 +03:00

61 lines
2.8 KiB
Python

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)