Elastic App Search Configuration¶
This guide will explain how to configure and run Elastic App Search for your environment.
Prerequisites¶
- Install the latest version of the Platform:
- Install the xAPI module.
- Install the Profile module.
- Install Node.js v.16.X.
- Install Yarn Package Manager by running
npm install --global yarn
.
Set up Frontend Application¶
Set up Virto Commerce Frontend Application as described in this instruction
Set up Elastic App Search¶
This guide explores the process of setting up Elastic App Search, including:
Deploy Elastic App Search using Docker¶
To deploy Elastic App Search using Docker:
-
Install
Elastic App Search
container usingDocker-Compose
as follows:- Create a directory and with a file named
.env
inside:
STACK_VERSION=8.3.3 ELASTIC_PASSWORD=!!!changeme!!! KIBANA_PASSWORD=!!!changeme!!! ES_PORT=9200 CLUSTER_NAME=es-cluster LICENSE=basic MEM_LIMIT=1073741824 KIBANA_PORT=5601 ENTERPRISE_SEARCH_PORT=3002 ENCRYPTION_KEYS=secret
-
Create a strong password and place it instead of
!!!changeme!!!
. -
Create a file named
docker-compose.yml
and place it with the.env
file:
View code
version: "2.2" services: setup: image: docker.elastic.co/elasticsearch/elasticsearch:${STACK_VERSION} volumes: - certs:/usr/share/elasticsearch/config/certs user: "0" command: > bash -c ' if [ x${ELASTIC_PASSWORD} == x ]; then echo "Set the ELASTIC_PASSWORD environment variable in the .env file"; exit 1; elif [ x${KIBANA_PASSWORD} == x ]; then echo "Set the KIBANA_PASSWORD environment variable in the .env file"; exit 1; fi; if [ ! -f certs/ca.zip ]; then echo "Creating CA"; bin/elasticsearch-certutil ca --silent --pem -out config/certs/ca.zip; unzip config/certs/ca.zip -d config/certs; fi; if [ ! -f certs/certs.zip ]; then echo "Creating certs"; echo -ne \ "instances:\n"\ " - name: es01\n"\ " dns:\n"\ " - es01\n"\ " - localhost\n"\ " ip:\n"\ " - 127.0.0.1\n"\ > config/certs/instances.yml; bin/elasticsearch-certutil cert --silent --pem -out config/certs/certs.zip --in config/certs/instances.yml --ca-cert config/certs/ca/ca.crt --ca-key config/certs/ca/ca.key; unzip config/certs/certs.zip -d config/certs; fi; echo "Setting file permissions" chown -R root:root config/certs; find . -type d -exec chmod 750 \{\} \;; find . -type f -exec chmod 640 \{\} \;; echo "Waiting for Elasticsearch availability"; until curl -s --cacert config/certs/ca/ca.crt https://es01:9200 | grep -q "missing authentication credentials"; do sleep 30; done; echo "Setting kibana_system password"; until curl -s -X POST --cacert config/certs/ca/ca.crt -u elastic:${ELASTIC_PASSWORD} -H "Content-Type: application/json" https://es01:9200/_security/user/kibana_system/_password -d "{\"password\":\"${KIBANA_PASSWORD}\"}" | grep -q "^{}"; do sleep 10; done; echo "All done!"; ' healthcheck: test: ["CMD-SHELL", "[ -f config/certs/es01/es01.crt ]"] interval: 1s timeout: 5s retries: 120 es01: depends_on: setup: condition: service_healthy image: docker.elastic.co/elasticsearch/elasticsearch:${STACK_VERSION} volumes: - certs:/usr/share/elasticsearch/config/certs - esdata01:/usr/share/elasticsearch/data ports: - ${ES_PORT}:9200 environment: - node.name=es01 - cluster.name=${CLUSTER_NAME} - cluster.initial_master_nodes=es01 - ELASTIC_PASSWORD=${ELASTIC_PASSWORD} - bootstrap.memory_lock=true - xpack.security.enabled=true - xpack.security.http.ssl.enabled=true - xpack.security.http.ssl.key=certs/es01/es01.key - xpack.security.http.ssl.certificate=certs/es01/es01.crt - xpack.security.http.ssl.certificate_authorities=certs/ca/ca.crt - xpack.security.http.ssl.verification_mode=certificate - xpack.security.transport.ssl.enabled=true - xpack.security.transport.ssl.key=certs/es01/es01.key - xpack.security.transport.ssl.certificate=certs/es01/es01.crt - xpack.security.transport.ssl.certificate_authorities=certs/ca/ca.crt - xpack.security.transport.ssl.verification_mode=certificate - xpack.license.self_generated.type=${LICENSE} mem_limit: ${MEM_LIMIT} ulimits: memlock: soft: -1 hard: -1 healthcheck: test: [ "CMD-SHELL", "curl -s --cacert config/certs/ca/ca.crt https://localhost:9200 | grep -q 'missing authentication credentials'", ] interval: 10s timeout: 10s retries: 120 kibana: depends_on: es01: condition: service_healthy image: docker.elastic.co/kibana/kibana:${STACK_VERSION} volumes: - certs:/usr/share/kibana/config/certs - kibanadata:/usr/share/kibana/data ports: - ${KIBANA_PORT}:5601 environment: - SERVERNAME=kibana - ELASTICSEARCH_HOSTS=https://es01:9200 - ELASTICSEARCH_USERNAME=kibana_system - ELASTICSEARCH_PASSWORD=${KIBANA_PASSWORD} - ELASTICSEARCH_SSL_CERTIFICATEAUTHORITIES=config/certs/ca/ca.crt - ENTERPRISESEARCH_HOST=http://enterprisesearch:${ENTERPRISE_SEARCH_PORT} mem_limit: ${MEM_LIMIT} healthcheck: test: [ "CMD-SHELL", "curl -s -I http://localhost:5601 | grep -q 'HTTP/1.1 302 Found'", ] interval: 10s timeout: 10s retries: 120 enterprisesearch: depends_on: es01: condition: service_healthy kibana: condition: service_healthy image: docker.elastic.co/enterprise-search/enterprise-search:${STACK_VERSION} volumes: - certs:/usr/share/enterprise-search/config/certs - enterprisesearchdata:/usr/share/enterprise-search/config ports: - ${ENTERPRISE_SEARCH_PORT}:3002 environment: - SERVERNAME=enterprisesearch - secret_management.encryption_keys=[${ENCRYPTION_KEYS}] - allow_es_settings_modification=true - elasticsearch.host=https://es01:9200 - elasticsearch.username=elastic - elasticsearch.password=${ELASTIC_PASSWORD} - elasticsearch.ssl.enabled=true - app_search.engine.total_fields.limit=128 - elasticsearch.ssl.certificate_authority=/usr/share/enterprise-search/config/certs/ca/ca.crt - kibana.external_url=http://kibana:5601 mem_limit: ${MEM_LIMIT} healthcheck: test: [ "CMD-SHELL", "curl -s -I http://localhost:3002 | grep -q 'HTTP/1.1 302 Found'", ] interval: 10s timeout: 10s retries: 120 volumes: certs: driver: local enterprisesearchdata: driver: local esdata01: driver: local kibanadata: driver: local
- Create a directory and with a file named
-
Bring up the Elastic cluster with the following command (run it from the directory where the
.yml
file is): -
Access Kibana at http://localhost:5601.
- Log in as
elastic
for username, your password being the value you provided for ELASTIC_PASSWORD in your.env
file. - Access Elasticsearch at http://localhost:9200.
Deploying Elastic App Search with Docker
Set up Elastic App Search on Platform¶
To install Elastic App Search on Virto Commerce Platform:
- Install the Elastic App Search module.
-
Modify the Platform configuration to use Elastic App Search:
-
Open Kibana (localhost:5601).
- Go to Enterprise Search → Open App Search → Credentials.
-
Copy Private Key, and assign it to the
PrivateApiKey
setting: -
Run Platform and build the indexes. You will see ElasticAppSearch as a Provider:
-
Go back to Kibana and confirm that engines (indexes) are created:
Run Virto Commerce application¶
-
Navigate to the Frontend Application root directory:
-
Build and run the Frontend Application application: