Обновить комментарии: Grafana теперь за nginx+Basic Auth, не Caddy

Auth-гейт перед Grafana на VPS с данными переехал с Caddy forward_auth
(зависел от задеплоенного бэкенда, которого ещё не было) на system nginx
с HTTP Basic Auth прямо на том же VPS — не зависит ни от чего.
observability_router/staff/controller.rs оставлен неиспользуемым на случай,
если позже понадобится реальный SSO поверх basic-auth.
This commit is contained in:
2026-07-10 18:18:47 +07:00
parent 864d4bc852
commit 4e998d789b
2 changed files with 8 additions and 5 deletions
+2 -2
View File
@@ -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<ApiState>) -> 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 в
+6 -3
View File
@@ -28,9 +28,12 @@ pub fn router(state: ApiState) -> Router<ApiState> {
.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<ApiState> {