Последнее обновление: 2026-06-20
Документ описывает запуск backend-монолита Smarty в режиме локальной разработки и production.
| Компонент | Минимальная версия | Целевая версия | Примечание |
|---|---|---|---|
| Node.js | 20.19 | 24 LTS | Dev-окружение — Node 26.1.0 |
| npm | 10+ | — | |
| Docker / Docker Compose | 24+ | — | Для инфраструктурных сервисов |
| PM2 | 5+ | — | Для production/staging |
Все внешние зависимости поднимаются одной командой из корня smarty-code:
docker compose -f docker-compose.local.yml up -d
Состав стека:
| Контейнер | Образ | Порты | Назначение |
|---|---|---|---|
| smarty-mongo | mongo:5.0 | 27017 | Основная БД |
| smarty-redis | redis:6.2 | 6379 | Кэш, pub/sub |
| smarty-rabbitmq | rabbitmq:3.13-management | 5672 (AMQP), 15672 (UI) | Message broker |
| smarty-meilisearch | meilisearch:v1.15 | 7700 | Полнотекстовый поиск |
| smarty-temporal | temporalio/auto-setup:1.26.2 | 7233 (gRPC), 8233 (Web UI) | Durable execution |
| smarty-qdrant | qdrant:v1.13.6 | 6333 (REST), 6334 (gRPC) | Vector search (RAG) |
Проверить состояние:
docker compose -f docker-compose.local.yml ps
Остановить:
docker compose -f docker-compose.local.yml down
cd smarty-backend-stable
npm install
Backend использует библиотеку config (node-config). Конфигурация загружается из config/ в порядке:
config/default.js → базовые значения
config/test.js → переопределения для тестов (NODE_ENV=test)
.env / переменные окружения → секреты и env-специфичные настройки
Файла config/production.js нет — боевые параметры задаются через переменные окружения.
# MongoDB
MONGO_URI=mongodb://localhost:27017/crm
# Redis
REDIS_HOST=localhost
REDIS_PORT=6379
# RabbitMQ
RABBITMQ_URL=amqp://smarty:smarty@localhost:5672
# AI провайдеры
AI_PROVIDER_OPENAI_KEY=sk-...
AI_PROVIDER_ANTHROPIC_KEY=sk-ant-...
# Meilisearch
MEILI_HOST=http://localhost:7700
MEILI_MASTER_KEY=smarty-meili-local-key
# Qdrant
QDRANT_URL=http://localhost:6333
# Temporal
TEMPORAL_ADDRESS=localhost:7233
Полный список — в config/default.js. Секреты хранить в .env (файл gitignored), не коммитить.
В dev-режиме все сервисы запускаются единым процессом через scripts/local.js:
cd smarty-backend-stable
NODE_ENV=local node start.js
Или напрямую:
NODE_ENV=local node -e "require('./scripts/local.js')"
API доступно по: http://localhost:27123/api/v2
Один процесс включает:
LOCAL_ATTACH_SOCKET=false NODE_ENV=local node start.js
Тесты используют реальные Docker-сервисы (не in-memory стабы).
Предварительно поднять Docker Compose (см. раздел 1).
# Полный прогон (174 теста)
NODE_ENV=test SMARTY_REAL_SERVICES=true npm run test:regression
# Отдельная директория
NODE_ENV=test SMARTY_REAL_SERVICES=true npx mocha 'test/login/**/*.spec.js'
Нельзя запускать несколько mocha-процессов параллельно — порты 27123 и 8088 занимает первый.
Подробная конфигурация — в OBSERVABILITY.md.
# Добавить в команду запуска
NODE_OPTIONS='-r ./lib/tracing.js'
OTEL_ENABLED=true
OTEL_SERVICE_NAME=smarty-api
OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4318
METRICS_ENABLED=true
# Опционально: защита токеном
METRICS_TOKEN=your-internal-token
Endpoint: GET http://localhost:27123/metrics
SENTRY_DSN=https://xxxx@sentry.io/yyyy
SENTRY_ENVIRONMENT=development
В production каждый сервис запускается отдельным PM2-процессом. Пример:
# Запустить все сервисы из ecosystem-конфига
pm2 start ecosystem.config.cjs
# Статус
pm2 status
# Логи
pm2 logs smarty-api --lines 100
Рекомендуемые аргументы для Node при включённом OTEL:
// ecosystem.config.cjs
{
name: 'smarty-api',
script: 'api-rest/service.js',
node_args: '-r ./lib/tracing.js',
env: {
NODE_ENV: 'production',
OTEL_ENABLED: 'true',
OTEL_SERVICE_NAME: 'smarty-api',
METRICS_ENABLED: 'true'
}
}
| Профиль | Размер | Инфраструктура |
|---|---|---|
| Малый (1–50 пользователей) | 1 сервер | Docker Compose |
| Средний (50–200) | 2–3 ноды | K3s |
| Крупный (200+) | 5+ нод | Kubernetes |
K8s в малый профиль не тащить — overhead ~2–4 GB RAM ещё до первого сервиса.
# Healthcheck API
curl http://localhost:27123/api/v2/health
# Метрики (если METRICS_ENABLED=true)
curl http://localhost:27123/metrics | head -20
# RabbitMQ UI
open http://localhost:15672 # guest / guest (dev) или smarty / smarty (docker-compose)
# Temporal Web UI
open http://localhost:8233
# Meilisearch health
curl http://localhost:7700/health