version: '3.8' services: apigateway: build: . ports: - "5000:80" depends_on: - redis - postgres environment: - ASPNETCORE_ENVIRONMENT=Development - Redis__ConnectionString=redis:6379 deploy: replicas: 3 resources: limits: cpus: '1.0' memory: 1G authservice: build: . ports: - "5001:80" depends_on: - postgres environment: - ASPNETCORE_ENVIRONMENT=Development deploy: replicas: 2 matchmaking: build: . ports: - "5002:80" depends_on: - redis environment: - ASPNETCORE_ENVIRONMENT=Development - Redis__ConnectionString=redis:6379 deploy: replicas: 2 gamesession: build: . ports: - "5003:80" depends_on: - redis environment: - ASPNETCORE_ENVIRONMENT=Development - Redis__ConnectionString=redis:6379 deploy: replicas: 2 gamesessionworker: build: . depends_on: - redis environment: - ASPNETCORE_ENVIRONMENT=Development - Redis__ConnectionString=redis:6379 deploy: replicas: 5 resources: limits: cpus: '2.0' memory: 2G playerstate: build: . ports: - "5004:80" depends_on: - redis environment: - ASPNETCORE_ENVIRONMENT=Development - Redis__ConnectionString=redis:6379 deploy: replicas: 2 ranking: build: . ports: - "5005:80" depends_on: - redis - postgres environment: - ASPNETCORE_ENVIRONMENT=Development - Redis__ConnectionString=redis:6379 deploy: replicas: 2 anticheat: build: . ports: - "5006:80" depends_on: - redis environment: - ASPNETCORE_ENVIRONMENT=Development - Redis__ConnectionString=redis:6379 deploy: replicas: 2 notification: build: . ports: - "5007:80" depends_on: - rabbitmq environment: - ASPNETCORE_ENVIRONMENT=Development deploy: replicas: 1 # Scale to zero when no load redis: image: redis:7-alpine ports: - "6379:6379" command: redis-server --appendonly yes volumes: - redis_data:/data deploy: replicas: 3 # Redis cluster simulation postgres: image: postgres:15-alpine environment: POSTGRES_DB: gamebackend POSTGRES_USER: user POSTGRES_PASSWORD: password ports: - "5432:5432" volumes: - postgres_data:/var/lib/postgresql/data deploy: replicas: 2 # Primary + replica rabbitmq: image: rabbitmq:3-management-alpine ports: - "5672:5672" - "15672:15672" environment: RABBITMQ_DEFAULT_USER: user RABBITMQ_DEFAULT_PASS: password volumes: - rabbitmq_data:/var/lib/rabbitmq deploy: replicas: 2 volumes: redis_data: postgres_data: rabbitmq_data: