Skip to main content

Docker и окружения разработки

Как контейнеризирована Lowcode Platform, как устроены окружения разработки, тестирования и продакшена.

🎯 Зачем эта страница

Эта страница объясняет:

  • как устроены Docker-окружения Lowcode Platform;
  • что делают docker-compose.dev.yml и docker-compose.test.yml;
  • как поднимаются API и база данных PostgreSQL;
  • как автоматически применяются миграции Prisma;
  • как использовать Docker в локальной разработке и e2e-тестах.

1. Зачем Docker используется в проекте

Docker позволяет:

  • изолировать окружение разработки;
  • обеспечить одинаковое поведение на всех машинах;
  • запускать backend + БД одной командой;
  • использовать отдельный стек для e2e-тестов;
  • легко поднимать CI-окружения.

В итоге весь backend можно запустить без установки локального PostgreSQL.


2. Основные Docker-файлы в проекте

В apps/api обычно находятся:

apps/api/
Dockerfile ← образ API
docker-compose.dev.yml
docker-compose.test.yml

Назначение файлов

ФайлНазначение
DockerfileСборка образа API (NestJS + Node.js)
docker-compose.dev.ymlОкружение для локальной разработки
docker-compose.test.ymlОкружение для e2e-тестирования

3. Dockerfile API

Типовая структура:

FROM node:18-alpine AS builder
WORKDIR /app
COPY . .
RUN pnpm install --frozen-lockfile
RUN pnpm build

FROM node:18-alpine AS runner
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
CMD ["node", "dist/main.js"]

Задача Dockerfile:

  • установить зависимости;
  • собрать NestJS-приложение;
  • поместить артефакты в финальный минимальный образ.

4. docker-compose.dev.yml — окружение для разработки

Типичный compose выглядит так:

version: '3.9'
services:
api:
build: .
command: pnpm start:dev
environment:
DATABASE_URL: postgresql://postgres:postgres@db:5432/lowcode
ports:
- '3001:3001'
depends_on:
- db

db:
image: postgres:15
restart: always
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
POSTGRES_DB: lowcode
volumes:
- db_data:/var/lib/postgresql/data

volumes:
db_data:

Что происходит при запуске dev-окружения

cd apps/api
docker compose -f docker-compose.dev.yml up --build
  • поднимается контейнер PostgreSQL;
  • поднимается api с командой pnpm start:dev;
  • NestJS работает через Fastify и доступен на http://localhost:3001;
  • БД хранится в volume db_data.

Главное: база не пробрасывается наружу — безопасная изоляция.


5. Миграции Prisma в Docker

В dev-окружении миграции применяются автоматически:

  • при старте контейнера API выполняется команда типа:
pnpm prisma:migrate-deploy

Это гарантирует, что схема БД актуальна.

Так сделано и в dev, и в test окружениях.


6. docker-compose.test.yml — окружение для e2e-тестов

E2E-тесты требуют чистой БД.

Обычно используется отдельный compose:

version: '3.9'
services:
api-test:
build: .
command: pnpm start:test
environment:
DATABASE_URL: postgresql://postgres:postgres@db-test:5432/lowcode_test
depends_on:
- db-test

db-test:
image: postgres:15
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
POSTGRES_DB: lowcode_test

При каждом запуске тестового окружения база пересоздаётся.


7. Использование Docker в разработке

7.1. Запуск API + БД локально без Docker

Можно работать без контейнеров:

pnpm --filter @lowcode/api dev

Требуется локально установленный PostgreSQL + .env с DATABASE_URL.

7.2. Запуск API + БД через Docker

cd apps/api
docker compose -f docker-compose.dev.yml up --build

Полезно, если нет локального PostgreSQL.

7.3. Запуск e2e-тестов через Docker

docker compose -f docker-compose.test.yml up --build --abort-on-container-exit

После завершения тестов контейнеры останавливаются.


8. Где находятся ключевые файлы

КомпонентПутьОписание
Dockerfile APIapps/api/DockerfileОбраз backend
Dev Composeapps/api/docker-compose.dev.ymlОкружение для разработки
Test Composeapps/api/docker-compose.test.ymlОкружение для e2e
Prisma схемаapps/api/prisma/schema.prismaМодели БД
Prisma миграцииapps/api/prisma/migrations/*Изменения схемы

9. Что должен знать разработчик

  1. Как запустить API + БД в Docker.
  2. Как устроены dev/test окружения.
  3. Что миграции применяются автоматически при старте контейнера.
  4. Как использовать Docker, если локальной БД нет.
  5. Как поднять тестовый контейнер для e2e.

Этого достаточно, чтобы уверенно работать с инфраструктурой проекта.