name: 'rollout-v5-stable'

services:
  # ==========================================
  # Infrastructure Services
  # ==========================================
  rabbitmq:
    image: rabbitmq:3-management
    container_name: rabbitmq
    environment:
      - RABBITMQ_DEFAULT_USER=guest
      - RABBITMQ_DEFAULT_PASS=guest

  redis:
    image: redis:latest
    container_name: redis

  # ==========================================
  # Monitoring Services
  # ==========================================
  prometheus:
    image: prom/prometheus:latest
    container_name: prometheus
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml:ro
    command:
      - '--config.file=/etc/prometheus/prometheus.yml'

  grafana:
    image: grafana/grafana:latest
    container_name: grafana
    ports:
      - "5001:3000"
    environment:
      - GF_SECURITY_ADMIN_USER=admin
      - GF_SECURITY_ADMIN_PASSWORD=admin
    depends_on:
      - prometheus

  # ==========================================
  # Microservices
  # ==========================================
  registry-server:
    build:
      context: ./RegistryServer
      dockerfile: Dockerfile
    image: rolloutio/registry-server:5.0.1
    container_name: registry-server
    entrypoint: [ "sh", "-c", "sleep 10 && java -jar app.jar" ]
    ports:
      - "5000:4999"
    depends_on:
      - prometheus
    environment:
      - EUREKA_HOSTNAME=registry-server

  config-server:
    build:
      context: ./ConfigServer
      dockerfile: Dockerfile
    image: rolloutio/config-server:5.0.1
    container_name: config-server
    entrypoint: [ "sh", "-c", "sleep 25 && java -jar app.jar" ]
    depends_on:
      - registry-server
      - rabbitmq
      - prometheus
    environment:
      - RABBITMQ_HOST=rabbitmq
      - EUREKA_URI=http://admin:admin123@registry-server:4999/eureka/

  api-gateway:
    build:
      context: ./ApiGateway
      dockerfile: Dockerfile
    image: rolloutio/api-gateway:5.0.1
    container_name: api-gateway
    entrypoint: [ "sh", "-c", "sleep 60 && java -jar app.jar" ]
    ports:
      - "80:5000"
    depends_on:
      - config-server
      - registry-server
      - redis
      - auth-service
      - controlplane-service
      - sdk-service
    environment:
      - REDIS_HOST=redis
      - CONFIG_SERVER_URI=http://config:pass@config-server:4998
      - EUREKA_URI=http://admin:admin123@registry-server:4999/eureka/
      - EUREKA_HOSTNAME=api-gateway

  auth-service:
    build:
      context: ./AuthService
      dockerfile: Dockerfile
    image: rolloutio/auth-service:5.0.1
    container_name: auth-service
    entrypoint: [ "sh", "-c", "sleep 55 && java -jar app.jar" ]
    depends_on:
      - config-server
      - registry-server
    environment:
      - CONFIG_SERVER_URI=http://config:pass@config-server:4998
      - EUREKA_URI=http://admin:admin123@registry-server:4999/eureka/
      - EUREKA_HOSTNAME=auth-service

  controlplane-service:
    build:
      context: ./ControlPlaneService
      dockerfile: Dockerfile
    image: rolloutio/controlplane-service:5.0.1
    container_name: controlplane-service
    entrypoint: [ "sh", "-c", "sleep 55 && java -jar app.jar" ]
    depends_on:
      - config-server
      - registry-server
    environment:
      - CONFIG_SERVER_URI=http://config:pass@config-server:4998
      - EUREKA_URI=http://admin:admin123@registry-server:4999/eureka/
      - EUREKA_HOSTNAME=controlplane-service

  sdk-service:
    build:
      context: ./SdkService
      dockerfile: Dockerfile
    image: rolloutio/sdk-service:5.0.1
    container_name: sdk-service
    entrypoint: [ "sh", "-c", "sleep 55 && java -jar app.jar" ]
    depends_on:
      - config-server
      - registry-server
      - redis
    environment:
      - REDIS_HOST=redis
      - CONFIG_SERVER_URI=http://config:pass@config-server:4998
      - EUREKA_URI=http://admin:admin123@registry-server:4999/eureka/
      - EUREKA_HOSTNAME=sdk-service
