ab3a787da5
- новый Spring Cloud Gateway (WebFlux): доменные маршруты /api/pcp-<x>/**
со StripPrefix=2, /api/stations без среза пути, catch-all /api/** → ui-service;
опциональная JWT-валидация на edge (gateway.security.jwt-enabled, по умолчанию off)
- config-repo: pcp-gateway-service.yaml (маршруты) + порт/адрес gateway в реестрах
application-{local,docker-local,dev}
- build: репозитории переведены на mavenCentral (nstart-proxy закомментирован),
включены mavenLocal/gradlePluginPortal; settings: include модуля
- pcp-tgu-ui-service: vite-proxy и nginx.conf свёрнуты на единый /api → gateway
(вместо набора per-service правил)
- deploy: сервис gateway в docker-compose; helm-чарт pcp-gateway-service
- CI: .gitlab/ci/pcp-gateway-service.yml + проводка в .gitlab-ci.yml
pcp-tgu-ui-service
Фронтенд «ТГУ — Операции». Сервис собран с нуля на чистой базе исходного
pcp-tgu-ops-ui (React + Vite, своя тёмная тема), в которую добавлены только две
вещи с платформы NStart:
- Авторизация — headless-ядро
@nstart/auth(New Start ID / Keycloak): токен, login, logout, refresh. Без@nstart/ui— UI-компоненты библиотеки (ProfilePage/UserPanel) намеренно не подключены, экраны ТГУ остаются на своём UI. - Сборка и деплой — платформенный контракт: hardened
Dockerfile(non-root, healthcheck), runtime-config (config.jsизAPP_*),docker-bake.hcl,.gitlab-ci.yml(build → trivy/semgrep → push в registry),nginx.conf.
В отличие от pcp-tgu-ops-ui-template, здесь нет демо-страниц шаблона, @nstart/ui,
Tailwind, i18n и борьбы тем — только рабочий ТГУ + auth + контур сборки/деплоя.
Авторизация (headless)
- Режим выбирается переменной
authMode(anonymous|new-start-id). anonymous(дефолт): приложение открывается сразу, токена нет, заголовокAuthorizationне добавляется — поведение как у исходного сервиса.new-start-id: вход редиректом на New Start ID; токен подставляется в каждый запросsrc/api/*через мостapiFetch+AuthTokenBridge. В шапке появляется кнопка «Выйти».- Конфиг входа берётся из
src/config/env.ts(runtimeAPP_*имеют приоритет над buildVITE_*).
Конфигурация окружения
| Назначение | DEV (npm run dev) |
PROD (Docker) |
|---|---|---|
| источник | .env (VITE_*) |
APP_* контейнера → config.js |
| api | VITE_API_URL |
APP_API_URL |
| режим auth | VITE_AUTH_MODE |
APP_AUTH_MODE |
| New Start ID | VITE_NEW_START_ID_* |
APP_NEW_START_ID_* |
Доступ к приватному реестру @nstart/*: scope @nstart:registry=... должен быть в
~/.npmrc (или в конфиге CI-раннера). Проектный .npmrc задаёт только
min-release-age=7.
Запуск
cp .env.example .env # режим anonymous, открывается сразу
npm install # нужен доступ к repo.nstart.cloud (scope @nstart)
npm run dev # http://localhost:5174
npm run build # tsc -b + vite build
npm run test # vitest
Прод-прокси (осталось настроить)
В nginx.conf активный /api/ — заглушка (127.0.0.1:8000), а
блоки pcp-* закомментированы (зеркало server.proxy из vite.config.ts).
Подставьте реальные UPSTREAM_* кластера и раскомментируйте, либо вынесите
маршрутизацию на gateway/ingress.