services:
  zabbix-graphql-api:
    build:
      context: .
      args:
        - API_VERSION=1.0.0
    ports:
      - "4001:4000"
    env_file:
      - .env
    environment:
      - SCHEMA_PATH=/usr/app/dist/schema/
      - ZABBIX_DEVELOPMENT_TOKEN=${ZABBIX_DEVELOPMENT_TOKEN}
      - VERBOSITY=${VERBOSITY:-0}
      - LOG_LEVELS=${LOG_LEVELS:-INFO}
    volumes:
      - ./samples:/usr/app/dist/samples

  apollo-mcp-server:
    image: ghcr.io/apollographql/apollo-mcp-server:latest
    ports:
      - "3000:8000"
    volumes:
      - ./mcp-config.yaml:/mcp-config.yaml
      - mcp-shared:/mcp-data:ro
      - ./mcp/operations:/mcp/operations
    command: /mcp-config.yaml
    environment:
      - APOLLO_GRAPH_REF=local@main
      - MCP_LOG_LEVEL=${MCP_LOG_LEVEL:-info}
      - MCP_LOG_PARAMETERS=${MCP_LOG_PARAMETERS:-false}
      - MCP_LOG_RESPONSES=${MCP_LOG_RESPONSES:-false}
    depends_on:
      schema-gen:
        condition: service_completed_successfully
      zabbix-graphql-api:
        condition: service_started

  schema-gen:
    image: alpine
    volumes:
      - ./schema:/schema:ro
      - mcp-shared:/mcp-data
    command: sh -c "cat /schema/*.graphql > /mcp-data/schema.graphql"

  postgres-server:
    image: postgres:16-alpine
    profiles:
      - zabbix-local
    environment:
      - POSTGRES_USER=zabbix
      - POSTGRES_PASSWORD=zabbix
      - POSTGRES_DB=zabbix
    volumes:
      - zbx_db_data:/var/lib/postgresql/data

  zabbix-server:
    image: zabbix/zabbix-server-pgsql:${ZABBIX_VERSION:-alpine-7.0-latest}
    profiles:
      - zabbix-local
    ports:
      - "10051:10051"
    environment:
      - DB_SERVER_HOST=postgres-server
      - POSTGRES_USER=zabbix
      - POSTGRES_PASSWORD=zabbix
      - POSTGRES_DB=zabbix
      - ZBX_ALLOWUNSUPPORTEDDBVERSIONS=1
    depends_on:
      - postgres-server

  zabbix-web:
    image: zabbix/zabbix-web-nginx-pgsql:${ZABBIX_VERSION:-alpine-7.0-latest}
    profiles:
      - zabbix-local
    ports:
      - "8080:8080"
    environment:
      - ZBX_SERVER_HOST=zabbix-server
      - DB_SERVER_HOST=postgres-server
      - POSTGRES_USER=zabbix
      - POSTGRES_PASSWORD=zabbix
      - POSTGRES_DB=zabbix
      - PHP_TZ=UTC
      - ZBX_ALLOWUNSUPPORTEDDBVERSIONS=1
    depends_on:
      - postgres-server
      - zabbix-server

volumes:
  mcp-shared:
  zbx_db_data:
