Tutoriel: Installation ElasticSearch

Tags: #<Tag:0x00007fb8e40a0b00> #<Tag:0x00007fb8e40a0880> #<Tag:0x00007fb8e40a0538>

Introduction

voici un tutoriel d’installation ElasticSearch. En suivant la doc ElasticSearch ici, vous devriez y arriver tout aussi bien.
Dans ce document, je m’attache à présenter une installation avec une partition dédiée pour ElasticSearch, ainsi qu’avec certain critère particulier. On peut trouver les réponses dans les docs en ligne, mais ce n’est pas toujours simple de s’y retrouver.
Ce texte n’a pas pour vocation à être exhaustif.
Pour mon installation, j 'utilise une machine physique dont un disque nvme est dédié au système, et un disque pour les données (quelles soient de bases de données, d’indexer comme ElasticSearch, etc…). Je ne parle pas ici des données de /home qui ne sert que pour les utilisateur identifié connecté.
J’ai un partitionnement non standard:

  • les disques sont chiffrés
  • J’utilise bien sur LVM
  • Le partitionnement est conçu pour sécuriser les points de montages avec les options nodev, nosuid et noexec.
nvme0n1                         259:0    0 476,9G  0 disk  
├─nvme0n1p1                     259:1    0   953M  0 part  /boot/efi
└─nvme0n1p2                     259:2    0   476G  0 part  
  └─nvme0n1p2_crypt             254:0    0   476G  0 crypt 
    ├─vg103-swap                254:1    0  47,8G  0 lvm   [SWAP]
    ├─vg103-boot                254:2    0   952M  0 lvm   /boot
    ├─vg103-root                254:3    0    14G  0 lvm   /
    ├─vg103-home                254:4    0  23,3G  0 lvm   /home
    ├─vg103-var                 254:5    0    14G  0 lvm   /var
    ├─vg103-var_log             254:6    0   4,7G  0 lvm   /var/log
    ├─vg103-var_log_audit       254:7    0   4,7G  0 lvm   /var/log/audit
    ├─vg103-var_tmp             254:8    0   3,7G  0 lvm   /var/tmp
    └─vg103-tmp                 254:9    0   3,7G  0 lvm   /tmp

Préparation

Installation du paquet

Tout d’abord il va falloir configurer apt pour accéder au dépôt ElasticSearch.

Télécharger la clef du dépot:

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --dearmor -o /usr/share/keyrings/elasticsearch-keyring.gpg

La source apt est donnée par elastic search avec:

echo "deb [signed-by=/usr/share/keyrings/elasticsearch-keyring.gpg] https://artifacts.elastic.co/packages/9.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-9.x.list

Convertir en DEB822 dans le fichier /etc/apt/sources.list.d/elastic-9.x.sources:

Types: deb
URIs: https://artifacts.elastic.co/packages/9.x/apt
Suites: stable
Components: main
Signed-By: /usr/share/keyrings/elasticsearch-keyring.gpg

Sur un système susceptible d’utiliser plusieurs architectures, ajouter à la fin du fichier:
Architectures: amd64

Installer

Mettre à jour la base apt:
apt update

Pour installer elasticsearch:
apt-get install elasticsearch

ATTENTION: Prêter la plus grande attention au message suivant:
--------------------------- Security autoconfiguration information ------------------------------

Authentication and authorization are enabled.
TLS for the transport and HTTP layers is enabled and configured.

The generated password for the elastic built-in superuser is : qmsldjfmlkqjsmfkljqsmlkjdfmsqkjlfmkldjfmql

If this node should join an existing cluster, you can reconfigure this with
'/usr/share/elasticsearch/bin/elasticsearch-reconfigure-node --enrollment-token ’
after creating an enrollment token on your existing cluster.

You can complete the following actions at any time:

Reset the password of the elastic built-in superuser with
‹ /usr/share/elasticsearch/bin/elasticsearch-reset-password -u elastic ›.

Generate an enrollment token for Kibana instances with
‹ /usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s kibana ›.

Generate an enrollment token for Elasticsearch nodes with
‹ /usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s node ›.


C’est votre mot de passe.

Dossier chiffré dédié

Introduction

J’ai décidé dans mon architecture que le dossier /var/lib/elasticsearch serait sur une partition chiffrée dédiée.
C’est un choix personnel que vous n’êtes pas obligé de faire.
Si vous voulez rester avec le répertoire standard, passer ce chapitre.

Création de la partition chiffrée et montage

Pour cela j’ai utilisé l’intégralité d’un disque dur. j’ai créé manuellement la partition ainsi:

cryptsetup luksFormat --label ELK --cipher=serpent-xts-plain64 --hash=SHA512 --pbkdf=argon2id /dev/sda

Ouvrir la partition chiffrée ELK_crypt à partir de /dev/sda:

cryptsetup luksOpen /dev/sda ELK_crypt

Ajouter celle-ci comme volume physique LVM:

pvcreate /dev/mapper/ELK_crypt

Créer un nouveau groupe de volumes LVM:

vgcreate vgelk /dev/mapper/ELK_crypt

Dans lequel j’ai créé un volume logique LVM de 300G pour commencer:

lvcreate -L 300G --name var_lib_elasticsearch vgelk

Comme j’aime bien avoir des labels:
Pour le volume logique:

e2label /dev/mapper/vgelk-var_lib_elasticsearch ELASTIC

Sachez que pour un LUKS la commande de changement d’un label c’est

cryptsetup config <mon device> --label <mon label>

Pour être sûr du déchiffrement au démarrage (obligatoire, car sinon le montage ne pourra pas se faire, et le système sera en échec au démarrage), il faut ajouter le disque dans /etc/crypttab:

echo "ELK_crypt UUID=<le UUID de la partition> none luks,discard,x-initrd.attach,initramfs" >> /etc/crypttab

Et bien sur mettre à jour l’initramfs:

update-initramfs -k all -u

Maintenant il faut créer le montage dans fstab. Le répertoire créer par l’installation du paquet a été créé ainsi:

drwxr-s---  2 elasticsearch elasticsearch 4096  8 janv. 23:14 elasticsearch

Soit:

~# stat /var/lib/elasticsearch
  Fichier : /var/lib/elasticsearch
   Taille : 4096      	Blocs : 8          Blocs d'E/S : 4096   directory
Périphérique : 254/5	Inœud : 143482      Liens : 2
Accès : (2750/drwxr-s---)  UID : (  110/elasticsearch)   GID : (  116/elasticsearch)

Il faut donc créer le montage dans /etc/fstab pour qu’il soit absolument identique:
On utilisera les éléments suivants:

  • Pour s’assurer que le user et le groupe propriétaire soit les bon, nous utiliserons X-mount.owner pour le user, et X-mount.group, en utilisant les ID correspondant
  • Pour s’assurer que les permissions seront les bonne, y compris le sticky bit, nous utiliserons X-mount.mode avec l’accè_s tel que montré par la commande stat.
    Ce qui donne l’entrée suivante:
/dev/mapper/vgelk-var_lib_elasticsearch	/var/lib/elasticsearch	ext4	relatime,nodev,nosuid,X-mount.owner=110,X-mount.group=116,X-mount.mode=2750	0	2

Ne pas oublier de faire la commande suivante pour cette modification soit prise en compte:

systemctl daemon-reload

Et on peut monter le répertoire:

mount /var/lib/elasticsearch

Le répertoire temporaire

Introduction

Autre point, Elasticsearch utilise par défaut le répertoire /tmp avec des droits exec. Si vous êtes comme moi et que /tmp est monté en mode noexec, le démarrage d’elastic sera en échec car les accès au répertoire temporaire de gestion JNA ne marchera pas.
Il faut soit enlever le noexec de /tmp (mauvaise idée car c’est là pour une bonne raison, la sécurité), soit définir un autre répertoire temporaire.

Création du répertoire temporaire

Personnellement, j’utiliserais /var/lib/elasticsearch/tmp, en le créant ainsi:

mkdir /var/lib/elasticsearch/tmp

puis en modifiant l’utilisateur et le groupe propriétaire:

chown elasticsearch:elasticsearch /var/lib/elasticsearch/tmp

Puis en modifiant les permissions:

chmod 2750 /var/lib/elasticsearch/tmp

Et on a:

drwxr-s--- 2 elasticsearch elasticsearch 4096 17 janv. 16:01 tmp

Soit:

~# stat /var/lib/elasticsearch/tmp
  Fichier : /var/lib/elasticsearch/tmp
   Taille : 4096      	Blocs : 8          Blocs d'E/S : 4096   directory
Périphérique : 254/11	Inœud : 9699329     Liens : 2
Accès : (2750/drwxr-s---)  UID : (  110/elasticsearch)   GID : (  116/elasticsearch)

Pour que ce soit pris en compte, il faut modifier systemd pour lui dire d’utiliser l’environnement temporaire ainsi créé:

systemctl edit elasticsearch

Et entrer dans l’espace autorisé:

[Service]
Environment=ES_TMPDIR=/var/lib/elasticsearch/tmp

Le fichier d’override a ainsi été créé: /etc/systemd/system/elasticsearch.service.d/override.conf
N’oubliez par de recharger la configuration systemd:

systemctl daemon-reload

Ne reste plus qu’à faire la configuration de base d’elasticsearch dans /etc/elasticsearch/elasticsearch.yml

Configuration ElasticSearch

Introduction

La configuration ici présentée est une configuration de base, elle n’a pas pour vocation d’être une configuration de production (il y aurait des éléments de configuration de sécurisation à faire et d’autres aussi pour les performances.

Configuration

le cluster:

cluster.name: my-application

Le node:

node.name: node-1

Le réseau (pour le moment j’autorise toutes les interfaces):

network.host: 0.0.0.0

Le port HTTP:

http.port: 9200

Les connections API:

http.host: 0.0.0.0

Le transport:

transport.host: 0.0.0.0

Si tout est bon, vous pouvez démarrer le service elasticsearch:

systemctl start elasticsearch

Pour qu’il soit démarré à chaque démarrage du système:

systemctl enable elasticsearch

Et voilà, vous avez un elasticsearch fonctionnel.

~# systemctl status elasticsearch.service 
● elasticsearch.service - Elasticsearch
     Loaded: loaded (/usr/lib/systemd/system/elasticsearch.service; disabled; preset: enabled)
    Drop-In: /etc/systemd/system/elasticsearch.service.d
             └─override.conf
     Active: active (running) since Sat 2026-01-17 16:16:13 CET; 38s ago
 Invocation: 1a4fadc5ae524b36a397ff2922eea21c
       Docs: https://www.elastic.co
   Main PID: 12958 (java)
      Tasks: 98 (limit: 18942)
     Memory: 8.4G (peak: 8.4G)
        CPU: 1min 11.206s
     CGroup: /system.slice/elasticsearch.service
             ├─12958 /usr/share/elasticsearch/jdk/bin/java -Xms4m -Xmx64m -XX:+UseSerialGC -Dcli.name=server -Dcli.script=/usr/share/elasticsearch/bin/elasticsearch -Dcli.libs=lib>
             ├─13026 /usr/share/elasticsearch/jdk/bin/java -Des.networkaddress.cache.ttl=60 -Des.networkaddress.cache.negative.ttl=10 -XX:+AlwaysPreTouch -Xss1m -Djava.awt.headles>
             └─13059 /usr/share/elasticsearch/modules/x-pack-ml/platform/linux-x86_64/bin/controller

janv. 17 16:15:23 asmodee systemd[1]: Starting elasticsearch.service - Elasticsearch...
janv. 17 16:16:13 asmodee systemd[1]: Started elasticsearch.service - Elasticsearch.

Et pour tester

~# curl --cacert /etc/elasticsearch/certs/http_ca.crt -u elastic:_qq9Y30M20MNqQ*GnC+b https://localhost:9200 | jq .
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   531  100   531    0     0   1902      0 --:--:-- --:--:-- --:--:--  1903
{
  "name": "ENED001",
  "cluster_name": "Enedwaith.Org",
  "cluster_uuid": "DlTJsaH0RNGLjlsANIx8gw",
  "version": {
    "number": "9.2.4",
    "build_flavor": "default",
    "build_type": "deb",
    "build_hash": "dfc5c38614c29a598e132c035b66160d3d350894",
    "build_date": "2026-01-08T22:07:25.170027027Z",
    "build_snapshot": false,
    "lucene_version": "10.3.2",
    "minimum_wire_compatibility_version": "8.19.0",
    "minimum_index_compatibility_version": "8.0.0"
  },
  "tagline": "You Know, for Search"
}

Conclusion

Il n’y a rien de compliqué, mais il faut bien établir les étapes de l’installation pour s’assurer d’avoir une configuration fiable et stable; sans bidouille en somme ;).
L’étape suivant sera de sécuriser l’installation (utiliser des certificat qui ne soit pas des certificat auto-générés) et de faire l’installation et la configuration de Kibana.