Skip to main content

Local Development

Локальная инфраструктура для разработки: PostgreSQL + Redis через Docker Compose, синхронизация данных с production.


Summary

  • Инфраструктура запускается через docker-compose.dev.yml (PostgreSQL 16 + Redis 7)
  • Application code запускается через pnpm dev (backend, frontend, admin — НЕ в Docker)
  • Данные синхронизируются с production через dev-db-sync.sh (SSH + pg_dump)
Почему не всё в Docker?

Backend/frontend запускаются нативно для быстрого hot-reload и отладки. Docker только для инфраструктуры, которую неудобно ставить вручную.


Prerequisites

ToolVersionПроверкаУстановка (WSL2)
Docker Engine20+docker --versiondocs.docker.com
Docker Composev2+docker compose versionВключён в Docker Engine
Node.js18+node --versionnvm install 20
pnpm9+pnpm --versioncorepack enable && corepack prepare pnpm@latest
SSH accessssh SERVER_HOSTТолько для синхронизации БД

Quick Start

1. Запустить инфраструктуру

docker compose -f docker-compose.dev.yml up -d

Дождаться health checks (~10 сек):

docker compose -f docker-compose.dev.yml up -d --wait

2. Настроить environment

cp backend/.env.example backend/.env
cp frontend/.env.example frontend/.env

В backend/.env указать Docker Compose defaults:

DATABASE_URL=postgresql://goloot:goloot@localhost:5432/goloot

3. Синхронизировать данные с production

bash scripts/db/dev-db-sync.sh root@YOUR_VPS_IP

Скрипт через SSH выполняет pg_dump на сервере и восстанавливает данные в локальный PostgreSQL.

Production данные

Синхронизированная БД содержит реальные пользовательские данные. Локальная БД — только для разработки.

4. Запустить приложение

pnpm dev
СервисURL
Frontendhttp://localhost:3001
Backend APIhttp://localhost:4000
Admin Panelhttp://localhost:3002
API Docshttp://localhost:4000/docs

Database Sync

Как работает dev-db-sync.sh

Использование

# Аргументом
bash scripts/db/dev-db-sync.sh root@1.2.3.4

# Или через env (backend/.env)
# DEV_SYNC_SSH_HOST=root@1.2.3.4
bash scripts/db/dev-db-sync.sh

Скрипт автоматически:

  1. Находит PostgreSQL контейнер на сервере
  2. Определяет имя БД и пользователя из env контейнера
  3. Запрашивает подтверждение
  4. Выполняет drop + create + restore

Когда обновлять данные

  • После изменений в Prisma schema (новые модели, поля)
  • Когда нужны свежие данные для тестирования UI
  • После крупных миграций на production

Architecture


Управление

ДействиеКоманда
Запускdocker compose -f docker-compose.dev.yml up -d
Остановкаdocker compose -f docker-compose.dev.yml down
Логиdocker compose -f docker-compose.dev.yml logs -f
Полная очистка (с данными)docker compose -f docker-compose.dev.yml down -v
Синхронизация prod данныхbash scripts/db/dev-db-sync.sh SSH_HOST
Применить Prisma schemacd backend && npx prisma db push
Prisma Studio (GUI)cd backend && npx prisma studio

Troubleshooting

ПроблемаПричинаРешение
Port 5432 already in useWindows PostgreSQL или другой контейнерОстановить конфликтующий сервис или изменить порт в docker-compose.dev.yml
Port 6379 already in useWindows Redis или другой контейнерАналогично
Backend стартует без RedisRedis опционаленBackend работает без кэша (медленнее, но функционально)
pg_restore version mismatchРазные минорные версии PostgreSQLОбычно не критично с -Fc форматом. Обновить image если ошибки
WSL2: localhost не доступен из WindowsNAT networking modeИспользовать IP из hostname -I или включить networkingMode=mirrored в .wslconfig
dev-db-sync.sh: permission deniedSSH ключи не настроеныНастроить SSH key auth: ssh-copy-id root@server