version: "3"
services:
  mongodb:
    image: 'mongo:7-jammy'
    extra_hosts:
      - "host.docker.internal:host-gateway"
    command: mongod --port 27018
    environment:
      - PUID=1000
      - PGID=1000
    ports:
      - 27018:27018
    restart: unless-stopped
  minio:
    image: 'minio/minio'
    command: server /data --address ":9000"
    expose:
      - 9000
    ports:
      - 9002:9000
  elastic:
    image: 'elasticsearch:7.14.2'
    command: |
      /bin/sh -c "./bin/elasticsearch-plugin list | grep -q ingest-attachment || yes | ./bin/elasticsearch-plugin install --silent ingest-attachment;      
      /usr/local/bin/docker-entrypoint.sh eswrapper"
    expose:
      - 9200
    ports:
      - 9201:9200
    environment:
      - ELASTICSEARCH_PORT_NUMBER=9200
      - BITNAMI_DEBUG=true
      - discovery.type=single-node
      - ES_JAVA_OPTS=-Xms1024m -Xmx1024m
      - http.cors.enabled=true
      - http.cors.allow-origin=http://localhost:8082
    healthcheck:
      interval: 20s
      retries: 10
      test: curl -s http://localhost:9200/_cluster/health | grep -vq '"status":"red"'
  account:
    image: hardcoreeng/account
    extra_hosts:
      - "host.docker.internal:host-gateway"
    pull_policy: never
    links:
      - mongodb
      - minio
    ports:
      - 3003:3003
    volumes:
      - ./branding-test.json:/var/cfg/branding-test.json
    environment:
      - ACCOUNT_PORT=3003
      - SERVER_SECRET=secret
      - DB_URL=mongodb://mongodb:27018
      - TRANSACTOR_URL=ws://transactor:3334;ws://host.docker.internal:3334
      - STORAGE_CONFIG=${STORAGE_CONFIG}
      - MODEL_ENABLED=*
      - BRANDING_PATH=/var/cfg/branding-test.json
  workspace:
    image: hardcoreeng/workspace
    extra_hosts:
      - "host.docker.internal:host-gateway"
    links:
      - mongodb
      - minio
    volumes:
      - ./branding-test.json:/var/cfg/branding.json
    environment:
      - SERVER_SECRET=secret
      - DB_URL=mongodb://mongodb:27018
      - MONGO_URL=mongodb://mongodb:27018
      - TRANSACTOR_URL=ws://transactor:3334;ws://host.docker.internal:3334
      - STORAGE_CONFIG=${STORAGE_CONFIG}
      - MODEL_ENABLED=*
      - ACCOUNTS_URL=http://account:3003
      - BRANDING_PATH=/var/cfg/branding.json
    restart: unless-stopped
  front:
    image: hardcoreeng/front
    extra_hosts:
      - "host.docker.internal:host-gateway"
    pull_policy: never
    links:
      - account
      - mongodb
      - minio
      - elastic
      - collaborator
      - transactor
    ports:
      - 8083:8083
    volumes:
      - ./branding-test.json:/app/dist/branding-test.json
    environment:
      - SERVER_PORT=8083
      - SERVER_SECRET=secret
      - ACCOUNTS_URL=http://host.docker.internal:3003
      - MONGO_URL=mongodb://mongodb:27018
      - UPLOAD_URL=/files
      - ELASTIC_URL=http://elastic:9200
      - GMAIL_URL=http://host.docker.internal:8088
      - CALENDAR_URL=http://host.docker.internal:8095
      - REKONI_URL=http://rekoni:4005
      - TELEGRAM_URL=http://host.docker.internal:8086
      - COLLABORATOR_URL=ws://host.docker.internal:3079
      - STORAGE_CONFIG=${STORAGE_CONFIG}
      - BRANDING_URL=http://host.docker.internal:8083/branding-test.json
      - PRINT_URL=http://host.docker.internal:4005
      - SIGN_URL=http://host.docker.internal:4006
  transactor:
    image: hardcoreeng/transactor
    extra_hosts:
      - "host.docker.internal:host-gateway"
    pull_policy: never
    links:
      - mongodb
      - elastic
      - minio
      - rekoni
      - account
    ports:
      - 3334:3334
    volumes:
      - ./branding-test.json:/var/cfg/branding-test.json
    environment:
      - SERVER_PROVIDER=${SERVER_PROVIDER}
      - SERVER_PORT=3334
      - SERVER_SECRET=secret
      - ELASTIC_URL=http://elastic:9200
      - DB_URL=mongodb://mongodb:27018
      - MONGO_URL=mongodb://mongodb:27018
      - METRICS_CONSOLE=false
      - METRICS_FILE=metrics.txt
      - STORAGE_CONFIG=${STORAGE_CONFIG}
      - REKONI_URL=http://rekoni:4005
      - FRONT_URL=http://host.docker.internal:8083
      - UPLOAD_URL=http://host.docker.internal:8083/files
      - ACCOUNTS_URL=http://account:3003
      - LAST_NAME_FIRST=true
      - ELASTIC_INDEX_NAME=local_storage_index
      - BRANDING_PATH=/var/cfg/branding-test.json
  collaborator:
    image: hardcoreeng/collaborator
    extra_hosts:
      - "host.docker.internal:host-gateway"
    links:
      - mongodb
      - minio
      - transactor
    ports:
      - 3079:3079
    environment:
      - COLLABORATOR_PORT=3079
      - SECRET=secret
      - ACCOUNTS_URL=http://account:3003
      - UPLOAD_URL=/files
      - MONGO_URL=mongodb://mongodb:27018
      - STORAGE_CONFIG=${STORAGE_CONFIG}
    restart: unless-stopped 
  rekoni:
    image: hardcoreeng/rekoni-service
    restart: on-failure
  print:
    image: hardcoreeng/print
    extra_hosts:
      - "host.docker.internal:host-gateway"
    restart: unless-stopped
    ports:
      - 4005:4005
    environment:
      - SECRET=secret
      - MONGO_URL=${MONGO_URL}
      - MONGO_OPTIONS={"appName":"print","maxPoolSize":1}
      - STORAGE_CONFIG=${STORAGE_CONFIG}
    deploy:
      resources:
        limits:
          memory: 300M
  sign:
    image: hardcoreeng/sign
    extra_hosts:
      - "host.docker.internal:host-gateway"
    restart: unless-stopped
    ports:
      - 4006:4006
    volumes:
      - ../services/sign/pod-sign/debug/certificate.p12:/var/cfg/certificate.p12
      - ../services/sign/pod-sign/debug/branding.json:/var/cfg/branding.json
    environment:
      - SECRET=secret
      - MONGO_URL=${MONGO_URL}
      - MONGO_OPTIONS={"appName":"sign","maxPoolSize":1}
      - MINIO_ENDPOINT=minio
      - MINIO_ACCESS_KEY=minioadmin
      - ACCOUNTS_URL=http://account:3003
      - MINIO_SECRET_KEY=minioadmin
      - CERTIFICATE_PATH=/var/cfg/certificate.p12
      - SERVICE_ID=sign-service      
      - BRANDING_PATH=/var/cfg/branding.json
    deploy:
      resources:
        limits:
          memory: 300M
volumes:
  files: