synor/docker-compose.dex-services.yml
Gulshan Yadav e2ce0022e5 feat(dex): add Docker deployment for DEX ecosystem services
- Add Dockerfile.contracts for building WASM contracts
- Add docker-compose.dex.yml for full DEX deployment
- Add docker-compose.dex-services.yml for lightweight services
- Add Node.js services for DEX ecosystem:
  - Oracle service (port 17500) - Price feeds with TWAP
  - Perps engine (port 17510) - Perpetual futures 2x-100x
  - Aggregator (port 17520) - Cross-chain liquidity routing
  - DEX API Gateway (port 17530) - Unified trading interface

Services verified operational on Docker Desktop.
2026-01-19 19:59:30 +05:30

177 lines
5.3 KiB
YAML

# Synor DEX Services - Docker Compose (Lightweight)
# DEX services without contract building (contracts built separately)
#
# Usage:
# docker compose -f docker-compose.dex-services.yml up -d
#
# Ports:
# 17500 - Oracle API
# 17510 - Perps REST API
# 17520 - Aggregator API
# 17530 - DEX API Gateway
# 17540 - Redis
services:
# ==========================================================================
# Redis - State Cache & Pub/Sub (starts first)
# ==========================================================================
dex-redis:
image: redis:7-alpine
container_name: synor-dex-redis
hostname: dex-redis
restart: unless-stopped
command: redis-server --appendonly yes --maxmemory 512mb --maxmemory-policy allkeys-lru
ports:
- "17540:6379"
networks:
- synor-dex-net
volumes:
- dex-redis-data:/data
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 5s
retries: 3
# ==========================================================================
# Oracle Service - Price Feed Aggregation
# ==========================================================================
oracle-service:
image: node:20-alpine
container_name: synor-oracle-service
hostname: oracle-service
restart: unless-stopped
working_dir: /app
volumes:
- ./docker/dex/oracle:/app:ro
environment:
- NODE_ENV=production
- PORT=17500
- UPDATE_INTERVAL_MS=1000
- STALE_THRESHOLD_MS=60000
ports:
- "17500:17500"
networks:
- synor-dex-net
depends_on:
dex-redis:
condition: service_healthy
healthcheck:
test: ["CMD", "node", "-e", "require('http').get('http://localhost:17500/health', (r) => process.exit(r.statusCode === 200 ? 0 : 1)).on('error', () => process.exit(1))"]
interval: 15s
timeout: 5s
retries: 3
start_period: 10s
command: ["node", "index.js"]
# ==========================================================================
# Perpetuals Engine - Leveraged Trading (2x-100x)
# ==========================================================================
perps-engine:
image: node:20-alpine
container_name: synor-perps-engine
hostname: perps-engine
restart: unless-stopped
working_dir: /app
volumes:
- ./docker/dex/perps:/app:ro
environment:
- NODE_ENV=production
- PORT=17510
- MIN_LEVERAGE=2
- MAX_LEVERAGE=100
- MAINTENANCE_MARGIN_BPS=50
- LIQUIDATION_FEE_BPS=500
- FUNDING_INTERVAL_HOURS=8
- ORACLE_URL=http://oracle-service:17500
ports:
- "17510:17510"
networks:
- synor-dex-net
depends_on:
oracle-service:
condition: service_healthy
healthcheck:
test: ["CMD", "node", "-e", "require('http').get('http://localhost:17510/health', (r) => process.exit(r.statusCode === 200 ? 0 : 1)).on('error', () => process.exit(1))"]
interval: 15s
timeout: 5s
retries: 3
start_period: 10s
command: ["node", "index.js"]
# ==========================================================================
# Liquidity Aggregator - Cross-chain DEX Routing
# ==========================================================================
aggregator:
image: node:20-alpine
container_name: synor-aggregator
hostname: aggregator
restart: unless-stopped
working_dir: /app
volumes:
- ./docker/dex/aggregator:/app:ro
environment:
- NODE_ENV=production
- PORT=17520
- AGGREGATION_FEE_BPS=5
- MAX_SLIPPAGE_BPS=100
- ORACLE_URL=http://oracle-service:17500
ports:
- "17520:17520"
networks:
- synor-dex-net
depends_on:
oracle-service:
condition: service_healthy
healthcheck:
test: ["CMD", "node", "-e", "require('http').get('http://localhost:17520/health', (r) => process.exit(r.statusCode === 200 ? 0 : 1)).on('error', () => process.exit(1))"]
interval: 15s
timeout: 5s
retries: 3
start_period: 10s
command: ["node", "index.js"]
# ==========================================================================
# DEX API Gateway - Unified Trading Interface
# ==========================================================================
dex-api:
image: node:20-alpine
container_name: synor-dex-api
hostname: dex-api
restart: unless-stopped
working_dir: /app
volumes:
- ./docker/dex/api:/app:ro
environment:
- NODE_ENV=production
- PORT=17530
- ORACLE_URL=http://oracle-service:17500
- PERPS_URL=http://perps-engine:17510
- AGGREGATOR_URL=http://aggregator:17520
ports:
- "17530:17530"
networks:
- synor-dex-net
depends_on:
perps-engine:
condition: service_healthy
aggregator:
condition: service_healthy
healthcheck:
test: ["CMD", "node", "-e", "require('http').get('http://localhost:17530/health', (r) => process.exit(r.statusCode === 200 ? 0 : 1)).on('error', () => process.exit(1))"]
interval: 15s
timeout: 5s
retries: 3
start_period: 10s
command: ["node", "index.js"]
networks:
synor-dex-net:
driver: bridge
ipam:
config:
- subnet: 172.28.0.0/16
volumes:
dex-redis-data:
driver: local