Files
dc-observatio/services/pcp-tgu-ui-service/README.md
T

57 lines
3.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# pcp-tgu-ui-service
Фронтенд «ТГУ — Операции». Сервис собран **с нуля** на чистой базе исходного
`pcp-tgu-ops-ui` (React + Vite, своя тёмная тема), в которую добавлены только две
вещи с платформы NStart:
1. **Авторизация** — headless-ядро `@nstart/auth` (New Start ID / Keycloak): токен,
login, logout, refresh. **Без `@nstart/ui`** — UI-компоненты библиотеки
(ProfilePage/UserPanel) намеренно не подключены, экраны ТГУ остаются на своём UI.
2. **Сборка и деплой** — платформенный контракт: 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`](src/api/apiFetch.ts) +
[`AuthTokenBridge`](src/auth/appAuth.tsx). В шапке появляется кнопка «Выйти».
- Конфиг входа берётся из [`src/config/env.ts`](src/config/env.ts) (runtime `APP_*`
имеют приоритет над build `VITE_*`).
## Конфигурация окружения
| Назначение | 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`.
## Запуск
```bash
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`](nginx.conf) активный `/api/` — заглушка (`127.0.0.1:8000`), а
блоки `pcp-*` закомментированы (зеркало `server.proxy` из `vite.config.ts`).
Подставьте реальные `UPSTREAM_*` кластера и раскомментируйте, либо вынесите
маршрутизацию на gateway/ingress.