# 1.2 Set up Elasticsearch

This enhancement is only available in KiyoCRM from version 7.11 onwards.

KiyoCRM 7.11 requires Elasticsearch 5.6. KiyoCRM 7.12 requires Elasticsearch 7.

Elasticsearch requires Java 8 to run, supporting only `Oracle Java` and `OpenJDK`.

The quickest ways of having an Elasticsearch server up and running is by either using the official Docker image, or the .deb package for Debian-based systems (like Ubuntu).

In this guide we will assume that you are attempting to install Elasticsearch on an Ubuntu machine. Refer to the [official documentation](https://www.elastic.co/guide/en/elasticsearch/reference/5.6/install-elasticsearch.html) to know how to install Elasticsearch in different ways.

This guide will teach you how to have a development server up and running with very little configuration, either by installing via Docker or .deb package. Please keep in mind this guide is not suitable for setting up a production Elasticsearch server.

## Install via Docker (recommended) 

Be sure that the current user belongs to the `docker` group or you’ll receive permission issues.

Download image:

<div class="sect1" id="bkmrk-"><div class="sectionbody"><div class="paragraph">  
</div><div class="listingblock"><div class="content"></div></div></div></div>```bash
docker pull docker.elastic.co/elasticsearch/elasticsearch:5.6.10
```

<div class="sect1" id="bkmrk--1"><div class="sectionbody"><div class="listingblock"><div class="content"></div></div><div class="sect2">  
</div></div></div>### Start with `docker run` 

Start Elasticsearch. This is ideal for a test/development server.

<div class="sect1" id="bkmrk--2"><div class="sectionbody"><div class="sect2"><div class="paragraph">  
</div><div class="listingblock"><div class="content"></div></div></div></div></div>```bash
docker run -p 9200:9200 -p 9300:9300 \
-e "discovery.type=single-node" -e "xpack.security.enabled=false" \
docker.elastic.co/elasticsearch/elasticsearch:5.6.10
```

<div class="sect1" id="bkmrk--3"><div class="sectionbody"><div class="sect2"><div class="listingblock"><div class="content"></div></div></div><div class="sect2">  
</div></div></div>### Start with `docker-compose` 

Create a new `docker-compose.yml` file or add the elasticsearch configuration your pre-existing docker-compose.

<div class="sect1" id="bkmrk--4"><div class="sectionbody"><div class="sect2"><div class="paragraph">  
</div><div class="listingblock"><div class="content"></div></div></div></div></div>```yaml
version: '3'
services:
    elasticsearch:
        image: docker.elastic.co/elasticsearch/elasticsearch:5.6.10
        container_name: elasticsearch
        restart: unless-stopped
        ports:
            - 9200:9200
            - 9300:9300
        environment:
            - discovery.type=single-node
            - xpack.security.enabled=false
            - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
```

<div class="sect1" id="bkmrk--5"><div class="sectionbody"><div class="sect2"><div class="listingblock"><div class="content"></div></div><div class="paragraph">  
</div></div></div></div>And start with:

<div class="sect1" id="bkmrk--6"><div class="sectionbody"><div class="sect2"><div class="paragraph">  
</div><div class="listingblock"><div class="content"></div></div></div></div></div>```bash
docker-compose up
```

## Install via .deb (not recommended) 

Download and install the public signing key:

<div class="sect1" id="bkmrk--7"><div class="sectionbody"><div class="paragraph">  
</div><div class="listingblock"><div class="content"></div></div></div></div>```bash
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
```

<div class="sect1" id="bkmrk--8"><div class="sectionbody"><div class="listingblock"><div class="content"></div></div><div class="paragraph">  
</div></div></div>You may need to install the `apt-transport-https` package on Debian before proceeding:

<div class="sect1" id="bkmrk--9"><div class="sectionbody"><div class="paragraph">  
</div><div class="listingblock"><div class="content"></div></div></div></div>```bash
sudo apt-get install apt-transport-https
```

<div class="sect1" id="bkmrk--10"><div class="sectionbody"><div class="listingblock"><div class="content"></div></div><div class="paragraph">  
</div></div></div>Save the repository definition to `/etc/apt/sources.list.d/elastic-5.x.list`:

<div class="sect1" id="bkmrk--11"><div class="sectionbody"><div class="paragraph">  
</div><div class="listingblock"><div class="content"></div></div></div></div>```bash
echo "deb https://artifacts.elastic.co/packages/5.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-5.x.list
```

<div class="sect1" id="bkmrk--12"><div class="sectionbody"><div class="listingblock"><div class="content"></div></div><div class="paragraph">  
</div></div></div>Update the repository and install OpenJDK 11 and Elasticsearch:

<div class="sect1" id="bkmrk--13"><div class="sectionbody"><div class="paragraph">  
</div><div class="listingblock"><div class="content"></div></div></div></div>```bash
sudo apt-get update && sudo apt-get install openjdk-11-jre elasticsearch
```

<div class="sect1" id="bkmrk--14"><div class="sectionbody"><div class="listingblock"><div class="content"></div></div><div class="paragraph"><div class="notices note"><div class="paragraph">  
</div></div></div></div></div>You might need to tweak the OpenJDK version to match the one available for your distribution.

Start Elasticsearch with:

<div class="sect1" id="bkmrk--15"><div class="sectionbody"><div class="paragraph">  
</div><div class="listingblock"><div class="content"></div></div></div></div>```bash
sudo systemctl start elasticsearch.service
```

<div class="sect1" id="bkmrk--16"><div class="sectionbody"><div class="listingblock"><div class="content"></div></div><div class="paragraph">  
</div></div></div>or on older Ubuntus:

<div class="sect1" id="bkmrk--17"><div class="sectionbody"><div class="paragraph">  
</div><div class="listingblock"><div class="content"></div></div></div></div>```bash
/etc/init.d/elasticsearch start
```

## Test Installation 

Check if the server is running with:

<div class="sect1" id="bkmrk--18"><div class="sectionbody"><div class="paragraph">  
</div><div class="listingblock"><div class="content"></div></div></div></div>```bash
curl -X GET "localhost:9200/"
```

<div class="sect1" id="bkmrk--19"><div class="sectionbody"><div class="listingblock"><div class="content"></div></div><div class="paragraph">  
</div></div></div>And you should receive something like this:

<div class="sect1" id="bkmrk--20"><div class="sectionbody"><div class="paragraph">  
</div><div class="listingblock"><div class="content"></div></div></div></div>```json
{
  "name" : "B5VzMdk",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "KGoWI84GQ8SZipmDaeA7pA",
  "version" : {
    "number" : "5.6.10",
    "build_hash" : "b727a60",
    "build_date" : "2018-06-06T15:48:34.860Z",
    "build_snapshot" : false,
    "lucene_version" : "6.6.1"
  },
  "tagline" : "You Know, for Search"
}
```

<div class="sect1" id="bkmrk--21"><div class="sectionbody"><div class="listingblock"><div class="content"></div></div><div class="paragraph"><div class="notices warning"><div class="paragraph">  
</div></div></div></div></div>Note that the current setup does not provide authentication. Remember to secure your Elasticsearch server before going to production, or your data will be vulnerable!