Quick Start - Быстрый старт для разработчиков
Пошаговое руководство для быстрого запуска системы EFKO Kernel в режиме разработки.
Требования к окружению
Обязательные
- Node.js — версии 20.x или выше
- npm — версии 9.x или выше (или pnpm/yarn)
- Docker — версии 24.x или выше
- Docker Compose — версии 2.x или выше
Рекомендуемые
- Git — для клонирования репозитория
- VS Code — с расширениями для NestJS и Docker
- Postman — или другой HTTP клиент для тестирования API
Установка
1. Клонирование репозитория
2. Установка зависенций
Это установит зависимости для всего монорепозитория, включая все сервисы и библиотеки.
3. Настройка переменных окружения
Скопируйте пример файла окружения:
Отредактируйте .env при необходимости. Основные переменные:
AMQP_URI— строка подключения к RabbitMQDATABASE_URL— строки подключения к PostgreSQL для каждого сервисаMONGO_URI— строка подключения к MongoDB для ETLJWT_ACCESS_SECRET,JWT_REFRESH_SECRET— секреты для JWT токенов
Запуск инфраструктуры
Система требует следующую инфраструктуру:
- PostgreSQL (для auth, personnel, production)
- RabbitMQ (для межсервисной коммуникации)
- MongoDB (для ETL)
Запуск базовой инфраструктуры
Эта команда запустит: - PostgreSQL на порту 5432 - RabbitMQ на порту 5672 (UI на 15672) - MongoDB на порту 27017
Проверка инфраструктуры
# Проверка RabbitMQ Management UI
open http://localhost:15672
# Логин: guest / guest
# Проверка PostgreSQL
docker ps | grep postgres
# Проверка MongoDB
docker ps | grep mongo
Применение миграций базы данных
Каждый сервис с PostgreSQL требует применения миграций:
Auth Service
Personnel Service
Production Service
Запуск сервисов в режиме разработки
Запуск всех сервисов
В отдельном терминале для каждого сервиса:
# Terminal 1: Gateway
npx nx serve gateway
# Terminal 2: Auth Service
npx nx serve auth-service
# Terminal 3: Personnel Service
npx nx serve personnel
# Terminal 4: Production Service
npx nx serve production
# Terminal 5: ETL Service
npx nx serve etl
Запуск конкретного сервиса
Доступные сервисы:
- gateway
- auth-service
- personnel
- production
- etl
Проверка запуска сервисов
Каждый сервис должен показать сообщение о успешном запуске:
Проверка работоспособности
1. Проверка Gateway
Ожидаемый ответ: JSON с информацией о API или redirect на Swagger.
2. Проверка Swagger UI
Откройте в браузере:
Вы должны увидеть Swagger UI с документацией API.
3. Проверка RabbitMQ
Откройте RabbitMQ Management UI:
Проверьте наличие exchanges:
- efko.auth.commands
- efko.auth.queries
- efko.auth.events
- efko.personnel.commands
- efko.personnel.queries
- efko.personnel.events
- efko.production.commands
- efko.production.queries
- efko.production.events
4. Первый тестовый запрос
Регистрация пользователя
curl -X POST http://localhost:3000/api/auth/register \
-H "Content-Type: application/json" \
-d '{
"email": "test@example.com",
"password": "SecurePassword123!",
"fullName": "Иванов Иван Иванович",
"role": "admin"
}'
Ожидаемый ответ:
{
"id": "uuid",
"email": "test@example.com",
"fullName": "Иванов Иван",
"role": "admin",
"isActive": true,
"employeeId": null
}
Вход в систему
curl -X POST http://localhost:3000/api/auth/login \
-H "Content-Type: application/json" \
-d '{
"email": "test@example.com",
"password": "SecurePassword123!"
}'
Ожидаемый ответ:
Получение текущего пользователя
Ожидаемый ответ:
{
"id": "uuid",
"email": "test@example.com",
"fullName": "Иванов Иван",
"role": "admin",
"isActive": true,
"employeeId": null
}
Seed данных (опционально)
Для заполнения базы данных тестовыми данными:
# Seed всех сервисов
npm run seed:all
# Или по отдельности
npm run seed:auth
npm run seed:personnel
npm run seed:production
Запуск с Observability Stack
Для запуска с полным стеком мониторинга (Grafana, Loki, Tempo):
Доступные UI: - Grafana: http://localhost:3000 - Loki: http://localhost:3100 - Tempo: http://localhost:3200
Полезные команды
Nx команды
# Сборка сервиса
npx nx build <service-name>
# Запуск тестов
npx nx test <service-name>
# Линтинг
npx nx lint <service-name>
# Показать информацию о проекте
npx nx show project <service-name>
# Граф зависимостей
npx nx graph
Prisma команды
# Создание миграции
npx prisma migrate dev --name <migration-name>
# Применение миграций в production
npx prisma migrate deploy
# Генерация клиента
npx prisma generate
# Открытие Prisma Studio
npx prisma studio
Docker команды
# Остановка инфраструктуры
docker compose down
# Остановка observability
npm run obs:down
# Сборка Docker образа сервиса
npm run docker:build:<service-name>
# Сборка всех образов
npm run docker:build:all
# Запуск production стека
npm run prod:up
# Логи production
npm run prod:logs
Структура проекта
efko-kernel/
├── apps/ # Сервисы
│ ├── gateway/ # API Gateway
│ ├── auth-service/ # Auth Service
│ ├── personnel/ # Personnel Service
│ ├── production/ # Production Service
│ └── etl/ # ETL Service
├── libs/ # Общие библиотеки
│ ├── contracts/ # RabbitMQ контракты
│ ├── interfaces/ # TypeScript интерфейсы
│ └── nest-utils/ # NestJS утилиты
├── docs/ # Документация
├── docker/ # Docker конфигурации
└── tools/ # Инструменты и скрипты
Разработка
Добавление нового сервиса
Добавление новой библиотеки
Работа с контрактами
Контракты находятся в libs/contracts/src/:
auth/— auth команды, запросы, событияpersonnel/— personnel команды, запросы, событияproduction/— production команды, запросы, событияetl/— etl события
При добавлении новой команды/события:
- Создайте файл в соответствующей папке
- Добавьте export в
index.ts - Обновите потребляющий сервис
Логирование
Логи пишутся в папку logs/ в dev режиме:
logs/gateway.loglogs/auth-service.loglogs/personnel.loglogs/production.loglogs/etl.log
Файлы очищаются при каждом запуске сервиса.
Troubleshooting
Сервис не запускается
-
Проверьте, что инфраструктура запущена:
-
Проверьте логи сервиса в
logs/<service>.log -
Проверьте переменные окружения в
.env
RabbitMQ connection error
-
Проверьте, что RabbitMQ запущен:
-
Проверьте
AMQP_URIв.env -
Перезапустите RabbitMQ:
Database connection error
-
Проверьте, что PostgreSQL запущен:
-
Проверьте
DATABASE_URLв.env -
Примените миграции:
Порт уже занят
Если порт занят, измените его в .env или остановите процесс:
Следующие шаги
После успешного запуска:
- Изучите Архитектуру системы
- Ознакомьтесь с API Reference
- Изучите Events Catalog
- Прочитайте Модели данных
- Изучите Безопасность