quality / commitlint (push) Skipped
quality / changes (push) Successful in 7s
quality / docker-check (push) Skipped
quality / web (push) Successful in 40s
quality / api (push) Successful in 36s
CD / quality (push) Successful in 1m37s
CD / publish (push) Successful in 1m40s
Регистрация mm в каталоге приложений, permissions mm:*, target-app и docs. Co-authored-by: Cursor <[email protected]>
85 lines
3.3 KiB
Markdown
85 lines
3.3 KiB
Markdown
# Auth Portal
|
||
|
||
Единый auth-портал для CFDM, VPS Tracker и EvoBGP (`auth.shnt.top`).
|
||
|
||
## Стек
|
||
|
||
- Monorepo: pnpm workspaces + turbo
|
||
- `apps/web` — Vite + React 19 + TanStack Router/Query + shadcn/ui + ReUI
|
||
- `apps/api` — Fastify 5 + JWT + SQLite (better-sqlite3 / Drizzle)
|
||
- `packages/ui` — `@authportal/ui` (shadcn primitives)
|
||
- `packages/shared` — Zod-контракты
|
||
- `packages/db` — схема и клиент SQLite
|
||
|
||
## Быстрый старт
|
||
|
||
```bash
|
||
pnpm install
|
||
cp .env.example .env
|
||
# ReUI PRO key уже в apps/web/.env.local (gitignored) — или скопируйте из другого проекта
|
||
pnpm --filter @authportal/api dev # :8080
|
||
pnpm --filter web dev # :5175
|
||
```
|
||
|
||
## Интеграция с VPS Tracker
|
||
|
||
См. [`docs/integrate-vps-tracker.md`](docs/integrate-vps-tracker.md) — SSO handoff (`return_to` + `#access_token`), общий `JWT_SECRET`, RBAC `vps:*`.
|
||
|
||
См. [`docs/integrate-cfdm.md`](docs/integrate-cfdm.md) — то же для Cloudflare Domain Manager (`cfdm:*`, порт Vite `5174`).
|
||
|
||
См. [`docs/integrate-evobgp.md`](docs/integrate-evobgp.md) — EvoBGP (`bgp:*`).
|
||
См. [`docs/integrate-evofirewall.md`](docs/integrate-evofirewall.md) — EvoFirewall (`fw:*`).
|
||
См. [`docs/integrate-cdnmanager.md`](docs/integrate-cdnmanager.md) — CDN Manager (`cdn:*`, порт Vite `5176`).
|
||
См. [`docs/integrate-mikrotikmanager.md`](docs/integrate-mikrotikmanager.md) — MikrotikManager (`mm:*`).
|
||
См. [`docs/integrate-technitium.md`](docs/integrate-technitium.md) — Technitium DNS (`dns:*`, OIDC IdP).
|
||
|
||
Корень:
|
||
|
||
```bash
|
||
pnpm dev # turbo: api + web
|
||
pnpm build
|
||
pnpm test
|
||
pnpm lint
|
||
```
|
||
|
||
## ReUI PRO
|
||
|
||
```bash
|
||
cd apps/web
|
||
# нужен REUI_LICENSE_KEY в .env.local
|
||
pnpm dlx shadcn@latest add @reui/auth-13 --yes
|
||
```
|
||
|
||
`components.json` → registry `@reui` с `Authorization: Bearer ${REUI_LICENSE_KEY}`.
|
||
|
||
## Docker / Gitea CI
|
||
|
||
- Workflows: `.gitea/workflows/{ci,cd,quality}.yaml` — как CFDM / EvoFW
|
||
- Релизы: [`docs/releasing.md`](docs/releasing.md)
|
||
- Secrets: `ACTIONS_PAT` (tags, releases, Container Registry)
|
||
- Образы alpine all-in-one: `git.shx.one/denozord/authportal` и drop-in `git.shx.one/denozord/auth-portal`
|
||
- Bake: [`deploy/docker`](deploy/docker) (`node:22-alpine`, без Python/g++ в runtime)
|
||
|
||
Локально / без reverse proxy (нужен уже собранный образ или bake):
|
||
|
||
```bash
|
||
docker compose up -d
|
||
```
|
||
|
||
**Production (один Compose: Traefik + auth-portal, HTTPS Cloudflare DNS challenge):**
|
||
[`docs/deploy-traefik.md`](docs/deploy-traefik.md) · [`deploy/docker-compose.traefik.yml`](deploy/docker-compose.traefik.yml) · [`deploy/env.traefik.example`](deploy/env.traefik.example)
|
||
|
||
OIDC IdP (Technitium): в `.env` достаточно `ISSUER` (опционально `OIDC_ISSUER` / `OIDC_RSA_PRIVATE_KEY`); после старта — Admin → OIDC-клиенты. См. [`docs/integrate-technitium.md`](docs/integrate-technitium.md).
|
||
|
||
## Структура
|
||
|
||
```
|
||
apps/web/src/ # SPA (routes, components/reui, reui-kit)
|
||
apps/api/src/ # Fastify
|
||
packages/ui/ # shadcn CLI output
|
||
packages/shared/ # contracts
|
||
packages/db/ # drizzle schema
|
||
.gitea/workflows/ # CI/CD (ci / cd / quality)
|
||
deploy/docker/ # bake + alpine Dockerfile
|
||
```
|