Files
image-platform/docs/development.md
S.Gromov bcadb85a83 feat: добавить базовые сервисы image-platform
- добавлены 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
2026-05-05 09:59:21 +03:00

4.0 KiB
Raw Blame History

Локальная разработка

Принцип

В 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 всё равно рассматривается как внешняя зависимость и может жить на отдельном мощном сервере.