services:
  mongo:
    image: mongo:7
    ports:
      - "27017:27017"
    environment:
      MONGO_INITDB_ROOT_USERNAME: root
      MONGO_INITDB_ROOT_PASSWORD: example
    volumes:
      - mongo_data:/data/db

  agent:
    build:
      context: .
      dockerfile: Dockerfile.agent
    ports:
      - "3001:3001"
      - "3002:3002"
    env_file: .env
    environment:
      OTEL_EXPORTER_OTLP_ENDPOINT: http://otel-collector:4317
      OTEL_SERVICE_NAME: compliance-agent
    depends_on:
      - mongo
    volumes:
      - repos_data:/tmp/compliance-scanner/repos

  dashboard:
    build:
      context: .
      dockerfile: Dockerfile.dashboard
    ports:
      - "8080:8080"
    env_file: .env
    environment:
      OTEL_EXPORTER_OTLP_ENDPOINT: http://otel-collector:4317
      OTEL_SERVICE_NAME: compliance-dashboard
    depends_on:
      - mongo
      - agent

  chromium:
    image: browserless/chrome:latest
    ports:
      - "3003:3000"
    environment:
      MAX_CONCURRENT_SESSIONS: 5
      CONNECTION_TIMEOUT: 60000
      PREBOOT_CHROME: "true"
    restart: unless-stopped

  otel-collector:
    image: otel/opentelemetry-collector-contrib:latest
    ports:
      - "4317:4317"
      - "4318:4318"
    volumes:
      - ./otel-collector-config.yaml:/etc/otelcol-contrib/config.yaml
    restart: unless-stopped

volumes:
  mongo_data:
  repos_data:
