Elasticsearch is available on Github but is not available in the default apt repository for Ubuntu or Debian. However, Elastic, the company behind Elasticsearch, hosts a public repository that you can add to your system to install Elasticsearch via apt.
It is developed using Java; thus, you'll need to install Java Runtime Environment before installing Elasticsearch. Both Java Runtime Environment and Elasticsearch can be installed from the terminal using apt.
Steps to install Elasticsearch on Ubuntu or Debian:
-
Add GPG key of Elasticsearch's repository.
$ wget --quiet --output-document=- https://artifacts.elastic.co/GPG-KEY-elasticsearch | gpg --dearmor | sudo tee /usr/share/keyrings/elasticsearch-archive-keyring.gpg [sudo] password for user:
-
Add Elasticsearch's repository to apt's.
$ echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list deb https://artifacts.elastic.co/packages/7.x/apt stable main [sudo] password for user: deb https://artifacts.elastic.co/packages/7.x/apt stable main
-
Update list of available packages from the newly added repository.
$ sudo apt update Hit:1 https://artifacts.elastic.co/packages/7.x/apt stable InRelease Hit:2 http://archive.ubuntu.com/ubuntu hirsute InRelease Get:3 http://security.ubuntu.com/ubuntu hirsute-security InRelease [101 kB] Get:4 http://archive.ubuntu.com/ubuntu hirsute-updates InRelease [109 kB] Hit:5 http://archive.ubuntu.com/ubuntu hirsute-backports InRelease Fetched 209 kB in 1s (157 kB/s) Reading package lists... Done Building dependency tree... Done Reading state information... Done All packages are up to date.
-
Install latest Java Runtime Environment.
$ sudo apt install --assume-yes default-jre Reading package lists... Done Building dependency tree... Done Reading state information... Done The following additional packages will be installed: ca-certificates-java default-jre-headless fonts-dejavu-extra java-common libatk-wrapper-java libatk-wrapper-java-jni openjdk-11-jre openjdk-11-jre-headless Suggested packages: fonts-ipafont-gothic fonts-ipafont-mincho fonts-wqy-microhei | fonts-wqy-zenhei The following NEW packages will be installed: ca-certificates-java default-jre default-jre-headless fonts-dejavu-extra java-common libatk-wrapper-java libatk-wrapper-java-jni openjdk-11-jre openjdk-11-jre-headless 0 upgraded, 9 newly installed, 0 to remove and 0 not upgraded. Need to get 39.6 MB of archives. After this operation, 179 MB of additional disk space will be used. ##### snipped
-
Install Elasticsearch package using apt.
$ sudo apt install --assume-yes elasticsearch Reading package lists... Done Building dependency tree... Done Reading state information... Done The following NEW packages will be installed: elasticsearch 0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. Need to get 326 MB of archives. ##### snipped
-
Enable access to port 9200 and 9300 from the local firewall.
$ sudo ufw allow 9200 Rules updated Rules updated (v6) $ sudo ufw allow 9300 Rules updated Rules updated (v6)
-
Open Elasticsearch configuration file using your preferred text editor to edit configuration options if necessary.
$ sudo vi /etc/elasticsearch/elasticsearch.yml
Listen to host's IP address to enable connection from remote host or use 0.0.0.0 to listen on all available IP addresses in your system.
network.host: 0.0.0.0
-
Configure Elasticsearch to automatically start during boot.
$ sudo systemctl enable elasticsearch Synchronizing state of elasticsearch.service with SysV service script with /lib/systemd/systemd-sysv-install. Executing: /lib/systemd/systemd-sysv-install enable elasticsearch Created symlink /etc/systemd/system/multi-user.target.wants/elasticsearch.service → /lib/systemd/system/elasticsearch.service.
-
Start Elasticsearch service.
$ sudo systemctl start elasticsearch
-
Query Elasticsearch service to test if installation was successful.
$ curl 127.0.0.1:9200 { "name" : "host", "cluster_name" : "elasticsearch", "cluster_uuid" : "NqCDFByvRKWPcjO1z09hmg", "version" : { "number" : "7.12.1", "build_flavor" : "default", "build_type" : "deb", "build_hash" : "3186837139b9c6b6d23c3200870651f10d3343b7", "build_date" : "2021-04-20T20:56:39.040728659Z", "build_snapshot" : false, "lucene_version" : "8.8.0", "minimum_wire_compatibility_version" : "6.8.0", "minimum_index_compatibility_version" : "6.0.0-beta1" }, "tagline" : "You Know, for Search" }
You will get the following error if you immediately test the service after starting it up because Elasticsearch takes a while to start.
curl 127.0.0.1:9200 curl: (7) Failed to connect to 127.0.0.1 port 9200: Connection refused