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
This commit is contained in:
@@ -2,15 +2,18 @@
|
||||
|
||||
## Принцип
|
||||
|
||||
В Docker запускаем стабильную инфраструктуру. Кодовые сервисы позже запускаем нодой с hot reload.
|
||||
В Docker запускаем стабильную инфраструктуру. Кодовые сервисы запускаем нодой с hot reload.
|
||||
|
||||
Сейчас в Docker есть только:
|
||||
|
||||
- PostgreSQL;
|
||||
- MinIO;
|
||||
- MinIO bucket init.
|
||||
- MinIO bucket init;
|
||||
- imgproxy dev instance;
|
||||
- RabbitMQ.
|
||||
|
||||
`api`, `worker`, `admin` и `gateway` пока не созданы.
|
||||
`backend` уже создан как NestJS app. `admin` уже создан как чистый Vite React TS app. `gateway` уже создан как Fastify app. `worker` уже создан как RabbitMQ skeleton.
|
||||
Gateway обязателен для Cloudinary-like поведения и интеграции с `next/image`.
|
||||
|
||||
## Запуск инфраструктуры
|
||||
|
||||
@@ -45,40 +48,139 @@ pnpm infra:logs
|
||||
| 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 API localhost:3001
|
||||
-> NestJS backend localhost:3001
|
||||
-> PostgreSQL localhost:5433
|
||||
-> MinIO localhost:9000
|
||||
-> RabbitMQ localhost:5672
|
||||
|
||||
worker node process
|
||||
-> PostgreSQL
|
||||
-> MinIO
|
||||
-> external imgproxy
|
||||
-> RabbitMQ
|
||||
-> imgproxy localhost:18080
|
||||
|
||||
gateway Caddy/Souin localhost:8888
|
||||
-> S3/MinIO ready variant
|
||||
-> API/generator fallback on host.docker.internal:3001
|
||||
Fastify gateway localhost:8888
|
||||
-> L1 memory cache
|
||||
-> Backend internal ensure endpoint
|
||||
```
|
||||
|
||||
Для Linux gateway container должен видеть host services через:
|
||||
## imgproxy для разработки
|
||||
|
||||
```yaml
|
||||
extra_hosts:
|
||||
- "host.docker.internal:host-gateway"
|
||||
```
|
||||
|
||||
## External imgproxy для разработки
|
||||
|
||||
`imgproxy` не входит в `image-platform` stack. Для локальной разработки можно использовать любой внешний endpoint и прописать его в `.env`:
|
||||
В dev compose поднимается локальный `imgproxy`, опубликованный только на `127.0.0.1:18080`:
|
||||
|
||||
```env
|
||||
IMGPROXY_UPSTREAM=http://localhost:18080
|
||||
```
|
||||
|
||||
Если нужен локальный standalone imgproxy, его можно запустить отдельно вне этого compose stack. Он остаётся внешней зависимостью платформы.
|
||||
Для production `imgproxy` всё равно рассматривается как внешняя зависимость и может жить на отдельном мощном сервере.
|
||||
|
||||
Reference in New Issue
Block a user