03075f1ef1
Closes TG-4 Co-authored-by: Cursor <cursoragent@cursor.com>
61 lines
2.8 KiB
Python
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)
|