Elasticsearch is a distributed, free and open search and analytics engine for all types of data, including textual, numerical, geospatial, structured, and unstructured.
Since its initial release in 2010, Elasticsearch, built on Apache Lucene, has become the most popular search engine commonly used for log analytics, full-text search, etc.
In this article, we will show you how to install and set up Elasticsearch on Debian 11.
Table of Contents
Prerequisites
- A Debian 11 VPS with at least 4GB of RAM
- SSH access with sudo privileges or root access.
In addition, it is recommended to have at least 2GB of SWAP memory, even if you have enough available RAM.
Step 1. Update the System
First of all, we need to log in to our Debian 11 VPS through SSH:
ssh root@IP_Address -p Port_number
Replace “root” with a user with sudo privileges or root if necessary. Additionally, replace “IP_Address” and “Port_Number” with your server’s respective IP address and SSH port number. Next, let’s make sure that we’re on Debian 11. You can do that like this:
# lsb_release -a
You should get an output like this one:
Distributor ID: Debian Description: Debian GNU/Linux 11 (bulleseye) Release: 11 Codename: bullseye
Then, run the following command to make sure that all installed packages on the server are updated to their latest available versions:
# apt update && apt upgrade
Step 2. Install Dependencies
There are some dependencies you would need to install before proceeding with the next steps.
# apt install gnupg wget apt-transport-https
Step 3. Install Java
To run Elasticsearch, we need Java. Let’s install it from the default Debian 11 repository.
# apt install default-jre
Debian 11 ships with Java 11 by default; it can be verified by running this command below.
# java --version
You will get an output like this:
openjdk 11.0.18 2023-01-17 OpenJDK Runtime Environment (build 11.0.18+10-post-Debian-1deb11u1) OpenJDK 64-Bit Server VM (build 11.0.18+10-post-Debian-1deb11u1, mixed mode, sharing)
Step 4. Add Elasticsearch Repository
To ensure the download source is secure and from the official source, we need to import the GPG key by downloading it using wget.
# wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | gpg --dearmor | tee /usr/share/keyrings/elasticsearch.gpg
Debian 11 does not ship with a package for Elasticsearch. Fortunately, the Elasticsearch developer team has provided its own repository packages for Debian. We can add the Elasticsearch repository by executing the command below.
# echo "deb [signed-by=/usr/share/keyrings/elasticsearch.gpg] https://artifacts.elastic.co/packages/8.x/apt stable main" | tee /etc/apt/sources.list.d/elastic-8.list
To refresh the system packages index and update the list of available packages after adding a new repository, we should run apt update.
# apt update -y
Step 5. Install Elasticsearch
We added the Elasticsearch repository in the previous step, and the package metadata list has also been updated. We can now install Elasticsearch by invoking this command:
# apt install elasticsearch
On the Debian 11 system, once Elasticsearch is installed, it is not automatically running. Execute the following command to run Elasticsearch and enable it on boot.
# systemctl enable --now elasticsearch
That’s it, Elasticsearch is now running, and you can verify with this command
# systemctl status elasticsearch
It will return an output like this:
● elasticsearch.service - Elasticsearch Loaded: loaded (/lib/systemd/system/elasticsearch.service; enabled; vendor preset: enabled) Active: active (running) since Tue 2023-04-18 08:59:54 EDT; 1min 14s ago Docs: https://www.elastic.co Main PID: 8236 (java) Tasks: 71 (limit: 2294) Memory: 1.3G CPU: 44.403s CGroup: /system.slice/elasticsearch.service ├─8236 /usr/share/elasticsearch/jdk/bin/java -Xms4m -Xmx64m -XX:+UseSerialGC -Dcli.name=server -Dcli.script=/usr/share/elasticsearch/bin/elasticsearch -Dcli.libs=lib/tools> ├─8295 /usr/share/elasticsearch/jdk/bin/java -Des.networkaddress.cache.ttl=60 -Des.networkaddress.cache.negative.ttl=10 -Djava.security.manager=allow -XX:+AlwaysPreTouch -> └─8315 /usr/share/elasticsearch/modules/x-pack-ml/platform/linux-x86_64/bin/controller Apr 18 08:59:13 debian11 systemd[1]: Starting Elasticsearch... Apr 18 08:59:54 debian11 systemd[1]: Started Elasticsearch.
Step 6. Configure Elasticsearch
There are some configurations you can modify. But, first of all, we will reset the ‘elastic’ user password. To proceed with this, we can disable the cluster if it’s not used.
comment this line “cluster.initial_master_nodes: [“YOURHOSTNAME”]” then add this line: discovery.type: single-node
It should look like this:
#cluster.initial_master_nodes: ["debian11"] discovery.type: single-node
And restart Elasticsearch
# systemctl restart elasticsearch
Next, let’s reset Elastic’s password.
# /usr/share/elasticsearch/bin/elasticsearch-reset-password -u elastic
The command above will prompt you that it will print the new password in the console; press Y to continue.
It returns this output:
This tool will reset the password of the [elastic] user to an autogenerated value. The password will be printed in the console. Please confirm that you would like to continue [y/N]y
After pressing Y, it will print you the new password and save it.
Password for the [elastic] user successfully reset. New value: taSSapenu32gkAS0098B
With the new password, we can run this command to check its connection to Elasticsearch.
# curl -u "elastic:taSSapenu32gkAS0098B" https://localhost:9200 -k
The command will return an output like this.
{ "name" : "debian11", "cluster_name" : "elasticsearch", "cluster_uuid" : "rByiAU1MTgKUrsYMjX4E4A", "version" : { "number" : "8.7.0", "build_flavor" : "default", "build_type" : "deb", "build_hash" : "09520b59b6bc1057340b55750186466ea715e30e", "build_date" : "2023-03-27T16:31:09.816451435Z", "build_snapshot" : false, "lucene_version" : "9.5.0", "minimum_wire_compatibility_version" : "7.17.0", "minimum_index_compatibility_version" : "7.0.0" }, "tagline" : "You Know, for Search" }
Next, by default, Elasticsearch is only accessible on localhost. We can set a different address to expose the running node on the network by adding this line to the configuration file:
network.host: 0.0.0.0
Another important setting is the jvm.options. We can create a file in /etc/elasticsearch/jvm.options.d/ directory. By default, Elasticsearch automatically sets the JVM heap size based on a node’s role and the available, total memory. Using the default sizing is recommended for most production environments.
To override the default heap size, set the minimum and maximum heap size settings, Xms
and Xmx
. The minimum and maximum values must be the same. Let’s create a file there and configure the minimum and maximum java heap space.
# nano /etc/elasticsearch/jvm.options.d/memory.conf
And paste these two lines in to that file.
-Xms4g -Xmx4g
Save the file, then exit. Always remember to restart the service every time we make changes to the configuration file.
# systemctl restart elasticsearch
Congratulations! You have successfully installed and configured Elasticsearch on Debian 11.
Of course, if you are one of our Debian Hosting customers, you don’t have to install and set up Elasticsearch on Debian 11 yourself – simply ask our admins, sit back, and relax. Our admins will install and set up Elasticsearch on Debian 11 immediately without any additional fee, along with many useful optimizations we can do for you. Managing an Elasticsearch server is not just about the installation; we can help you optimize your Elasticsearch installation if you have a VPS with us.
If you liked this post about how to install and set up Elasticsearch on Debian 11, please share it with your friends on social networks or simply leave a comment in the comments section. Thanks.