From 4e998d789b2bb18b948a832b2ab95147400a51bf Mon Sep 17 00:00:00 2001 From: nineap Date: Fri, 10 Jul 2026 18:18:47 +0700 Subject: [PATCH] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=B8=D1=82?= =?UTF-8?q?=D1=8C=20=D0=BA=D0=BE=D0=BC=D0=BC=D0=B5=D0=BD=D1=82=D0=B0=D1=80?= =?UTF-8?q?=D0=B8=D0=B8:=20Grafana=20=D1=82=D0=B5=D0=BF=D0=B5=D1=80=D1=8C?= =?UTF-8?q?=20=D0=B7=D0=B0=20nginx+Basic=20Auth,=20=D0=BD=D0=B5=20Caddy?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Auth-гейт перед Grafana на VPS с данными переехал с Caddy forward_auth (зависел от задеплоенного бэкенда, которого ещё не было) на system nginx с HTTP Basic Auth прямо на том же VPS — не зависит ни от чего. observability_router/staff/controller.rs оставлен неиспользуемым на случай, если позже понадобится реальный SSO поверх basic-auth. --- src/api.rs | 4 ++-- src/modules/staff/controller.rs | 9 ++++++--- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/api.rs b/src/api.rs index a90bacb..a6c23d8 100644 --- a/src/api.rs +++ b/src/api.rs @@ -209,8 +209,8 @@ pub fn create_router(state: ApiState, frontend_dir: &str) -> Router { /// Публичная (без auth_guard) рантайм-конфигурация для статического SPA — /// см. `ApiState::bot_username` про то, почему это не build-time env фронта. async fn get_public_config(State(state): State) -> impl IntoResponse { - // Публичный URL Grafana (за auth-гейтом Caddy, см. - // netrunner-data/observability/Caddyfile) — тот же паттерн, что и + // Публичный URL Grafana (за nginx + HTTP Basic Auth на VPS с данными, + // см. netrunner-data/nginx/) — тот же паттерн, что и // bot_username выше: читается на сервере заново на каждый запрос, а не // зашивается в SPA-бандл на этапе сборки, т.к. разный на разных стендах. // `None`, пока GRAFANA_PUBLIC_URL не задан — ObservabilityPage.tsx в diff --git a/src/modules/staff/controller.rs b/src/modules/staff/controller.rs index baa68f9..dcd4d00 100644 --- a/src/modules/staff/controller.rs +++ b/src/modules/staff/controller.rs @@ -28,9 +28,12 @@ pub fn router(state: ApiState) -> Router { .route_layer(middleware::from_fn_with_state(state, auth_guard)) } -/// Только Owner/Moderator — гейт для Caddy `forward_auth` перед Grafana -/// (см. netrunner-data/observability/Caddyfile). Тело ответа не важно, важен -/// только статус: 200 — Caddy пускает дальше в Grafana, 401 — блокирует. +/// Не подключён ни к чему в проде: изначально задумывался как гейт для +/// Caddy `forward_auth` перед Grafana, но эту схему заменили на nginx + +/// HTTP Basic Auth прямо на VPS с данными (см. netrunner-data/nginx/) — +/// проще и не зависит от того, задеплоен ли уже этот бэкенд. Эндпоинт +/// оставлен на случай, если позже понадобится реальный SSO поверх +/// basic-auth. Тело ответа не важно, важен только статус: 200/401. /// Бизнес-метрики (выручка, число юзеров) чувствительны — Support/Partner /// сюда не допускаются, поэтому `staff_guard`, а не `support_access_guard`. pub fn observability_router(state: ApiState) -> Router {