name: islandflow-vps x-build-contexts: &build-contexts context: . additional_contexts: workspace: ./workspace-root apps: ../../apps services: ../../services packages: ../../packages x-service-common: &service-common build: <<: *build-contexts dockerfile: Dockerfile.service env_file: - ./.env restart: unless-stopped init: true extra_hosts: - "host.docker.internal:host-gateway" depends_on: nats: condition: service_started clickhouse: condition: service_healthy redis: condition: service_healthy services: web: build: <<: *build-contexts dockerfile: Dockerfile.web args: NEXT_PUBLIC_API_URL: ${NEXT_PUBLIC_API_URL:-} NEXT_PUBLIC_NBBO_MAX_AGE_MS: ${NEXT_PUBLIC_NBBO_MAX_AGE_MS:-1000} env_file: - ./.env restart: unless-stopped init: true expose: - "3000" networks: - default - shared depends_on: api: condition: service_healthy healthcheck: test: [ "CMD", "bun", "-e", "const r=await fetch('http://127.0.0.1:3000/'); if(!r.ok) throw new Error('web healthcheck failed: '+r.status);" ] interval: 30s timeout: 10s retries: 5 start_period: 45s api: <<: *service-common command: ["services/api/src/index.ts"] expose: - "4000" networks: - default - shared healthcheck: test: [ "CMD", "bun", "-e", "const r=await fetch('http://127.0.0.1:4000/health'); if(!r.ok) throw new Error('api healthcheck failed: '+r.status);" ] interval: 30s timeout: 10s retries: 5 start_period: 20s compute: <<: *service-common command: ["services/compute/src/index.ts"] candles: <<: *service-common command: ["services/candles/src/index.ts"] ingest-options: build: <<: *build-contexts dockerfile: Dockerfile.ingest-options env_file: - ./.env restart: unless-stopped init: true extra_hosts: - "host.docker.internal:host-gateway" depends_on: nats: condition: service_started clickhouse: condition: service_healthy redis: condition: service_healthy command: ["services/ingest-options/src/index.ts"] ingest-equities: <<: *service-common command: ["services/ingest-equities/src/index.ts"] replay: <<: *service-common profiles: ["replay"] command: ["services/replay/src/index.ts"] clickhouse: image: clickhouse/clickhouse-server:23.8 restart: unless-stopped ulimits: nofile: soft: 262144 hard: 262144 volumes: - clickhouse-data:/var/lib/clickhouse - ./clickhouse/listen.xml:/etc/clickhouse-server/config.d/listen.xml:ro healthcheck: test: [ "CMD-SHELL", "wget -qO- http://127.0.0.1:8123/ping | grep -q Ok." ] interval: 10s timeout: 5s retries: 12 start_period: 20s redis: image: redis:7.2 restart: unless-stopped command: ["redis-server", "--appendonly", "yes"] volumes: - redis-data:/data healthcheck: test: [ "CMD", "redis-cli", "ping" ] interval: 10s timeout: 5s retries: 10 start_period: 5s nats: image: nats:2.10 restart: unless-stopped command: ["-js", "-sd", "/data"] volumes: - nats-data:/data networks: shared: external: true name: ${NPM_SHARED_NETWORK:-npm-shared} volumes: clickhouse-data: redis-data: nats-data: