version: '3.7'
services:
  api:
    build:
      context: .
      target: main
    depends_on:
      - postgres
      - postgres-aggregates
      - elasticsearch
    env_file:
      - .env
    volumes:
      - '.:/app'
    ports:
      - "8000:8000"
  elasticsearch:
    container_name: elasticsearch
    image: docker.elastic.co/elasticsearch/elasticsearch:7.10.2
    volumes:
      - .:/var/lib/elasticsearch/data
    environment:
      - discovery.type=single-node
      - http.cors.enabled=true
      - http.cors.allow-headers=X-Requested-With,X-Auth-Token,Content-Type,Content-Length,Authorization
      - http.cors.allow-credentials=true
      - xpack.security.enabled=false
    ports:
      - "9200:9200"
    healthcheck:
      test: "curl http://elasticsearch:9200"
      interval: "1s"
      timeout: "3s"
      retries: 60
  postgres:
    container_name: postgres
    image: postgres:13.5
    environment:
      POSTGRES_DB: ${POSTGRES_DB}
      POSTGRES_USER: ${POSTGRES_USER}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
      PGDATA: "/var/lib/postgresql/data/pgdata"
    volumes:
      - ../2. Init Database:/docker-entrypoint-initdb.d
      - .:/var/lib/postgresql/data
    ports:
      - "${POSTGRES_PORT}:${POSTGRES_PORT}"
  postgres-aggregates:
    container_name: postgres-aggregates
    image: postgres:13.5
    environment:
      POSTGRES_DB: ${POSTGRES_DATA_DB}
      POSTGRES_USER: ${POSTGRES_DATA_USER}
      POSTGRES_PASSWORD: ${POSTGRES_DATA_PASSWORD}
      PGDATA: "/var/lib/postgresql/data/pgdata_aggregates"
    volumes:
      - ../2. Init Database:/docker-entrypoint-initdb.d
      - .:/var/lib/postgresql/data
    ports:
      - "${POSTGRES_AGGREGATES_HOST}:${POSTGRES_DATA_PORT}"
