Локальный запуск backend + frontend для разработки.
backend— Go backend (gRPC + HTTP gateway, Postgres, Swagger UI)wb_front— Vite/React frontend
- Docker + Docker Compose
- Go (для
goose, если миграции запускаются локально) psql(PostgreSQL client)- Node.js + npm
Ключ AI-провайдера используется только на backend.
- Создать локальный файл
/Users/eugenesuvorov/Study/wildberris/wildberries/backend/.env.backend(файл игнорируется git). - Скопировать туда значения из
/Users/eugenesuvorov/Study/wildberris/wildberries/backend/.env.backend.example. - Выбрать провайдера через
AI_PROVIDERи вставить ключ только в backend env.
Пример для Gemini:
AI_PROVIDER=gemini
GEMINI_API_KEY=your_secret_key
GEMINI_MODEL=gemini-2.5-flash
GEMINI_API_BASE_URL=https://generativelanguage.googleapis.comПример для Groq:
AI_PROVIDER=groq
GROQ_API_KEY=your_secret_key
GROQ_MODEL=llama-3.1-8b-instant
GROQ_API_BASE_URL=https://api.groq.com/openai/v1Рекомендации по безопасности:
- не хранить ключ во frontend и не публиковать в репозитории;
- не логировать значение ключа в runtime;
- хранить prod/CI ключи в Secret Manager (GitHub Secrets / Vault);
- для Groq и Gemini регулярно ротировать ключи при подозрении на утечку.
Этот вариант запускает backend, DB и Swagger в Docker, а frontend локально.
- Поднять backend-инфраструктуру и сервер:
cd /Users/eugenesuvorov/Study/wildberris/wildberries/backend
# при необходимости: export $(cat .env | xargs)
docker compose up -d --build- Применить миграции:
cd /Users/eugenesuvorov/Study/wildberris/wildberries/backend
goose -dir ./migrations postgres "postgres://postgres:postgres@localhost:5442/seller_promotions?sslmode=disable" up- Загрузить dev seed-данные (товары для seller flow):
psql "postgres://postgres:postgres@localhost:5442/seller_promotions?sslmode=disable" \
-f /Users/eugenesuvorov/Study/wildberris/wildberries/backend/docs/dev_seed_products.sql- Если backend-контейнер стартовал до миграций и завершился с ошибкой, перезапустить:
cd /Users/eugenesuvorov/Study/wildberris/wildberries/backend
docker compose restart server- Запустить frontend:
cd /Users/eugenesuvorov/Study/wildberris/wildberries/wb_front
npm ci
VITE_API_BASE_URL=/api VITE_SELLER_ID=1 npm run dev
# windows
set VITE_API_BASE_URL=/api && set VITE_SELLER_ID=1 && npm run dev- Frontend:
http://localhost:5173 - Backend HTTP API:
http://localhost:8080 - Swagger UI:
http://localhost:7003
Если нужно запускать backend не в контейнере:
- Поднять только БД и Swagger:
cd /Users/eugenesuvorov/Study/wildberris/wildberries/backend
docker compose up -d db swagger-ui- Запустить backend локально:
cd /Users/eugenesuvorov/Study/wildberris/wildberries/backend
DATABASE_DSN=postgres://postgres:postgres@localhost:5442/seller_promotions?sslmode=disable \
AI_PROVIDER=stub \
HTTP_PORT=8080 GRPC_PORT=7002 go run ./cmd/server
# windows
set DATABASE_DSN=postgres://postgres:postgres@localhost:5442/seller_promotions?sslmode=disable && set AI_PROVIDER=stub && set HTTP_PORT=8080 && set GRPC_PORT=7002 && go run ./cmd/serverВажно: не запускать одновременно Docker-контейнер server и локальный go run (конфликт портов 8080 и 7002).
Поставить на паузу (контейнеры остановятся, данные в volume сохранятся):
cd /Users/eugenesuvorov/Study/wildberris/wildberries/backend
docker compose stopВозобновить:
cd /Users/eugenesuvorov/Study/wildberris/wildberries/backend
docker compose start- В терминале с backend (
go run ./cmd/server) нажатьCtrl+C - В терминале с frontend (
npm run dev) нажатьCtrl+C - Если поднимали локальный Postgres через
pg_ctl, остановить:
/opt/homebrew/opt/postgresql@18/bin/pg_ctl -D /tmp/wb-e1-pg stopПовторный запуск:
- backend: снова выполнить команду
go runиз раздела выше - frontend: снова выполнить
npm run dev - local Postgres (если использовался):
pg_ctl ... startс тем же каталогом данных
cd /Users/eugenesuvorov/Study/wildberris/wildberries/backend
docker compose down- Vite proxy уже настроен:
/api->http://localhost:8080 - Для локального
go runbackend обязательно задаватьDATABASE_DSN, иначе backend попробует подключиться кdb:5432 - Для включения Gemini используйте
AI_PROVIDER=geminiи задайтеGEMINI_API_KEYтолько в backend окружении - Для включения Groq используйте
AI_PROVIDER=groqи задайтеGROQ_API_KEYтолько в backend окружении - Подробный runbook:
backend/docs/runbook_локальный_запуск_генерация_акций.md