Новый сервис pcp-tgu-ui-service: ТГУ-фронт на headless-auth nstart + платформенный CI/деплой
This commit is contained in:
@@ -0,0 +1,56 @@
|
||||
# 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.
|
||||
Reference in New Issue
Block a user