# Бэкенд — продакшн-хардening (без секретов) Изменения этого инкремента (всё компилируется: `npm run typecheck` + `npm run build` — чисто; при старте Nest инициализируются ThrottlerModule и HealthModule). ## Приложение - **helmet** (`src/main.ts`) — security-заголовки. CSP для HTML выключен (API отдаёт только JSON), `Cross-Origin-Resource-Policy: cross-origin` (потребление со статического сайта другого origin). - **trust proxy** (`TRUST_PROXY`, по умолчанию `1`) — корректный `req.ip` за nginx для rate-limiting. - **graceful shutdown** — `app.enableShutdownHooks()` (корректное закрытие по SIGTERM). - **Rate-limiting** (`@nestjs/throttler`, глобальный `ThrottlerGuard`): по умолчанию `THROTTLE_LIMIT=120` запросов / `THROTTLE_TTL=60000` мс на IP. На `/auth/*` строже: логин — 8/мин, `password/forgot` и `password/reset` — 5/мин, остальной `/auth` — 20/мин. - **Health-эндпоинт** `GET /api/v1/health` (без БД, без лимита) — для проб. ## Docker - `Dockerfile`: запуск под непривилегированным пользователем `node`; `HEALTHCHECK` через встроенный `fetch` Node 22 (без curl/wget); `dumb-init` как ENTRYPOINT (обработка сигналов); `ENV PORT=3000`. - `docker-compose.yml`: `restart: unless-stopped` для db/minio/clamav/mailhog/app; у `app` — `init: true` и `healthcheck` на `/api/v1/health`. - `.dockerignore`: добавлены `.github`, `coverage`. ## CI - `.github/workflows/ci.yml`: Node 22 → `npm ci` → `prisma generate` → `typecheck` → `build` на push в main/master и на pull_request. ## Новые переменные окружения (см. `.env.example`) `CORS_ORIGIN` (список через запятую; `*` только dev), `TRUST_PROXY` (`1`/`false`/число), `PORT`, `THROTTLE_TTL` (мс), `THROTTLE_LIMIT` (запросов в окне). ## Осталось (требует ваших доступов/решений — НЕ входит в этот инкремент) - Реальные интеграции: эквайринг, 1С, МВД, SMTP, S3-РФ, ClamAV — ключи/договоры. - Прод-деплой `international.stankin.ru`, TLS-сертификаты, секрет-хранилище (KMS) вместо dev-значений в compose. - Многоинстансный throttler — общий стор (Redis) вместо in-memory.