version: "3"
services:
  db:
    container_name: db
    image: postgres:13.2
    restart: always
    expose:
      - "5432"
    ports:
      - "5431:5432"
    env_file:
      - ./.env.sample
    volumes:
      - db:/var/lib/postgresql/data
  app:
    container_name: app
    build: ./
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:3000"]
      interval: 10s
      timeout: 10s
      retries: 10
      start_period: 1m30s
    depends_on:
      - db
    env_file:
      - ./.env.sample
    ports:
      - "3000:3000"
    volumes:
      - ./:/app
    links:
      - db
      - opensearch
  worker:
    container_name: worker
    build: ./worker
    depends_on:
      db:
        condition: service_started
      app:
        condition: service_healthy
    env_file:
      - ./.env.sample
    ports:
      - "8080:8080"
    volumes:
      - ./:/app
    links:
      - db
      - app
      - opensearch
    entrypoint: ["/bin/sh", "-c"]
    command:
      - npm run worker
  imgproxy:
    container_name: imgproxy
    image: darthsim/imgproxy:v3.18.1
    healthcheck:
      test: [ "CMD", "imgproxy", "health" ]
      timeout: 10s
      interval: 10s
      retries: 3
    restart: always
    env_file:
      - ./.env.sample
    expose:
      - "8080"
    ports:
      - "3001:8080"
    links:
      - app
  opensearch:
    image: opensearchproject/opensearch:latest
    container_name: opensearch
    environment:
      - discovery.type=single-node
      - plugins.security.disabled=true
    ports:
      - 9200:9200 # REST API
      - 9600:9600 # Performance Analyzer
    volumes:
      - os:/usr/share/opensearch/data
      - ./:/app
    command: >
      bash -c '
        set -m
        /usr/share/opensearch/opensearch-docker-entrypoint.sh &
        until curl -sS "http://localhost:9200/_cat/health?h=status" -ku admin:admin | grep -q "green\|yellow"; do
          echo "Waiting for OpenSearch to start..."
          sleep 1
        done
        echo "OpenSearch started."
        curl -X PUT "http://localhost:9200/item" -ku admin:admin
        echo "OpenSearch index created."
        fg
      '
  os-dashboard:
    image: opensearchproject/opensearch-dashboards:latest
    container_name: os-dashboard
    environment:
      - opensearch.ssl.verificationMode=none
      - server.ssl.enabled=false
      - plugins.security.disabled=true
      - DISABLE_SECURITY_DASHBOARDS_PLUGIN=true
      - OPENSEARCH_HOSTS=http://opensearch:9200
    ports:
      - 5601:5601
    expose:
      - "5601"
    links:
      - opensearch
volumes:
  db:
  os:
