version: "3.8"
services:
  api:
    #image: node:20.12.2
    build:
      context: .
      dockerfile: Dockerfile
      args:
        USER_ID: ${USER_ID:-0}
        GROUP_ID: ${GROUP_ID:-0}
    env_file: .docker-env
    command: bash -c 'npm install && npm run server --env=dev'
    container_name: backend_core_api
    working_dir: /app
    volumes:
      - .:/app
    ports:
      - "3000:3000"
      - "4000:4000"
    depends_on:
      - redis
      - queue
      - db
  db:
    container_name: backend_core_db
    image: postgres:15
    restart: always
    environment:
      POSTGRES_USER: root
      POSTGRES_PASSWORD: root
    ports:
      - "5432:5432"
    command: >
      -c ssl=on
      -c ssl_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
      -c ssl_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
    volumes:
      - pg-dataset:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready"]
      interval: 1s
      timeout: 5s
      retries: 10

  redis:
    image: redis:6.2
    restart: always
    ports:
      - '6379:6379'
    command: redis-server --save 20 1 --loglevel warning
    volumes: 
      - cache:/data

  queue:
      image: s12v/elasticmq
      volumes:
        - ./elasticmq/custom.conf:/etc/elasticmq/elasticmq.conf
      ports:
        - "9324:9324"

  localstack:
    container_name: "${LOCALSTACK_DOCKER_NAME:-localstack-main}"
    image: localstack/localstack
    ports:
      - "4566:4566"            # LocalStack Gateway
      - "4510-4559:4510-4559"  # external services port range
    environment:
      # LocalStack configuration: https://docs.localstack.cloud/references/configuration/
      - DEBUG=${DEBUG:-0}
      #- SERVICES=s3:4566
      #- HOSTNAME=localstack
      #- HOSTNAME_EXTERNAL=localstack
      - DEFAULT_REGION=ap-south-1
      - LOCALSTACK_AUTH_TOKEN=${LOCALSTACK_AUTH_TOKEN- }
    env_file: .docker-env
    volumes:
      #- "/path/to/init-aws.sh:/etc/localstack/init/ready.d/init-aws.sh"
      - "${LOCALSTACK_VOLUME_DIR:-localstack-data}:/var/lib/localstack"
      - "/var/run/docker.sock:/var/run/docker.sock"

volumes:
  pg-dataset:
  localstack-data:
  cache:
    driver: local
