| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- version: '3.8'
- services:
- # PostgreSQL Database Service
- db:
- image: postgres:15-alpine
- container_name: market-data-db
- environment:
- POSTGRES_USER: ${DB_USER:-postgres}
- POSTGRES_PASSWORD: ${DB_PASSWORD:-postgres}
- POSTGRES_DB: ${DB_NAME:-financial_data}
- PGDATA: /var/lib/postgresql/data/pgdata
- volumes:
- - market_data_db_data:/var/lib/postgresql/data
- - ./docker/init-db.sh:/docker-entrypoint-initdb.d/init-db.sh
- ports:
- - "${DB_PORT:-5432}:5432"
- healthcheck:
- test: ["CMD-SHELL", "pg_isready -U ${DB_USER:-postgres} -d ${DB_NAME:-financial_data}"]
- interval: 10s
- timeout: 5s
- retries: 5
- networks:
- - market-data-network
- restart: unless-stopped
- # Node.js API Service
- api:
- build:
- context: .
- dockerfile: Dockerfile
- target: dependencies
- container_name: market-data-api
- environment:
- - NODE_ENV=${NODE_ENV:-development}
- - PORT=${PORT:-3001}
- - DB_HOST=db
- - DB_PORT=5432
- - DB_NAME=${DB_NAME:-financial_data}
- - DB_USER=${DB_USER:-postgres}
- - DB_PASSWORD=${DB_PASSWORD:-postgres}
- - CORS_ORIGIN=${CORS_ORIGIN:-*}
- - JWT_SECRET=${JWT_SECRET:-change-me-in-production}
- - LOG_LEVEL=${LOG_LEVEL:-debug}
- volumes:
- # Mount source code for live reload in development
- - ./src:/app/src
- - ./config:/app/config
- - ./migrations:/app/migrations
- - ./models:/app/models
- - ./logs:/app/logs
- ports:
- - "${PORT:-3001}:3001"
- depends_on:
- db:
- condition: service_healthy
- networks:
- - market-data-network
- restart: unless-stopped
- # Override entrypoint for development to use nodemon with live reload
- entrypoint: /bin/sh
- 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"
- # Nginx Reverse Proxy
- # For local development with MT5 EA, use: http://market-data.local
- # Run: sudo bash scripts/setup-local-dev.sh (one-time setup)
- nginx:
- image: nginx:alpine
- container_name: market-data-nginx
- ports:
- - "80:80"
- volumes:
- - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
- depends_on:
- - api
- networks:
- - market-data-network
- restart: unless-stopped
- healthcheck:
- test: ["CMD", "wget", "--quiet", "--tries=1", "--spider", "http://localhost/health"]
- interval: 30s
- timeout: 10s
- retries: 3
- volumes:
- market_data_db_data:
- driver: local
- networks:
- market-data-network:
- driver: bridge
|