Barfinex

Быстрый старт

Разбор docker-compose.yml для Barfinex Provider

Из каких контейнеров состоит стенд Barfinex Provider, какие задачи решает каждый сервис и как они связаны между собой.

🧱 Структура стенда

Стенд Barfinex Provider — это небольшой кластер из нескольких сервисов. Каждый контейнер в этом стенде выполняет свою роль: от обработки рыночных данных и хранения состояния до кеширования, администрирования и управления самим Docker-окружением. Благодаря такой схеме вы получаете воспроизводимую инфраструктуру, которую можно поднять, остановить или перенести на другой сервер одной командой, не разбирая вручную зависимости между сервисами.

Зачем нужен docker-compose.yml

Файл docker-compose.yml описывает весь стенд, необходимый для работы Barfinex Provider:

  • сам сервис provider;
  • базы данных и кеш (mongo, postgres, redis);
  • веб-интерфейсы для администрирования (mongo-express, redis-commander, portainer);
  • общую сеть и тома для хранения данных и конфигов.

Запуск одной командой:

docker compose up -d

Общая структура

Ниже приведён типичный состав docker-compose.yml (структура, а не полный листинг):

services:
  provider:
    ...
  mongo:
    ...
  mongo-express:
    ...
  redis:
    ...
  redis-commander:
    ...
  portainer:
    ...
  postgres:
    ...
networks:
  barfinapp-network:
    driver: bridge

Разберём, за что отвечает каждый сервис.


🟦 provider — основной сервис Barfinex Provider

Главный контейнер, в котором запускается приложение Barfinex Provider (Node.js + NestJS).

Ключевые блоки:

provider:
  container_name: ${PROVIDER_CONTAINER_NAME}
  image: ${PROVIDER_IMAGE}
  restart: "no"
  privileged: true
  env_file:
    - .env
  environment:
    - MONGO_HOST=${MONGO_HOST}
    - REDIS_HOST=${REDIS_HOST}
    - NODE_ENV=production
    - NODE_OPTIONS=--max-old-space-size=4096
    - BINANCE_API_KEY=${BINANCE_API_KEY}
    - BINANCE_API_SECRET=${BINANCE_API_SECRET}
    - TESTNET_BINANCE_SPOT_KEY=${TESTNET_BINANCE_SPOT_KEY}
    - TESTNET_BINANCE_SPOT_SECRET=${TESTNET_BINANCE_SPOT_SECRET}
  command: ${PROVIDER_COMMAND}
  ports:
    - "${PROVIDER_API_PORT}:${PROVIDER_API_PORT}"
  networks:
    - barfinapp-network
  depends_on:
    - redis
    - mongo
  stdin_open: true
  tty: true
  volumes:
    ...

Что важно:

  • image — образ Barfinex Provider (обычно из GHCR: ghcr.io/barfinex/provider:tag);
  • env_file + environment — настройки окружения (Mongo, Redis, Binance-ключи и др.);
  • ports — проброс API-порта наружу;
  • depends_on — сначала поднимаются Redis и Mongo;
  • volumes — монтирование конфигов, сертификатов и ключей.

Volumes Barfinex Provider

volumes:
  # 🔧 Основные конфиги
  - ./docker-config/config.json:/usr/src/app/config.json:ro
  - ./docker-config/config.provider.json:/usr/src/app/config.provider.json:ro
  - ./docker-config/config.advisor.json:/usr/src/app/config.advisor.json:ro
  - ./docker-config/config.detector.json:/usr/src/app/config.detector.json:ro
  - ./docker-config/config.inspector.json:/usr/src/app/config.inspector.json:ro
  - ./docker-config:/usr/src/app/config:ro

  # 🔐 SSL-сертификаты (mkcert)
  - ./cert/localhost+2-key.pem:/usr/src/app/cert/localhost+2-key.pem:ro
  - ./cert/localhost+2.pem:/usr/src/app/cert/localhost+2.pem:ro

  # 🔑 Ключи доступа (биржи, сервисы)
  - ./data/keys:/usr/src/app/.keys

  # 🕒 Синхронизация времени (опционально)
  - /etc/localtime:/etc/localtime:ro
  - /etc/timezone:/etc/timezone:ro
  • Конфиги — JSON-файлы с настройкой модулей (provider/advisor/detector/inspector);
  • Сертификаты — для HTTPS (mkcert для локалки или боевые сертификаты);
  • Ключи — безопасное хранение файловых ключей;
  • Время — синхронизация часового пояса контейнера с хостом.

🟩 mongo — хранилище данных

mongo:
  container_name: ${MONGO_CONTAINER_NAME}
  image: ${MONGO_IMAGE}
  restart: always
  ports:
    - "${MONGO_PORT}:${MONGO_PORT}"
  volumes:
    - ./data/mongo:/data/db
    - ./docker-config/mongo-init-db.js:/docker-entrypoint-initdb.d/init-db.js:ro
  networks:
    - barfinapp-network
  • Хранит агрегированные данные и состояние.
  • ./data/mongo — папка с данными на хосте.
  • Скрипт mongo-init-db.js запускается при первом старте и инициализирует базу.

🟦 mongo-express — веб-интерфейс к MongoDB

mongo-express:
  container_name: ${MONGO_EXPRESS_CONTAINER_NAME}
  image: ${MONGO_EXPRESS_IMAGE}
  restart: always
  ports:
    - "${MONGO_EXPRESS_PORT}:8081"
  environment:
    ME_CONFIG_BASICAUTH_USERNAME: ${MONGO_ROOT_USERNAME}
    ME_CONFIG_BASICAUTH_PASSWORD: ${MONGO_ROOT_PASSWORD}
    ME_CONFIG_MONGODB_SERVER: ${MONGO_CONTAINER_NAME}
  depends_on:
    - mongo
  networks:
    - barfinapp-network

Позволяет:

  • смотреть коллекции и документы;
  • быстро проверять, приходят ли данные от Barfinex Provider;
  • не заходить в Mongo через консоль.

⚠️ Не забудьте настроить базовую авторизацию через переменные окружения.


🟥 redis — кеш и шина событий

redis:
  container_name: ${REDIS_CONTAINER_NAME}
  image: ${REDIS_IMAGE}
  restart: always
  ports:
    - "${REDIS_PORT}:${REDIS_PORT}"
  networks:
    - barfinapp-network
  • Barfinex Provider использует Redis как шину событий и кеш.
  • Важно, чтобы REDIS_HOST в .env указывал на этот сервис.

🟥 redis-commander — веб-интерфейс к Redis

redis-commander:
  container_name: ${REDIS_COMMANDER_CONTAINER_NAME}
  image: ${REDIS_COMMANDER_IMAGE}
  restart: always
  ports:
    - "${REDIS_COMMANDER_PORT}:${REDIS_COMMANDER_PORT}"
  hostname: ${REDIS_COMMANDER_HOSTNAME}
  networks:
    - barfinapp-network
  environment:
    - PORT=${REDIS_COMMANDER_PORT}
    - REDIS_HOSTS=local:${REDIS_COMMANDER_REDIS_HOST}:${REDIS_PORT}

Веб-панель для Redis, удобно:

  • смотреть ключи и каналы;
  • проверять, что события от Barfinex Provider действительно публикуются.

🟦 portainer — управление Docker через веб-интерфейс

portainer:
  container_name: ${PONTEINER_CONTAINER_NAME}
  image: ${PONTEINER_IMAGE}
  restart: always
  ports:
    - "${PONTEINER_PORT}:${PONTEINER_PORT}"
  volumes:
    - /var/run/docker.sock:/var/run/docker.sock
    - ./data/portainer:/data
  networks:
    - barfinapp-network
  environment:
    - ADMIN_USERNAME=${PONTEINER_ADMIN_USERNAME}
    - ADMIN_PASSWORD=${PONTEINER_ADMIN_PASSWORD}

Позволяет:

  • управлять контейнерами через браузер;
  • смотреть логи, перезапускать сервисы, обновлять образы;
  • удобно для удалённых серверов и прод-окружений.

🟨 postgres — реляционная БД

postgres:
  container_name: postgres
  image: postgres:15
  restart: always
  environment:
    POSTGRES_USER: ${DB_USERNAME}
    POSTGRES_PASSWORD: ${DB_PASSWORD}
    POSTGRES_DB: ${DB_NAME}
  ports:
    - "${DB_PORT}:5432"
  volumes:
    - ./data/postgres:/var/lib/postgresql/data
  networks:
    - barfinapp-network

Используется для хранения:

  • состояния аккаунтов,
  • конфигураций,
  • журналов и других структурированных данных (в зависимости от конфигурации проекта).

🌐 Сеть

networks:
  barfinapp-network:
    driver: bridge

Все сервисы объединены в одну сеть:

  • могут обращаться друг к другу по имени контейнера (mongo, redis, provider);
  • изолированы от других контейнеров, запущенных на хосте.

📌 Итог по docker-compose.yml

  • docker-compose.yml описывает полный стенд для работы Barfinex Provider.
  • Каждый сервис выполняет свою роль: данные, кеш, админ-панели, управление контейнерами.
  • Настройки выносите в .env, а чувствительные данные (ключи) — в тома/файлы.
  • Этот файл — основа декларативного развёртывания Barfinex Provider в dev/stage/prod окружениях.

Давайте свяжемся

Есть вопросы или хотите присоединиться к Barfinex? Напишите нам.