Elasticsearch is available on Github but is not available in the default apt repository for Ubuntu or Debian. Elastic, the company behind Elasticsearch, however do host a public repository that you can add to your system to install Elasticsearch via apt.

It is developed using Java thus you'll also need to install Java Runtime Environment before installing Elasticsearch. Both Java Runtime Environment and Elasticsearch can be installed from the terminal using apt.

Step-by-step video guide:

Steps to install Elasticsearch on Ubuntu or Debian:

  1. 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:
  2. 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
  3. 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.
  4. 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
  5. 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

  6. 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)
  7. 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

    Related: How to install Kibana on Ubuntu or Debian

  8. 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.
  9. Start Elasticsearch service.
     $ sudo systemctl start elasticsearch
  10. 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
Discuss the article:

Comment anonymously. Login not required.

Share!