# Локальная разработка ## Принцип В Docker запускаем стабильную инфраструктуру. Кодовые сервисы запускаем нодой с hot reload. Сейчас в Docker есть только: - PostgreSQL; - MinIO; - MinIO bucket init; - imgproxy dev instance; - RabbitMQ. `backend` уже создан как NestJS app. `admin` уже создан как чистый Vite React TS app. `gateway` уже создан как Fastify app. `worker` уже создан как RabbitMQ skeleton. Gateway обязателен для Cloudinary-like поведения и интеграции с `next/image`. ## Запуск инфраструктуры ```bash cp .env.example .env pnpm install pnpm infra:up ``` Проверить compose config: ```bash pnpm infra:config ``` Остановить: ```bash pnpm infra:down ``` Логи: ```bash pnpm infra:logs ``` ## Порты | Сервис | URL | |---|---| | PostgreSQL | `localhost:5433` | | MinIO API | `http://localhost:9000` | | MinIO Console | `http://localhost:9001` | | imgproxy | `http://localhost:18080` | | RabbitMQ | `amqp://localhost:5672` | | RabbitMQ Management | `http://localhost:15672` | | Backend API | `http://localhost:3001/api` | | Swagger | `http://localhost:3001/docs` | | Admin | `http://localhost:5173` | | Gateway | `http://localhost:8888` | Если `localhost:8888` занят старым `image-gateway`, остановите старый stack или задайте `GATEWAY_PORT=8890` в `.env`. ## Backend Запустить NestJS backend: ```bash pnpm backend:dev ``` Проверки: ```bash curl http://localhost:3001/api/health open http://localhost:3001/docs ``` ## Database Drizzle schema живёт в `packages/database/src/schema.ts`, миграции - в `packages/database/drizzle`. Сгенерировать миграцию после изменения schema: ```bash pnpm db:generate ``` Применить миграции к локальному PostgreSQL: ```bash pnpm db:migrate ``` Открыть Drizzle Studio из корня проекта: ```bash pnpm db:studio ``` Проверить database package: ```bash pnpm db:typecheck pnpm db:build ``` ## Admin Запустить React/Vite admin: ```bash pnpm admin:dev ``` Открыть: ```bash open http://localhost:5173 ``` ## Gateway Gateway запускается нодой: ```bash pnpm gateway:dev ``` Проверить gateway health: ```bash curl http://localhost:8888/health ``` Проверить placeholder image origin route: ```bash curl -i "http://localhost:8888/images/asset_123/v4/card?w=640&q=80&f=auto" ``` Ожидаемый текущий статус - `501`, потому что S3/imgproxy генерация ещё не реализована. ## Worker Worker запускается нодой и сейчас только объявляет RabbitMQ topology, слушает `image.generate-variant` и отправляет полученные jobs в DLQ, потому что генерация ещё не реализована. ```bash pnpm worker:dev ``` Проверить worker package без запуска consumer: ```bash pnpm worker:typecheck pnpm worker:build ``` ## Будущий dev flow Текущая и будущая схема: ```text React/Vite admin localhost:5173 -> NestJS backend localhost:3001 -> PostgreSQL localhost:5433 -> MinIO localhost:9000 -> RabbitMQ localhost:5672 worker node process -> PostgreSQL -> MinIO -> RabbitMQ -> imgproxy localhost:18080 Fastify gateway localhost:8888 -> L1 memory cache -> Backend internal ensure endpoint ``` ## imgproxy для разработки В dev compose поднимается локальный `imgproxy`, опубликованный только на `127.0.0.1:18080`: ```env IMGPROXY_UPSTREAM=http://localhost:18080 ``` Для production `imgproxy` всё равно рассматривается как внешняя зависимость и может жить на отдельном мощном сервере.