Быстрый старт (локальная разработка)
Требования
- 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_URL | JDBC URL PostgreSQL | jdbc:postgresql://db:5432/dm_shop |
DB_USERNAME / DB_PASSWORD | Учётные данные БД | — |
JWT_SECRET | 64-байтный hex-ключ для JWT | — |
JWT_EXPIRATION_MS | Время жизни токена (мс) | 86400000 (24 ч) |
S3_ENDPOINT | Адрес S3 | http://seaweedfs:8333 |
S3_ACCESS_KEY / S3_SECRET_KEY | Ключи S3 | — |
S3_BUCKET | Имя бакета | dm-shop-bucket |
CORS_ALLOWED_ORIGINS | Разрешённые CORS-хосты | https://shop.example.com |
MPHONE_BASE_URL | URL реального mphone API | https://mphone.su/api |
MPHONE_TOKEN | Токен авторизации mphone | — |
XML_FEED_URL | URL XML-фида для синхронизации | — |