# Calendar Run Монорепозиторий: **backend** (Express + PostgreSQL) и **frontend** (React + Vite) — календарь забегов. ## Переменные окружения Один шаблон для локальной разработки и для Docker-стека: **[`.env.example`](.env.example)** → скопируйте в **`.env`** в корне репозитория. Там же перечислены **`DB_HOST`**, **`DB_PORT`**, **`DB_NAME`**, **`DB_USER`**, **`DB_PASSWORD`** (подключение бэкенда к БД), **`PORT`** / **`API_PORT`**, опционально **`CALENDAR_RUN_MOCK_DB`**, **`CORS_ORIGIN`**, а для локального Vite — **`VITE_API_BASE_URL`**. ## Backend — локально 1. `cd backend && npm install` 2. Корень: `cp .env.example .env`, задайте `DB_*` (и при необходимости `CORS_ORIGIN`). 3. Postgres: из корня `docker compose up -d` (см. [`docker-compose.yml`](docker-compose.yml)) — в compose используются те же `DB_NAME`, `DB_USER`, `DB_PASSWORD` из `.env`. 4. `cd backend && npm run db:migrate && npm run seed` 5. `npm run build && npm run dev` Без PostgreSQL (только smoke API): в `.env` задайте `CALENDAR_RUN_MOCK_DB=1`; **`db:migrate` и `seed` с mock не использовать**. ## Frontend — локально ```bash cd frontend cp .env.example .env npm install npm run dev ``` Значение `VITE_API_BASE_URL` см. в **корневом** [`.env.example`](.env.example); для dev по умолчанию `http://localhost:3001`. У бэкенда `CORS_ORIGIN` должен совпадать с origin приложения (например `http://localhost:5173`). ## Docker: backend + frontend рядом с Postgres Используйте [`docker-compose.stack.yml`](docker-compose.stack.yml): общая **внешняя** сеть с контейнером Postgres (как в вашей инфраструктуре). В корне должен быть **`.env`** (из `.env.example`): `DB_HOST` — имя сервиса/контейнера Postgres в этой сети, `DB_PORT=5432`, плюс остальные `DB_*` и **`CORS_ORIGIN=http://localhost:3033`**, если заходите на фронт с хоста на порту 3033. ```bash docker compose -f docker-compose.stack.yml up -d --build docker compose -f docker-compose.stack.yml exec backend node dist/migrate.js docker compose -f docker-compose.stack.yml exec backend node dist/seed.js ``` Фронт в браузере обращается к API по префиксу **`/api`** (nginx в образе фронта проксирует на backend). ## Документация API и бэкенда - [Шпаргалка API для фронта](docs/backend-api-for-frontend.md) - [Эксплуатация backend](docs/backend.md)