version: "3.6"
services:

  apiserver:
    command:
    - apiserver
    container_name: trains-apiserver
    image: allegroai/trains:latest
    restart: unless-stopped
    volumes:
    - /opt/trains/logs:/var/log/trains
    - /opt/trains/config:/opt/trains/config
    depends_on:
      - redis
      - mongo
      - elasticsearch
      - fileserver
    environment:
      TRAINS_ELASTIC_SERVICE_HOST: elasticsearch
      TRAINS_ELASTIC_SERVICE_PORT: 9200
      TRAINS_MONGODB_SERVICE_HOST: mongo
      TRAINS_MONGODB_SERVICE_PORT: 27017
      TRAINS_REDIS_SERVICE_HOST: redis
      TRAINS_REDIS_SERVICE_PORT: 6379
      TRAINS__apiserver__mongo__pre_populate__enabled: "true"
      TRAINS__apiserver__mongo__pre_populate__zip_file: "/opt/trains/db-pre-populate/export.zip"
    ports:
    - "8008:8008"
    networks:
      - backend

  elasticsearch:
    networks:
      - backend
    container_name: trains-elastic
    environment:
      ES_JAVA_OPTS: -Xms2g -Xmx2g
      bootstrap.memory_lock: "true"
      cluster.name: trains
      cluster.routing.allocation.node_initial_primaries_recoveries: "500"
      discovery.zen.minimum_master_nodes: "1"
      http.compression_level: "7"
      node.ingest: "true"
      node.name: trains
      reindex.remote.whitelist: '*.*'
      script.inline: "true"
      script.painless.regex.enabled: "true"
      script.update: "true"
      thread_pool.bulk.queue_size: "2000"
      thread_pool.search.queue_size: "10000"
      xpack.monitoring.enabled: "false"
      xpack.security.enabled: "false"
    ulimits:
      memlock:
        soft: -1
        hard: -1
      nofile:
        soft: 65536
        hard: 65536
    image: docker.elastic.co/elasticsearch/elasticsearch:5.6.16
    restart: unless-stopped
    volumes:
    - /opt/trains/data/elastic:/usr/share/elasticsearch/data
    ports:
    - "9200:9200"

  fileserver:
    networks:
      - backend
    command:
    - fileserver
    container_name: trains-fileserver
    image: allegroai/trains:latest
    restart: unless-stopped
    volumes:
    - /opt/trains/logs:/var/log/trains
    - /opt/trains/data/fileserver:/mnt/fileserver
    ports:
    - "8081:8081"

  mongo:
    networks:
      - backend
    container_name: trains-mongo
    image: mongo:3.6.5
    restart: unless-stopped
    command: --setParameter internalQueryExecMaxBlockingSortBytes=196100200
    volumes:
    - /opt/trains/data/mongo/db:/data/db
    - /opt/trains/data/mongo/configdb:/data/configdb
    ports:
    - "27017:27017"

  redis:
    networks:
      - backend
    container_name: trains-redis
    image: redis:5.0
    restart: unless-stopped
    volumes:
    - /opt/trains/data/redis:/data
    ports:
    - "6379:6379"

  webserver:
    command:
    - webserver
    container_name: trains-webserver
    image: allegroai/trains:latest
    restart: unless-stopped
    volumes:
    - /opt/trains/logs:/var/log/trains
    depends_on:
      - apiserver
    ports:
    - "8080:80"

networks:
  backend:
    driver: bridge