57 lines
3.4 KiB
Markdown
57 lines
3.4 KiB
Markdown
# 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.
|