version: '3'
services:
  mongodb:
    build:
      context: mongo
    image: ${REPO}/rs-mongodb:${TAG}
    networks:
      - robot-shop
    logging: &logging
      driver: "json-file"
      options:
        max-size: "25m"
        max-file: "2"
  redis:
    image: redis:6.2-alpine
    networks:
      - robot-shop
    logging:
      <<: *logging
  rabbitmq:
    image: rabbitmq:3.8-management-alpine
    networks:
      - robot-shop
    logging:
      <<: *logging
  catalogue:
    build:
      context: catalogue
    image: ${REPO}/rs-catalogue:${TAG}
    depends_on:
      - mongodb
    networks:
      - robot-shop
    healthcheck:
      test: [ "CMD", "curl", "-H", "X-INSTANA-SYNTHETIC: 1", "-f", "http://localhost:8080/health" ]
      interval: 10s
      timeout: 10s
      retries: 3
    logging:
      <<: *logging
  user:
    build:
      context: user
    image: ${REPO}/rs-user:${TAG}
    depends_on:
      - mongodb
      - redis
    networks:
      - robot-shop
    healthcheck:
      test: [ "CMD", "curl", "-H", "X-INSTANA-SYNTHETIC: 1", "-f", "http://localhost:8080/health" ]
      interval: 10s
      timeout: 10s
      retries: 3
    logging:
      <<: *logging
  cart:
    build:
      context: cart
    image: ${REPO}/rs-cart:${TAG}
    depends_on:
      - redis
    networks:
      - robot-shop
    healthcheck:
      test: [ "CMD", "curl", "-H", "X-INSTANA-SYNTHETIC: 1", "-f", "http://localhost:8080/health" ]
      interval: 10s
      timeout: 10s
      retries: 3
    logging:
      <<: *logging
  mysql:
    build:
      context: mysql
    image: ${REPO}/rs-mysql-db:${TAG}
    cap_add:
      - NET_ADMIN
    networks:
      - robot-shop
    logging:
      <<: *logging
  shipping:
    build:
      context: shipping
    image: ${REPO}/rs-shipping:${TAG}
    depends_on:
      - mysql
    networks:
      - robot-shop
    healthcheck:
      test: ["CMD", "curl", "-H", "X-INSTANA-SYNTHETIC: 1", "-f", "http://localhost:8080/health"]
      interval: 10s
      timeout: 10s
      retries: 3
    logging:
      <<: *logging
  ratings:
    build:
      context: ratings
    image: ${REPO}/rs-ratings:${TAG}
    environment:
      APP_ENV: prod
    networks:
      - robot-shop
    depends_on:
      - mysql
    healthcheck:
      test: ["CMD", "curl", "-H", "X-INSTANA-SYNTHETIC: 1", "-f", "http://localhost/_health"]
      interval: 10s
      timeout: 10s
      retries: 3
    logging:
      <<: *logging
  payment:
    build:
      context: payment
    image: ${REPO}/rs-payment:${TAG}
    depends_on:
      - rabbitmq
    networks:
      - robot-shop
    healthcheck:
      test: ["CMD", "curl", "-H", "X-INSTANA-SYNTHETIC: 1", "-f", "http://localhost:8080/health"]
      interval: 10s
      timeout: 10s
      retries: 3
    # Uncomment to change payment gateway
    #environment:
      #PAYMENT_GATEWAY: "https://www.worldpay.com"
    logging:
      <<: *logging
  dispatch:
    build:
      context: dispatch
    image: ${REPO}/rs-dispatch:${TAG}
    depends_on:
      - rabbitmq
    networks:
      - robot-shop
    logging:
      <<: *logging
  web:
    build:
      context: web
      args:
        # agent key to download tracing libs
        KEY: ${INSTANA_AGENT_KEY}
    image: ${REPO}/rs-web:${TAG}
    depends_on:
      - catalogue
      - user
      - shipping
      - payment
    ports:
      - "8080:8080"
    networks:
      - robot-shop
    healthcheck:
      test: [ "CMD", "curl", "-H", "X-INSTANA-SYNTHETIC: 1", "-f", "http://localhost:8080/" ]
      interval: 10s
      timeout: 10s
      retries: 3
    # Uncomment to enable Instana EUM
    # environment:
      # INSTANA_EUM_KEY: <your eum key>
      # INSTANA_EUM_REPORTING_URL: <your reporting url>
    logging:
      <<: *logging

networks:
  robot-shop:

