version: '3'
services:
  traefik:
    # The official v2 Traefik docker image
    image: traefik:v2.5
    # Enables the web UI and tells Traefik to listen to docker
    command: --api.insecure=true --providers.docker --entryPoints.http.address=:3100 --entryPoints.traefik.address=:3200
    ports:
      - "3100:3100"
      # The Web UI (enabled by --api.insecure=true)
      - "3200:3200"
    volumes:
      # So that Traefik can listen to the Docker events
      - /var/run/docker.sock:/var/run/docker.sock
    networks:
      et_full_system:
        aliases:
          - s3.${SERVER_DOMAIN:-et.127.0.0.1.nip.io}
          - azure_blob_storage.${SERVER_DOMAIN:-et.127.0.0.1.nip.io}

    links:
      - db
      - redis
      - minio
      - azurite
      - mailhog
      - et
  et:
    image: 'et_full_system:1.0.0.pre'
    build:
      context: ../
      dockerfile: docker/Dockerfile
      args:
        GEM_VERSION:
        user_id: ${UID:-1000}
    links:
      - db
      - redis
      - minio
      - azurite
      - mailhog
    depends_on:
      - db
      - redis
      - azurite
      - mailhog
      - minio
    extra_hosts:
      - "localhost.from.docker:${LOCALHOST_FROM_DOCKER_IP}"
    volumes:
      - bundle:/usr/local/bundle
      - global_node_modules:/usr/lib/node_modules
      - ${PWD}:/home/app/full_system
      - et1_node_modules:/home/app/full_system/systems/et1/node_modules
      - et3_node_modules:/home/app/full_system/systems/et3/node_modules
      - api_node_modules:/home/app/full_system/systems/api/node_modules
      - admin_node_modules:/home/app/full_system/systems/admin/node_modules
      - et1_assets:/home/app/full_system/systems/et1/public/apply/assets
      - et3_assets:/home/app/full_system/systems/et3/public/assets
      - admin_assets:/home/app/full_system/systems/admin/public/assets
      - s3_data:/home/app/minio_data
      - azure_storage_data:/home/app/azure_storage_data
      - et1_bundle:/home/app/full_system/systems/et1/.bundle
      - et3_bundle:/home/app/full_system/systems/et3/.bundle
      - api_bundle:/home/app/full_system/systems/api/.bundle
      - atos_bundle:/home/app/full_system/systems/atos/.bundle
      - admin_bundle:/home/app/full_system/systems/admin/.bundle
      - admin_bundle:/home/app/full_system/systems/et_ccd_export/.bundle
      - ./.empty:/home/app/full_system/systems/et1/.env
      - ./.empty:/home/app/full_system/systems/et3/.env
      - ./.empty:/home/app/full_system/systems/api/.env
      - ./.empty:/home/app/full_system/systems/atos/.env
      - ./.empty:/home/app/full_system/systems/admin/.env
      - ./.empty:/home/app/full_system/systems/et_ccd_export/.env
      - ./.empty:/home/app/full_system/systems/et1/.env.local
      - ./.empty:/home/app/full_system/systems/et3/.env.local
      - ./.empty:/home/app/full_system/systems/api/.env.local
      - ./.empty:/home/app/full_system/systems/atos/.env.local
      - ./.empty:/home/app/full_system/systems/admin/.env.local
      - ./.empty:/home/app/full_system/systems/et_ccd_export/.env.local
    environment:
      DB_HOST: 'db'
      DB_USERNAME: 'postgres'
      RAILS_ENV:
      RAILS_LOG_LEVEL:
      REDIS_HOST: redis
      SERVER_PORT: ${SERVER_PORT:-3100}
      SERVER_DOMAIN: ${SERVER_DOMAIN:-et.127.0.0.1.nip.io}
      CLOUD_PROVIDER: ${CLOUD_PROVIDER:-azure}
      AZURITE_STORAGE_PATH: /home/app/azure_storage_data
      MINIO_STORAGE_PATH: /home/app/minio_data
      SHOW_DOWNTIME_BANNER:
      CCD_AUTH_BASE_URL: ${CCD_AUTH_BASE_URL:-http://ccd.et.127.0.0.1.nip.io:3100/auth}
      CCD_IDAM_BASE_URL: ${CCD_IDAM_BASE_URL:-http://ccd.et.127.0.0.1.nip.io:3100/idam}
      CCD_DATA_STORE_BASE_URL: ${CCD_DATA_STORE_BASE_URL:-http://ccd.et.127.0.0.1.nip.io:3100/data_store}
      CCD_ECM_BASE_URL: ${CCD_ECM_BASE_URL:-http://ccd.et.127.0.0.1.nip.io:3100/ecm}
      CCD_DOCUMENT_STORE_BASE_URL: ${CCD_DOCUMENT_STORE_BASE_URL:-http://ccd.et.127.0.0.1.nip.io:3100/document_store}
      CCD_MICROSERVICE_ID: ${CCD_MICROSERVICE_ID:-ccd_gw}
      CCD_MICROSERVICE_SECRET: ${CCD_MICROSERVICE_SECRET:-AAAAAAAAAAAAAAAC}
      CCD_SIDAM_USERNAME: ${CCD_SIDAM_USERNAME:-m@m.com}
      CCD_SIDAM_PASSWORD: ${CCD_SIDAM_PASSWORD:-p}
    command: /bin/bash --login -c "cd /home/app/full_system && et_full_system local server --in-docker-compose ${SERVER_ARGS}"
    networks:
      et_full_system:
        aliases:
          - api.${SERVER_DOMAIN:-et.127.0.0.1.nip.io}
          - admin.${SERVER_DOMAIN:-et.127.0.0.1.nip.io}
          - et1.${SERVER_DOMAIN:-et.127.0.0.1.nip.io}
          - et3.${SERVER_DOMAIN:-et.127.0.0.1.nip.io}
          - azure.${SERVER_DOMAIN:-et.127.0.0.1.nip.io}
          - atos.${SERVER_DOMAIN:-et.127.0.0.1.nip.io}
          - mail.${SERVER_DOMAIN:-et.127.0.0.1.nip.io}
          - ccd.${SERVER_DOMAIN:-et.127.0.0.1.nip.io}
    labels:
      - traefik.http.routers.et1-router.rule=Host(`et1.et.127.0.0.1.nip.io`)
      - traefik.http.routers.et1-router.service=et1-service
      - traefik.http.services.et1-service.loadbalancer.server.port=4000
      - traefik.http.routers.et3-router.rule=Host(`et3.et.127.0.0.1.nip.io`)
      - traefik.http.routers.et3-router.service=et3-service
      - traefik.http.services.et3-service.loadbalancer.server.port=4001
      - traefik.http.routers.api-router.rule=Host(`api.et.127.0.0.1.nip.io`)
      - traefik.http.routers.api-router.service=api-service
      - traefik.http.services.api-service.loadbalancer.server.port=4002
      - traefik.http.routers.admin-router.rule=Host(`admin.et.127.0.0.1.nip.io`)
      - traefik.http.routers.admin-router.service=admin-service
      - traefik.http.services.admin-service.loadbalancer.server.port=4003
      - traefik.http.routers.atos-router.rule=Host(`atos.et.127.0.0.1.nip.io`)
      - traefik.http.routers.atos-router.service=atos-service
      - traefik.http.services.atos-service.loadbalancer.server.port=4004
      - traefik.http.routers.acas-router.rule=Host(`acas.et.127.0.0.1.nip.io`)
      - traefik.http.routers.acas-router.service=acas-service
      - traefik.http.services.acas-service.loadbalancer.server.port=4005
      - traefik.http.routers.ccd-router.rule=Host(`ccd.et.127.0.0.1.nip.io`)
      - traefik.http.routers.ccd-router.service=ccd-service
      - traefik.http.services.ccd-service.loadbalancer.server.port=4006
      - traefik.http.routers.notify-router.rule=Host(`notify.et.127.0.0.1.nip.io`)
      - traefik.http.routers.notify-router.service=notify-service
      - traefik.http.services.notify-service.loadbalancer.server.port=4007

#command: bash -lc "cd /home/app/full_system/systems/api && REDIS_DATABASE=2 bundle exec sidekiq"
  db:
    image: postgres:9.6.9
    networks:
      - et_full_system
    ports:
      - "${DB_PORT:-0}:5432"
    volumes:
      - db_data:/var/lib/postgresql/data
  redis:
    image: redis
    ports:
      - "${REDIS_PORT:-0}:6379"
    networks:
      - et_full_system
    volumes:
      - redis_data:/data
  minio:
    image: minio/minio
    labels:
      - traefik.http.routers.s3-router.rule=Host(`s3.et.127.0.0.1.nip.io`)
      - traefik.http.routers.s3-router.service=s3-service
      - traefik.http.services.s3-service.loadbalancer.server.port=9000
    command:
      - server
      - /data
    networks:
      - et_full_system
  mailhog:
    image: mailhog/mailhog:v1.0.1
    labels:
      - traefik.http.routers.mail-router.rule=Host(`mail.et.127.0.0.1.nip.io`)
      - traefik.http.routers.mail-router.service=mail-service
      - traefik.http.services.mail-service.loadbalancer.server.port=8025
    networks:
      - et_full_system
  azurite:
    image: mcr.microsoft.com/azure-storage/azurite
    labels:
      - traefik.http.routers.azurite-router.rule=Host(`azure_blob_storage.et.127.0.0.1.nip.io`)
      - traefik.http.routers.azurite-router.service=azurite-service
      - traefik.http.services.azurite-service.loadbalancer.server.port=10000
    networks:
      - et_full_system
volumes:
  bundle:
  global_node_modules:
  et1_node_modules:
  et3_node_modules:
  s3_node_modules:
  api_node_modules:
  admin_node_modules:
  et1_assets:
  et3_assets:
  admin_assets:
  s3_data:
  azure_storage_data:
  et1_bundle:
  et3_bundle:
  admin_bundle:
  api_bundle:
  atos_bundle:
  db_data:
  redis_data:

networks:
  et_full_system: