Market Data Service is a high-performance financial data API that provides comprehensive Symbol prices of different markets through both RESTful endpoints and real-time WebSocket connections.

docker-compose.yml 2.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. version: '3.8'
  2. services:
  3. # PostgreSQL Database Service
  4. db:
  5. image: postgres:15-alpine
  6. container_name: market-data-db
  7. environment:
  8. POSTGRES_USER: ${DB_USER:-postgres}
  9. POSTGRES_PASSWORD: ${DB_PASSWORD:-postgres}
  10. POSTGRES_DB: ${DB_NAME:-financial_data}
  11. PGDATA: /var/lib/postgresql/data/pgdata
  12. volumes:
  13. - market_data_db_data:/var/lib/postgresql/data
  14. - ./docker/init-db.sh:/docker-entrypoint-initdb.d/init-db.sh
  15. ports:
  16. - "${DB_PORT:-5432}:5432"
  17. healthcheck:
  18. test: ["CMD-SHELL", "pg_isready -U ${DB_USER:-postgres} -d ${DB_NAME:-financial_data}"]
  19. interval: 10s
  20. timeout: 5s
  21. retries: 5
  22. networks:
  23. - market-data-network
  24. restart: unless-stopped
  25. # Node.js API Service
  26. api:
  27. build:
  28. context: .
  29. dockerfile: Dockerfile
  30. target: dependencies
  31. container_name: market-data-api
  32. environment:
  33. - NODE_ENV=${NODE_ENV:-development}
  34. - PORT=${PORT:-3001}
  35. - DB_HOST=db
  36. - DB_PORT=5432
  37. - DB_NAME=${DB_NAME:-financial_data}
  38. - DB_USER=${DB_USER:-postgres}
  39. - DB_PASSWORD=${DB_PASSWORD:-postgres}
  40. - CORS_ORIGIN=${CORS_ORIGIN:-*}
  41. - JWT_SECRET=${JWT_SECRET:-change-me-in-production}
  42. - LOG_LEVEL=${LOG_LEVEL:-debug}
  43. volumes:
  44. # Mount source code for live reload in development
  45. - ./src:/app/src
  46. - ./config:/app/config
  47. - ./migrations:/app/migrations
  48. - ./models:/app/models
  49. - ./logs:/app/logs
  50. ports:
  51. - "${PORT:-3001}:3001"
  52. depends_on:
  53. db:
  54. condition: service_healthy
  55. networks:
  56. - market-data-network
  57. restart: unless-stopped
  58. # Override entrypoint for development to use nodemon with live reload
  59. entrypoint: /bin/sh
  60. command: -c "/usr/local/bin/wait-for-db.sh && node docker/sync-models.js && (npx sequelize-cli db:migrate || echo 'No migrations to run or migration skipped') && npm install -g nodemon && nodemon src/server.js"
  61. # Nginx Reverse Proxy
  62. # For local development with MT5 EA, use: http://market-data.local
  63. # Run: sudo bash scripts/setup-local-dev.sh (one-time setup)
  64. nginx:
  65. image: nginx:alpine
  66. container_name: market-data-nginx
  67. ports:
  68. - "80:80"
  69. volumes:
  70. - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
  71. depends_on:
  72. - api
  73. networks:
  74. - market-data-network
  75. restart: unless-stopped
  76. healthcheck:
  77. test: ["CMD", "wget", "--quiet", "--tries=1", "--spider", "http://localhost/health"]
  78. interval: 30s
  79. timeout: 10s
  80. retries: 3
  81. volumes:
  82. market_data_db_data:
  83. driver: local
  84. networks:
  85. market-data-network:
  86. driver: bridge