Переключение на персональный стенд gigadoc-dnr-sdk.sbermed.ai: хосты через env (FPG_REST_HOST/FPG_WS_HOST/FPG_WS_ORIGIN), client_id по умолчанию client_fpg_front_dnr
This commit is contained in:
1 parent
2293dbb4be
commit
93c9d88897
5 files changed
+31
-23
No files matched your search
@@ -31,7 +31,7 @@ pip install -r requirements.txt
|
|||||||
sudo apt install -y fonts-dejavu
|
sudo apt install -y fonts-dejavu
|
||||||
|
|
||||||
# 4. Секреты SDK ФПГ (обязательно!)
|
# 4. Секреты SDK ФПГ (обязательно!)
|
||||||
export FPG_CLIENT_ID=client_fpg_front
|
export FPG_CLIENT_ID=client_fpg_front_dnr
|
||||||
export FPG_CLIENT_SECRET=ВАШ_СЕКРЕТ
|
export FPG_CLIENT_SECRET=ВАШ_СЕКРЕТ
|
||||||
|
|
||||||
# 5. Запуск (dev-режим, порт 5000)
|
# 5. Запуск (dev-режим, порт 5000)
|
||||||
@@ -50,9 +50,13 @@ python3 -c "from waitress import serve; from app import app; serve(app, host='12
|
|||||||
|
|
||||||
| Переменная | Описание |
|
| Переменная | Описание |
|
||||||
|---|---|
|
|---|---|
|
||||||
| `FPG_CLIENT_ID` | client_id для OAuth SDK ФПГ (по умолчанию `client_fpg_front`) |
|
| `FPG_CLIENT_ID` | client_id для OAuth SDK ФПГ (по умолчанию `client_fpg_front_dnr` — персональный стенд) |
|
||||||
| `FPG_CLIENT_SECRET` | client_secret для OAuth SDK ФПГ (**обязательна**, без неё авторизация не работает) |
|
| `FPG_CLIENT_SECRET` | client_secret для OAuth SDK ФПГ (**обязательна**, без неё авторизация не работает) |
|
||||||
| `CORS_ORIGINS` | (необязательно) список разрешённых Origin для CORS через запятую, например `https://site1.ru,https://site2.ru`. По умолчанию `*` |
|
| `CORS_ORIGINS` | (необязательно) список разрешённых Origin для CORS через запятую, например `https://site1.ru,https://site2.ru`. По умолчанию `*` |
|
||||||
|
| `FPG_OAUTH_URL` | (необязательно) URL OAuth-токена (по умолчанию `https://oauth.sbermed.ai/token`) |
|
||||||
|
| `FPG_REST_HOST` | (необязательно) REST-хост SDK (по умолчанию `gigadoc-dnr-sdk.sbermed.ai` — персональный стенд) |
|
||||||
|
| `FPG_WS_HOST` | (необязательно) WebSocket-хост SDK (по умолчанию `gigadoc-dnr-sdk.sbermed.ai`) |
|
||||||
|
| `FPG_WS_ORIGIN` | (необязательно) Origin для WebSocket (по умолчанию `https://gigadoc-dnr-sdk.sbermed.ai`) |
|
||||||
|
|
||||||
## Развёртывание на сервере
|
## Развёртывание на сервере
|
||||||
|
|
||||||
@@ -79,7 +83,7 @@ Type=simple
|
|||||||
User=apuc
|
User=apuc
|
||||||
WorkingDirectory=/opt/med
|
WorkingDirectory=/opt/med
|
||||||
Environment=PYTHONUNBUFFERED=1
|
Environment=PYTHONUNBUFFERED=1
|
||||||
Environment=FPG_CLIENT_ID=client_fpg_front
|
Environment=FPG_CLIENT_ID=client_fpg_front_dnr
|
||||||
Environment=FPG_CLIENT_SECRET=ВАШ_СЕКРЕТ
|
Environment=FPG_CLIENT_SECRET=ВАШ_СЕКРЕТ
|
||||||
ExecStart=/usr/bin/python3 -c "from waitress import serve; from app import app; serve(app, host='127.0.0.1', port=18018, threads=8)"
|
ExecStart=/usr/bin/python3 -c "from waitress import serve; from app import app; serve(app, host='127.0.0.1', port=18018, threads=8)"
|
||||||
Restart=always
|
Restart=always
|
||||||
@@ -149,7 +153,7 @@ sudo systemctl restart med.service
|
|||||||
|
|
||||||
1. Видео сохраняется в `videos/` (копия записи — доступна для скачивания)
|
1. Видео сохраняется в `videos/` (копия записи — доступна для скачивания)
|
||||||
2. `ffmpeg` извлекает 300 кадров 1280×720 (bt709 + yuv420p — важно для iPhone MOV с P3/HDR)
|
2. `ffmpeg` извлекает 300 кадров 1280×720 (bt709 + yuv420p — важно для iPhone MOV с P3/HDR)
|
||||||
3. OAuth-токен → создание сессии → кадры по WebSocket (`wss://gigadoc-sdk.sbermed.ai:8443`, subprotocol `bearer.<token>`, Origin `https://gigadoc.sbermed.ai`)
|
3. OAuth-токен → создание сессии → кадры по WebSocket (`wss://gigadoc-dnr-sdk.sbermed.ai:8443`, subprotocol `bearer.<token>`, Origin `https://gigadoc-dnr-sdk.sbermed.ai`)
|
||||||
4. Интерпретация JSON SDK → summary/metrics/warnings/advice → сохранение в SQLite
|
4. Интерпретация JSON SDK → summary/metrics/warnings/advice → сохранение в SQLite
|
||||||
|
|
||||||
## Важные нюансы
|
## Важные нюансы
|
||||||
|
|||||||
@@ -33,16 +33,18 @@ import export
|
|||||||
# ─── Конфигурация ─────────────────────────────────────────────
|
# ─── Конфигурация ─────────────────────────────────────────────
|
||||||
# Секреты читаются из переменных окружения (не хранятся в репозитории).
|
# Секреты читаются из переменных окружения (не хранятся в репозитории).
|
||||||
# На сервере задаются в /etc/systemd/system/med.service (Environment=).
|
# На сервере задаются в /etc/systemd/system/med.service (Environment=).
|
||||||
OAUTH_URL = "https://oauth.sbermed.ai/token"
|
# Хосты стенда можно переопределить через env (FPG_REST_HOST и т.д.).
|
||||||
CLIENT_ID = os.environ.get("FPG_CLIENT_ID", "client_fpg_front")
|
OAUTH_URL = os.environ.get("FPG_OAUTH_URL", "https://oauth.sbermed.ai/token")
|
||||||
|
CLIENT_ID = os.environ.get("FPG_CLIENT_ID", "client_fpg_front_dnr")
|
||||||
CLIENT_SECRET = os.environ.get("FPG_CLIENT_SECRET", "")
|
CLIENT_SECRET = os.environ.get("FPG_CLIENT_SECRET", "")
|
||||||
|
|
||||||
REST_HOST = "gigadoc-sdk.sbermed.ai"
|
REST_HOST = os.environ.get("FPG_REST_HOST", "gigadoc-dnr-sdk.sbermed.ai")
|
||||||
REST_BASE = f"https://{REST_HOST}"
|
REST_BASE = f"https://{REST_HOST}"
|
||||||
|
|
||||||
WS_HOST = "gigadoc-sdk.sbermed.ai"
|
WS_HOST = os.environ.get("FPG_WS_HOST", "gigadoc-dnr-sdk.sbermed.ai")
|
||||||
WS_PORT = 8443
|
WS_PORT = 8443
|
||||||
WS_PATH_TEMPLATE = "/api/v2/ws/predict/{uid}/image"
|
WS_PATH_TEMPLATE = "/api/v2/ws/predict/{uid}/image"
|
||||||
|
WS_ORIGIN = os.environ.get("FPG_WS_ORIGIN", "https://gigadoc-dnr-sdk.sbermed.ai")
|
||||||
|
|
||||||
DEVICE_ID = "web_prod"
|
DEVICE_ID = "web_prod"
|
||||||
FORM_FACTOR = "web_prod"
|
FORM_FACTOR = "web_prod"
|
||||||
@@ -159,7 +161,7 @@ async def ws_stream(token: str, uid: str, frame_files: list, fps: float = FPS):
|
|||||||
uri,
|
uri,
|
||||||
open_timeout=10,
|
open_timeout=10,
|
||||||
subprotocols=[f"bearer.{token}"],
|
subprotocols=[f"bearer.{token}"],
|
||||||
origin="https://gigadoc.sbermed.ai",
|
origin=WS_ORIGIN,
|
||||||
extra_headers={
|
extra_headers={
|
||||||
"Cache-Control": "no-cache",
|
"Cache-Control": "no-cache",
|
||||||
"Pragma": "no-cache",
|
"Pragma": "no-cache",
|
||||||
|
|||||||
+7
-6
@@ -27,17 +27,18 @@ from pathlib import Path
|
|||||||
import requests
|
import requests
|
||||||
|
|
||||||
# ─── Конфигурация ─────────────────────────────────────────────
|
# ─── Конфигурация ─────────────────────────────────────────────
|
||||||
OAUTH_URL = "https://oauth.sbermed.ai/token"
|
OAUTH_URL = os.environ.get("FPG_OAUTH_URL", "https://oauth.sbermed.ai/token")
|
||||||
CLIENT_ID = "client_fpg_front"
|
CLIENT_ID = os.environ.get("FPG_CLIENT_ID", "client_fpg_front_dnr")
|
||||||
CLIENT_SECRET = os.environ.get("FPG_CLIENT_SECRET", "")
|
CLIENT_SECRET = os.environ.get("FPG_CLIENT_SECRET", "")
|
||||||
|
|
||||||
REST_HOST = "gigadoc-sdk.sbermed.ai"
|
REST_HOST = os.environ.get("FPG_REST_HOST", "gigadoc-dnr-sdk.sbermed.ai")
|
||||||
REST_BASE = f"https://{REST_HOST}"
|
REST_BASE = f"https://{REST_HOST}"
|
||||||
|
|
||||||
# WebSocket (рабочий хост подтверждён: gigadoc-sdk.sbermed.ai:8443)
|
# WebSocket (рабочий хост подтверждён: gigadoc-dnr-sdk.sbermed.ai:8443)
|
||||||
WS_HOST = "gigadoc-sdk.sbermed.ai"
|
WS_HOST = os.environ.get("FPG_WS_HOST", "gigadoc-dnr-sdk.sbermed.ai")
|
||||||
WS_PORT = 8443
|
WS_PORT = 8443
|
||||||
WS_PATH_TEMPLATE = "/api/v2/ws/predict/{uid}/image"
|
WS_PATH_TEMPLATE = "/api/v2/ws/predict/{uid}/image"
|
||||||
|
WS_ORIGIN = os.environ.get("FPG_WS_ORIGIN", "https://gigadoc-dnr-sdk.sbermed.ai")
|
||||||
|
|
||||||
DEVICE_ID = "web_prod"
|
DEVICE_ID = "web_prod"
|
||||||
FORM_FACTOR = "web_prod"
|
FORM_FACTOR = "web_prod"
|
||||||
@@ -263,7 +264,7 @@ async def ws_scan(token: str, uid: str, ws_host: str, ws_port: int, image_dir: s
|
|||||||
uri,
|
uri,
|
||||||
open_timeout=10,
|
open_timeout=10,
|
||||||
subprotocols=[f"bearer.{token}"],
|
subprotocols=[f"bearer.{token}"],
|
||||||
origin="https://gigadoc.sbermed.ai",
|
origin=WS_ORIGIN,
|
||||||
extra_headers={
|
extra_headers={
|
||||||
"Cache-Control": "no-cache",
|
"Cache-Control": "no-cache",
|
||||||
"Pragma": "no-cache",
|
"Pragma": "no-cache",
|
||||||
|
|||||||
+6
-5
@@ -19,16 +19,17 @@ import requests
|
|||||||
import websockets
|
import websockets
|
||||||
|
|
||||||
# ─── Конфигурация ─────────────────────────────────────────────
|
# ─── Конфигурация ─────────────────────────────────────────────
|
||||||
OAUTH_URL = "https://oauth.sbermed.ai/token"
|
OAUTH_URL = os.environ.get("FPG_OAUTH_URL", "https://oauth.sbermed.ai/token")
|
||||||
CLIENT_ID = "client_fpg_front"
|
CLIENT_ID = os.environ.get("FPG_CLIENT_ID", "client_fpg_front_dnr")
|
||||||
CLIENT_SECRET = os.environ.get("FPG_CLIENT_SECRET", "")
|
CLIENT_SECRET = os.environ.get("FPG_CLIENT_SECRET", "")
|
||||||
|
|
||||||
REST_HOST = "gigadoc-sdk.sbermed.ai"
|
REST_HOST = os.environ.get("FPG_REST_HOST", "gigadoc-dnr-sdk.sbermed.ai")
|
||||||
REST_BASE = f"https://{REST_HOST}"
|
REST_BASE = f"https://{REST_HOST}"
|
||||||
|
|
||||||
WS_HOST = "gigadoc-sdk.sbermed.ai"
|
WS_HOST = os.environ.get("FPG_WS_HOST", "gigadoc-dnr-sdk.sbermed.ai")
|
||||||
WS_PORT = 8443
|
WS_PORT = 8443
|
||||||
WS_PATH_TEMPLATE = "/api/v2/ws/predict/{uid}/image"
|
WS_PATH_TEMPLATE = "/api/v2/ws/predict/{uid}/image"
|
||||||
|
WS_ORIGIN = os.environ.get("FPG_WS_ORIGIN", "https://gigadoc-dnr-sdk.sbermed.ai")
|
||||||
|
|
||||||
DEVICE_ID = "web_prod"
|
DEVICE_ID = "web_prod"
|
||||||
FORM_FACTOR = "web_prod"
|
FORM_FACTOR = "web_prod"
|
||||||
@@ -155,7 +156,7 @@ async def ws_stream(token: str, uid: str, image_path: str, frames: int, fps: flo
|
|||||||
uri,
|
uri,
|
||||||
open_timeout=10,
|
open_timeout=10,
|
||||||
subprotocols=[f"bearer.{token}"],
|
subprotocols=[f"bearer.{token}"],
|
||||||
origin="https://gigadoc.sbermed.ai",
|
origin=WS_ORIGIN,
|
||||||
extra_headers={
|
extra_headers={
|
||||||
"Cache-Control": "no-cache",
|
"Cache-Control": "no-cache",
|
||||||
"Pragma": "no-cache",
|
"Pragma": "no-cache",
|
||||||
|
|||||||
+3
-3
@@ -66,7 +66,7 @@ def parse_args():
|
|||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
"--sdk-host",
|
"--sdk-host",
|
||||||
required=True,
|
required=True,
|
||||||
help="SDK hostname, например gigadoc-sdk.sbermed.ai",
|
help="SDK hostname, например gigadoc-dnr-sdk.sbermed.ai",
|
||||||
)
|
)
|
||||||
|
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
@@ -94,10 +94,10 @@ def parse_args():
|
|||||||
|
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
"--origin",
|
"--origin",
|
||||||
default="https://gigadoc.sbermed.ai",
|
default="https://gigadoc-dnr-sdk.sbermed.ai",
|
||||||
help=(
|
help=(
|
||||||
"Origin для WebSocket "
|
"Origin для WebSocket "
|
||||||
"(default: https://gigadoc.sbermed.ai)"
|
"(default: https://gigadoc-dnr-sdk.sbermed.ai)"
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user