Getting started

🚀 Приступая к работе

В экосистеме Barfinex каждый компонент отвечает за свою функцию. Начните с развертывания Provider — сервиса рыночных данных и расширенного API для работы с вашим торговым счетом. Следом установите Detector — аналитический модуль стратегий и сигналов. Эти два элемента составляют основу автоматизации торговли в Barfinex и позволяют перейти от наблюдения к действию.

🚀 Быстрый запуск

1. Установка зависимостей

git clone https://github.com/barfinex/app-provider.git
cd app-provider

2. Настройка окружения

Создай файл .env на основе шаблона:

cp .env.example .env

Пример переменных:

NODE_ENV=production
MONGO_HOST=mongodb://localhost:27017
REDIS_HOST=redis://localhost:6379
BINANCE_API_KEY=your_key
BINANCE_API_SECRET=your_secret

3. Запуск через Docker Compose

Файл docker-compose.yml должен находиться в корне проекта

docker compose up -d

4. Проверить, что всё запущено

docker compose ps

Ты должен увидеть что-то вроде:

NAME                  IMAGE                            STATUS         PORTS
barfinex-provider     ghcr.io/barfinex/provider:latest Up 0.0.0.0:3001->3001/tcp
barfinex-detector     ghcr.io/barfinex/detector:latest Up 0.0.0.0:3002->3002/tcp
redis                 redis:7                          Up 6379/tcp
mongo                 mongo:6                          Up 27017/tcp
  1. Посмотреть логи
docker compose logs -f provider

Каждый этап сопровождается характерными логами — их можно использовать для быстрой диагностики и DevOps-отчётов.

🪄 Структура запуска

ЭтапКомпонентНазначение
1️⃣HTTPS InitializationНастройка TLS и окружения
2️⃣Configuration LoadЗагрузка и валидация JSON-конфигов
3️⃣Dependency GraphИнициализация NestJS модулей
4️⃣Redis ConnectionПодключение к шине событий
5️⃣Binance API SetupАвторизация и тест-пинг биржи
6️⃣SubscriptionsРегистрация внутренних каналов
7️⃣Application ReadyREST + WS серверы активны

🔍 Подробное объяснение логов

1️⃣ HTTPS включён

✅ HTTPS включён (сертификаты загружены)

Что значит:
Сертификаты успешно найдены и загружены. Сервер доступен по https://localhost:8081.

Ошибки и кейсы:

  • ENOENT: no such file or directory, open './cert.pem' — отсутствует сертификат
    → проверь путь в .env (SSL_CERT_PATH, SSL_KEY_PATH)
  • Если нужен самоподписанный: mkcert localhost и добавь сертификаты в .cert/

2️⃣ Конфигурация загружена

🧩 Config path resolved to: ...config.json
📄 Loading nested config for "provider": config.provider.json
✅ Configuration successfully loaded.

Что значит:
Загружен основной конфиг и его дочерние файлы. Конфигурация прошла парсинг без ошибок.

Ошибки и кейсы:

  • File not found — файл не найден → создай по шаблону config.example.provider.json
  • Error parsing JSON — ошибка синтаксиса → проверь запятые, кавычки
  • Provider key not found — в provider.connectors отсутствует ключ
    → добавь key и secret в нужный объект

3️⃣ NestJS Modules Initialized

[Nest] ... LOG [InstanceLoader] ConfigModule dependencies initialized

Что значит:
Модули приложения успешно инициализированы. Ошибка здесь прерывает запуск.

Ошибки и кейсы:

  • Cannot find module '@barfinex/types' — проверь tsconfig-paths
  • Nest can't resolve dependencies — отсутствует импорт или forwardRef

4️⃣ Redis подключен

Connecting to Redis on localhost:6379
✅ Connected to Redis successfully!

Что значит:
Сервис подключился к Redis. Подписки на события активны.

Ошибки и кейсы:

  • ECONNREFUSED 127.0.0.1:6379 — Redis не запущен → docker-compose up redis
  • Invalid TCP port — проверь REDIS_PORT в .env

5️⃣ Binance API инициализация

🧩 BinanceService initializing...
🔑 connectorKey (truncated): oQ9Ulh...
✅ Binance API initialized successfully

Что значит:
Binance-коннектор нашёл ключи и успешно создал API-объект.

Ошибки и кейсы:

ОшибкаПричинаРешение
Binance connector not foundНет блока "connectorType": "binance"Добавь в конфиг
Binance API credentials missingНет key/secretДобавь в конфиг или .env
Invalid Binance time responseBinance API недоступенПроверь ping api.binance.com

6️⃣ Проверка времени Binance

🕒 Binance time: 2025-10-31 08:53:42, Local: 2025-10-31 08:53:41

Что значит:
Синхронизация времени с Binance в норме (разница ≤ 1 сек).

Ошибки и кейсы:

  • FetchError — нет интернета / заблокировано → проверь VPN или HTTPS_PROXY
  • Error 418 — IP-ban от Binance → смени ключи или IP

7️⃣ WebSocket и REST API готовы

🚀 Provider API is running on: https://localhost:8081/api
📑 Documentation: https://localhost:8081/docs
🔌 WebSocket (Socket.IO) at: https://localhost:8081/ws

Что значит:
Сервер полностью готов: REST API, Swagger, WebSocket.

Ошибки и кейсы:

  • EADDRINUSE: address already in use :8081 — порт занят → освободи порт
  • Cannot read property 'use' — ошибка middleware → проверь main.ts

🧠 Best Practices for Monitoring

ПрактикаОписание
Логировать ключевые стадииModuleInit, Config Loaded, Redis Connected, API Ready
Включить цветное логированиеИспользовать nestjs-pino или winston
Добавить health-endpoint/api/health должен проверять Redis и Binance ping
Auto-retry Redis3 попытки подключения с backoff
Pre-startup validationПроверка ключей и структуры config перед NestFactory.create()

🧩 Пример успешного запуска

✅ HTTPS включён (сертификаты загружены)
🧩 Config path resolved to: ...config.json
✅ Configuration successfully loaded.
✅ Connected to Redis successfully!
🔑 connectorKey (truncated): oQ9Ulh...
✅ Binance API initialized successfully
🕒 Binance time: 2025-10-31 08:53:42, Local: 2025-10-31 08:53:41
✅ BinanceService ModuleInit complete
🚀 Provider API is running on: https://localhost:8081/api
📑 Documentation: https://localhost:8081/docs
🔌 WebSocket (Socket.IO) at: https://localhost:8081/ws

📎 Полезные команды

redis-cli ping
curl https://api.binance.com/api/v3/time
jq . config/config.provider.json
netstat -ano | find "8081"
npm run start:provider:dev

🧰 Troubleshooting Summary

СимптомВозможная причинаРешение
Provider key not foundНет ключа в connectorsДобавь ключи Binance
ECONNREFUSED RedisRedis не запущенdocker-compose up redis
API not initializedBinanceService не успел инициализироватьсяИгнорировать при старте
Invalid JSONОшибка синтаксисаПроверить через jq
✅ Всё зелёноеСервис готов🎯

📘 Резюме

  • Каждый лог отражает стадию запуска Provider.
  • Все ключевые метки (, 🧩, 🕒, 🚀) — признак корректного запуска.
  • Ошибки Redis, конфигурации или Binance диагностируются мгновенно.
  • Рекомендуется сохранять лог старта в CI/CD для контроля успешного деплоя.