version: '3.4'
services:
  api:
    restart: always
    build:
      dockerfile: Dockerfile
      context: .
      target: main
      args:
        - VERSION
        - REVISION
        - BUILDTIME
        - PYPI_INDEX_URL=https://pypi.org/simple
    env_file: .env
    environment:
      AWS_PROFILE: default
    depends_on:
      - postgres
    networks:
      - decibel
    volumes:
      - ./:/app:delegated
      - ~/.aws:/app/.aws
    ports:
      - "5000:8000"
    dns:
      - 8.8.8.8
      - 9.9.9.9
    container_name: api

  postgres:
    restart: always
    image: postgres:12.10-alpine3.15
    env_file: .env
    environment:
      - "POSTGRES_PASSWORD=postgres"
    ports:
      - "5432:5432"
    volumes:
      - "dbdata:/var/lib/postgresql/data"
    networks:
      - decibel
    container_name: db

  redis:
    image: redis:3.2.10
    volumes:
      - 'redis:/var/lib/redis/data'
    ports:
      - '6379:6379'
    networks:
      - decibel

  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.10.2
    container_name: elasticsearch
    volumes:
      - 'elastic:/var/lib/elasticsearch/data'
    ports:
      - "9200:9200"
      - "9300:9300"
    environment:
      - node.name=es01
      - cluster.name=docker-cluster
      - network.host=0.0.0.0
      - discovery.zen.minimum_master_nodes=1
      - discovery.type=single-node
      - xpack.security.enabled=false
      - xpack.monitoring.enabled=false
      - xpack.ml.enabled=false
      - xpack.graph.enabled=false
      - xpack.watcher.enabled=false
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    networks:
      - decibel
    healthcheck:
      test: "curl http://elasticsearch:9200"
      interval: "1s"
      timeout: "3s"
      retries: 60

volumes:
  dbdata:
  redis:
  elastic:

networks:
  decibel:
    driver: bridge
