version: "3.6"
services:
  trainsserver:
    command:
     - -c
     - "echo \"#!/bin/bash\" > /opt/trains/all.sh && echo \"/opt/trains/wrapper.sh webserver&\" >> /opt/trains/all.sh && echo \"/opt/trains/wrapper.sh fileserver&\" >> /opt/trains/all.sh && echo \"/opt/trains/wrapper.sh apiserver\" >> /opt/trains/all.sh && cat /opt/trains/all.sh && chmod +x /opt/trains/all.sh && /opt/trains/all.sh"
    entrypoint: /bin/bash
    container_name: trains-server
    image: allegroai/trains:latest
    ports:
    - 8008:8008
    - 8080:80
    - 8081:8081
    restart: unless-stopped
    volumes:
    - /opt/trains/logs:/var/log/trains
    - /opt/trains/data/fileserver:/mnt/fileserver
    - /opt/trains/config:/opt/trains/config

    depends_on:
      - redis
      - mongo
      - elasticsearch
    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
    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"
      cluster.routing.allocation.disk.watermark.low: 10gb
      cluster.routing.allocation.disk.watermark.high: 10gb
      cluster.routing.allocation.disk.watermark.flood_stage: 10gb
      discovery.zen.minimum_master_nodes: "1"
      discovery.type: "single-node"
      http.compression_level: "7"
      node.ingest: "true"
      node.name: trains
      reindex.remote.whitelist: '*.*'
      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:7.6.2
    restart: unless-stopped
    volumes:
    - /opt/trains/data/elastic_7:/usr/share/elasticsearch/data
  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
  redis:
    networks:
      - backend
    container_name: trains-redis
    image: redis:5.0
    restart: unless-stopped
    volumes:
    - /opt/trains/data/redis:/data

networks:
  backend:
    driver: bridge