- добавлены backend, admin, gateway и worker skeleton - добавлены Drizzle schema, database package и initial migration - добавлены shared packages для RabbitMQ topology и S3 helpers - обновлены dev-инфраструктура, env example, scripts и dependencies - обновлена документация под versioned image URLs и read-through flow
4.0 KiB
Локальная разработка
Принцип
В 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.
Запуск инфраструктуры
cp .env.example .env
pnpm install
pnpm infra:up
Проверить compose config:
pnpm infra:config
Остановить:
pnpm infra:down
Логи:
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:
pnpm backend:dev
Проверки:
curl http://localhost:3001/api/health
open http://localhost:3001/docs
Database
Drizzle schema живёт в packages/database/src/schema.ts, миграции - в packages/database/drizzle.
Сгенерировать миграцию после изменения schema:
pnpm db:generate
Применить миграции к локальному PostgreSQL:
pnpm db:migrate
Открыть Drizzle Studio из корня проекта:
pnpm db:studio
Проверить database package:
pnpm db:typecheck
pnpm db:build
Admin
Запустить React/Vite admin:
pnpm admin:dev
Открыть:
open http://localhost:5173
Gateway
Gateway запускается нодой:
pnpm gateway:dev
Проверить gateway health:
curl http://localhost:8888/health
Проверить placeholder image origin route:
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, потому что генерация ещё не реализована.
pnpm worker:dev
Проверить worker package без запуска consumer:
pnpm worker:typecheck
pnpm worker:build
Будущий dev flow
Текущая и будущая схема:
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:
IMGPROXY_UPSTREAM=http://localhost:18080
Для production imgproxy всё равно рассматривается как внешняя зависимость и может жить на отдельном мощном сервере.