Быстрый старт
Разбор 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 окружениях.