Перейти к основному содержимому

Локальный запуск

Полный пошаговый рецепт первого запуска живёт в корневом README.md — здесь только рабочий цикл разработки и грабли, на которые наступают повторно.

Рабочий цикл: инфраструктура в Docker, backend на хосте

Для разработки backend Docker-образ не пересобирают. Пересборка образа — только для smoke-проверки всего compose-пакета.

cp .env.example .env
cp apps/backend/.env.template apps/backend/.env # обязательно, см. ниже
npm install

docker compose up -d postgres redis meilisearch minio minio-init

cd apps/backend && npx medusa db:migrate --execute-safe-links && cd ../..
npm run backend:dev # http://localhost:9000, админка /app
npm run dev -w @auto-paint-store/web -- --port 3100 # витрина

Порты всех сервисов проброшены наружу (docker-compose.override.yml), поэтому backend с хоста видит контейнерные postgres/redis/meilisearch/minio.

:::danger apps/backend/.env — отдельный файл, и он обязателен Команды Medusa CLI (db:migrate, medusa user) запускаются с хоста и читают конфигурацию из apps/backend, не из корневого .env. В свежем git worktree этого файла нет — только .env.template. Без него DATABASE_URL уходит в несуществующую БД, а отсутствующий MEDUSA_FF_RBAC тихо пропускает миграцию RBAC. Симптом — падающие тесты, никак не связанные с тем, что вы правите. :::

Проверки

npm run build # сборка всех workspace
npm run lint
npm run test:unit -w @dtc/backend # jest
npm run test:integration:http -w @dtc/backend
npm run test:integration:modules -w @dtc/backend
npm run test -w @auto-paint-store/web # node:test
npm run build -w @auto-paint-store/web # next build

Один тест — из apps/backend, с TEST_TYPE=unit и NODE_OPTIONS=--experimental-vm-modules:

npx jest --runInBand path/to/file.spec.ts

:::warning Unit-тесты не заменяют сборку Зелёные unit-тесты пропускали падение next build на типах. Перед приёмкой работы всегда прогоняйте настоящую сборочную команду приложения. :::

Демо-каталог

npm run backend:seed (src/scripts/seed-commerce.ts) наполняет магазин демо-товарами и создаёт собственный sales channel «Auto Paint Storefront». Это ручной шаг для разработки и демо, не часть автонастройки: на боевом развёртывании новой компании его запускать не нужно.

Что делать, если

migrate в compose завис на «Running migrations...». Это одноразовый сервис, который гейтит старт backend; он умеет виснуть независимо от ваших изменений. Не расследуйте — мигрируйте с хоста (npx medusa db:migrate из apps/backend) и поднимайте backend отдельно.

Ошибка relation ... does not exist на старте backend. Рантайм-образ схему не мигрирует (npm run start, без auto-migrate). Прогоните миграции до старта.

Ошибка site_link does not exist на локальных миграциях — вероятно, загрязнённая БД, см. docs/known-quirks.md.

Store API падает по CORS при проверке витрины. STORE_CORS разрешает конкретно http://localhost:8000, а не http://127.0.0.1:8000. Открывайте через localhost. В браузерной автоматизации это выглядит как статус 503 или зависшая загрузка, а не как явная ошибка CORS.