Безопасность довёл до ума — Cursor-генерацию переписал руками. IDOR закрыл, CSRF задушил, refresh rotation теперь как надо. HSTS на staging, ENABLE_DOCS=false, install.env recovery протестил. Backend: - jwt_denylist + auth_epoch: мгновенный revoke access JWT (logout/block/reset) - auth/admin/users: bump epoch, logout с Bearer, forgot_password skip для blocked - install_secrets: путь всегда apps/api/data/secrets/ (bootstrap из корня не ломает Docker) - seed: SEED_DEMO_USERS=false на prod/staging - тесты: jwt revoke, integration, coverage gate 90% Frontend: - logout шлёт Bearer, обработка TOKEN_REVOKED - guards TypeScript fix - E2E: blocked user → 401 сразу после block Infra: - staging/prod compose, TLS nginx, deploy-скрипты - k6 §17.2, backup/health/smoke scripts Docs: - docs/ на русском: project, security, deploy, release (старые md слили) - README короткий + план ТЗ + стандартные логины dev Код готов к плаванию. Капитан может идти писать фронт.
113 lines
5.4 KiB
Markdown
113 lines
5.4 KiB
Markdown
# Compton Platform
|
||
|
||
Если вы открыли этот файл — поздравляем: перед вами monorepo с React, FastAPI и амбициями выйти в production. Амбиции живут в [docs/release.md](docs/release.md), код — в `apps/`, секреты — **не** в git.
|
||
|
||
Платформа Compton Organic Tech: лендинг, auth, профиль, CMS, админка в стиле WESP/zootech. ТЗ: [docs/TZ.md](docs/TZ.md).
|
||
|
||
## Быстрый старт
|
||
|
||
```bash
|
||
python apps/api/scripts/bootstrap_install.py # один раз, до первого up
|
||
docker compose --profile docker-web up -d --build
|
||
curl http://localhost:8000/api/v1/health # Windows: curl.exe
|
||
```
|
||
|
||
| URL | Что там |
|
||
|-----|---------|
|
||
| http://localhost:5173 | Лендинг `/` + SPA (`/login`, `/admin`, …) |
|
||
| http://localhost:8000/api/v1/health | API жив? |
|
||
| http://localhost:8000/api/v1/docs | OpenAPI (только dev) |
|
||
|
||
**Логин для пробы:** `admin@compton.example` / `Admin1234` → `/admin`.
|
||
|
||
> Bootstrap **до** первого `docker compose up`. Иначе Postgres скажет «password authentication failed» — см. [docs/deploy.md § восстановление](docs/deploy.md#восстановление-секретов).
|
||
|
||
**Не делайте:** Docker `web` и `pnpm --filter web dev` одновременно — оба хотят порт **5173**.
|
||
|
||
## Демо-аккаунты (dev)
|
||
|
||
Подробнее: [docs/deploy.md § стандартные логины](docs/deploy.md#стандартные-логины-dev).
|
||
|
||
| Email | Пароль | Env | Роль | Superuser |
|
||
|-------|--------|-----|------|-----------|
|
||
| admin@compton.example | Admin1234 | `ADMIN_INITIAL_PASSWORD` | admin | да — Security, Diagnostics, secrets |
|
||
| ops@compton.example | OpsAdmin1234 | `DEMO_OPS_PASSWORD` | admin | нет — Users, Content, Activity |
|
||
| user@compton.example | User1234 | `DEMO_USER_PASSWORD` | user | — |
|
||
|
||
CMS после seed: `/pages/about`, `/pages/privacy`, `/pages/terms`.
|
||
|
||
В production/staging demo-users **выключены** (`SEED_DEMO_USERS=false`).
|
||
|
||
## Тесты
|
||
|
||
```bash
|
||
pnpm --filter web test:ci # frontend, cov ≥ 85%
|
||
cd apps/api && python -m pytest --cov=app --cov-fail-under=90
|
||
pnpm --filter web e2e # Playwright, API :8001
|
||
```
|
||
|
||
## Документация
|
||
|
||
Вся нормальная дока — в **`docs/`**, на русском, без водянистого README на 500 строк:
|
||
|
||
| Файл | О чём |
|
||
|------|-------|
|
||
| [docs/README.md](docs/README.md) | Оглавление |
|
||
| [docs/project.md](docs/project.md) | Структура, архитектура, API, маршруты |
|
||
| [docs/security.md](docs/security.md) | Auth, JWT revoke, секреты, чеклист prod |
|
||
| [docs/deploy.md](docs/deploy.md) | Dev/staging/prod, бэкапы, troubleshooting |
|
||
| [docs/release.md](docs/release.md) | QA gates, k6, ZAP, go-live |
|
||
| [docs/TZ.md](docs/TZ.md) | Техническое задание |
|
||
|
||
## Работа с Git
|
||
|
||
**Репозиторий:** https://git.groupkomton.ru/Matvey/site.git
|
||
**Ветка:** `main` (одна ветка, без сюрпризов)
|
||
|
||
```bash
|
||
git pull origin main # перед работой — всегда
|
||
git status && git diff # перед коммитом — тоже всегда
|
||
git add .
|
||
git commit -m "Сделал то-то на русском"
|
||
git push origin main
|
||
```
|
||
|
||
**Коммиты — только на русском.** Плохо: `fix`, `WIP`, `asdf`.
|
||
|
||
**Не коммитить:** `.env`, `install.env`, `node_modules/`, логи, кэши.
|
||
|
||
**Не делать** `git push --force` на `main` без согласования.
|
||
|
||
| Команда | Зачем |
|
||
|---------|-------|
|
||
| `git log --oneline -10` | что было |
|
||
| `git checkout -- файл` | откатить файл |
|
||
| `git stash` / `git stash pop` | спрятать / вернуть правки |
|
||
|
||
## План по ТЗ (§16)
|
||
|
||
| Фаза | Задачи | Статус |
|
||
|------|--------|--------|
|
||
| **0 — Подготовка** | Monorepo, Docker Compose, UI kit, CI/coverage gates, Playwright smoke | Выполнено |
|
||
| **1 — MVP** | Landing, Auth+SMTP, Profile, Content, Admin, staging + полный регресс | В процессе |
|
||
| **2 — v1.0** | Celery/notifications, Catalog+Orders, Analytics, k6 + monitoring | Когда начнём? |
|
||
| **3 — Scale** | Read replica PG, Celery workers, CDN, horizontal API | Когда начнём? |
|
||
|
||
### Фаза 1 — детализация
|
||
|
||
| # | Задача | Модули | Статус |
|
||
|---|--------|--------|--------|
|
||
| 1.1 | Landing (перенос заглушки) | landing | Выполнено |
|
||
| 1.2 | Auth + SMTP | auth | Выполнено |
|
||
| 1.2b | Security baseline | core, auth | В процессе |
|
||
| 1.3 | Profile CRUD + avatar | profile | Выполнено |
|
||
| 1.4 | Content pages | content | Выполнено |
|
||
| 1.5 | Admin panel | admin | Выполнено |
|
||
| 1.6 | Staging deploy + полный регресс (§15.7) | — | В процессе |
|
||
|
||
Критерии приёмки MVP — §17.1 ТЗ (k6 50 CCU, Lighthouse ≥85, E2E 10/10, coverage gates).
|
||
|
||
---
|
||
|
||
*Дальше — [docs/](docs/README.md). Там схемы, таблицы и вещи, которые не помещаются в README без страданий.*
|