services:
  chef-server:
    depends_on:
      opensearch:
        condition: service_healthy
      postgres:
        condition: service_healthy
    build:
      context: .
      target: dev
    environment:
      - AWS_ACCESS_KEY_ID
      - AWS_SECRET_ACCESS_KEY
      - AWS_SESSION_TOKEN
      - COOKBOOK_STORAGE_BUCKET
      - SECRETS_BUCKET
      - ADMIN_USER_PASSWORD=${ADMIN_USER_PASSWORD:-admin123}
      - CHEF_SERVER_NAME=${CHEF_SERVER_NAME:-local-chef-server}
      - COOKBOOK_STORAGE_BUCKET_REGION=${COOKBOOK_STORAGE_BUCKET_REGION:-us-east-1}
      - OPENSEARCH_URL=${OPENSEARCH_URL:-http://opensearch:9200}
      - OPENSEARCH_USER=${OPENSEARCH_USER:-admin}
      - OPENSEARCH_PASSWORD=${OPENSEARCH_INITIAL_ADMIN_PASSWORD:-admin}
      - POSTGRES_HOST=${POSTGRES_HOST:-postgres}
      - POSTGRES_PORT=${POSTGRES_PORT:-5432}
      - POSTGRES_USER=${POSTGRES_USER:-admin}
      - POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-admin}
    ports:
      - 8080:80
    volumes:
      - chef-server-certificates:/etc/cinc-project
      - chef-server-data:/var/opt/cinc-project
      - ./cinc-server.rb:/usr/share/chef/cinc-server.rb
      - ./entrypoint.sh:/entrypoint.sh

  opensearch:
    image: opensearchproject/opensearch:1.3.14
    environment:
      discovery.type: single-node
      node.name: opensearch
      OPENSEARCH_JAVA_OPTS: "-Xms512m -Xmx512m"
      OPENSEARCH_INITIAL_ADMIN_PASSWORD: ${OPENSEARCH_INITIAL_ADMIN_PASSWORD:-admin}
      plugins.security.disabled: true
    healthcheck:
      test: curl -s http://localhost:9200 >/dev/null || exit 1
      interval: 5s
      timeout: 5s
      retries: 30
    ulimits:
      memlock:
        soft: -1
        hard: -1
      nofile:
        soft: 65536
        hard: 65536
    volumes:
      - opensearch-data:/usr/share/opensearch/data
    ports:
      - 9200:9200

  postgres:
    image: postgres:13.14
    environment:
      PGUSER: ${POSTGRES_USER:-admin}
      POSTGRES_USER: ${POSTGRES_USER:-admin}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-admin}
    healthcheck:
      test: [ "CMD-SHELL", "pg_isready" ]
      interval: 5s
      timeout: 5s
      retries: 30
    ports:
      - 5432:5432
    volumes:
      - postgres-data:/var/lib/postgresql/data

volumes:
  chef-server-certificates:
  chef-server-data:
  opensearch-data:
  postgres-data:
