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

Быстрый старт (локальная разработка)

Требования

  • Java 21
  • Node.js 18+
  • Docker + Docker Compose
  • Gradle (обёртка ./gradlew есть в репозитории)

1. Поднять инфраструктуру

docker-compose up -d

Запускает три контейнера:

  • postgres — PostgreSQL 15 на порту 45432
  • seaweedfs — S3-совместимое хранилище (S3 API: 8333, Filer: 8888)
  • mock-api — мок mphone на порту 8010

2. Запустить бэкенд

cd back
./gradlew bootRun

Профиль по умолчанию — local. Он подключается к:

  • БД: jdbc:postgresql://localhost:45432/dm_shop (пользователь dm_shop_user, пароль dm_shop_password)
  • mphone mock: http://localhost:8010/api
  • SeaweedFS S3: http://localhost:8333

Бэкенд запускается на http://localhost:8080.

Swagger UI доступен по адресу: http://localhost:8080/swagger-ui.html

Liquibase автоматически применяет все миграции при старте — вручную создавать таблицы не нужно.

3. Запустить фронтенд

cd front
npm install
npm run dev

Создайте файл front/.env.local:

NEXT_PUBLIC_API_BASE_URL=http://localhost:8080

Фронтенд запускается на http://localhost:3000.

4. Первоначальные данные

После старта бэкенда синхронизация с mphone запускается автоматически (раз в 30 секунд). Через 1–2 минуты в каталоге появятся товары, категории и бренды.

Для импорта тестовых отзывов:

curl -X POST http://localhost:8080/api/v1/reviews/import?mode=replace \
-F "file=@seed/reviews.json"

Полезные команды

# Только скомпилировать бэкенд (быстрая проверка)
cd back && ./gradlew compileJava

# Запустить тесты бэкенда (требует Docker для Testcontainers)
cd back && ./gradlew test

# Сборка jar без тестов
cd back && ./gradlew build -x test

# Линтинг фронтенда
cd front && npm run lint

# Сборка фронтенда
cd front && npm run build

Переменные окружения (продакшн)

ПеременнаяНазначениеПример
DB_URLJDBC URL PostgreSQLjdbc:postgresql://db:5432/dm_shop
DB_USERNAME / DB_PASSWORDУчётные данные БД
JWT_SECRET64-байтный hex-ключ для JWT
JWT_EXPIRATION_MSВремя жизни токена (мс)86400000 (24 ч)
S3_ENDPOINTАдрес S3http://seaweedfs:8333
S3_ACCESS_KEY / S3_SECRET_KEYКлючи S3
S3_BUCKETИмя бакетаdm-shop-bucket
CORS_ALLOWED_ORIGINSРазрешённые CORS-хостыhttps://shop.example.com
MPHONE_BASE_URLURL реального mphone APIhttps://mphone.su/api
MPHONE_TOKENТокен авторизации mphone
XML_FEED_URLURL XML-фида для синхронизации