wiki/HowtoMeilisearch.md

153 lines
5.7 KiB
Markdown
Raw Normal View History

2023-05-18 17:08:14 +02:00
---
categories: databases bdd nosql
title: Howto Meilisearch
...
- Documentation : [https://www.meilisearch.com/docs](https://www.meilisearch.com/docs)
- Code : [https://github.com/meilisearch/meilisearch](https://github.com/meilisearch/meilisearch)
- Licence : [MIT License](https://github.com/meilisearch/meilisearch/blob/main/LICENSE)
2023-05-18 17:25:29 +02:00
- Langage : Rust
2023-05-18 17:08:14 +02:00
**Meilisearch** est un engin de recherche doté d'une API RESTful. Mis à disposition aux conditions de la licence MIT et écrit en Rust, il se démarque de ses concurrents (Elasticsearch, Algolia, etc. Voir le [tableau comparatif](https://www.meilisearch.com/docs/learn/what_is_meilisearch/comparison_to_alternatives)) par sa rapidité d'exécution et un focus sur l'expérience utilisateur. Les données de Meilisearch sont stockées dans [LMDB](https://www.meilisearch.com/docs/learn/advanced/storage#understanding-lmdb).
# Requis
Le code roule sur [différents systèmes d'exploitation](https://www.meilisearch.com/docs/learn/getting_started/installation#supported-operating-systems) dont les principales distributions de GNU/Linux utilisant `glibc 2.27` ou + sur l'architecture matérielle `amd64/x86_64`.
# Installation
2023-05-18 17:25:29 +02:00
Une [procédure](https://www.meilisearch.com/docs/learn/cookbooks/running_production) d'installation pour Debian est disponible dans la documentation officielle.
2023-05-18 17:08:14 +02:00
La première étape est d'ajouter le dépôt privé du développeur avant d'installer le paquet Debian :
~~~
2023-05-18 17:34:56 +02:00
# echo "deb [trusted=yes] https://apt.fury.io/meilisearch/ /" | tee /etc/apt/sources.list.d/fury.list
2023-05-18 17:25:29 +02:00
# apt update && apt install meilisearch
2023-05-18 17:08:14 +02:00
~~~
Ensuite on ajoute un nouvel utilisateur UNIX non privilégié qui sera chargé d'exécuter Meilisearch :
~~~
# useradd -d /home/meilisearch -b /bin/false -m -r meilisearch
~~~
Puis on récupère une copie du fichier de configuration principal qu'on ajuste ensuite au besoin :
~~~
# curl https://raw.githubusercontent.com/meilisearch/meilisearch/latest/config.toml > /etc/meilisearch.toml
2023-06-05 10:49:42 +02:00
# chown meilisearch: /etc/meilisearch.toml
2023-05-18 17:08:14 +02:00
# editor /etc/meilisearch.toml
~~~
Voici un exemple de contenu pertinent pour le fichier `/etc/meilisearch.toml` :
~~~
env = "production"
master_key = "YOUR_MASTER_KEY_VALUE"
db_path = "/home/meilisearch/data"
dump_dir = "/home/meilisearch/dumps"
snapshot_dir = "/home/meilisearch/snapshots"
~~~
Pour des raisons de sécurité évidentes, il faut mettre une vraie chaîne aléatoire (générée par exemple via la commande `apg -n1 -m64`) à la place de `YOUR_MASTER_KEY_VALUE`. Aussi, les répertoires cités ci-haut n'existent pas encore, alors il faut les ajouter :
~~~
# sudo -iu meilisearch
2023-06-05 11:25:21 +02:00
$ mkdir data dumps snapshots log
2023-05-18 17:08:14 +02:00
$ exit
~~~
Meilisearch peut être lancé via systemd. On commence par éditer un nouveau fichier de configuration nommé `/etc/systemd/system/meilisearch.service` dans lequel on insère quelque chose comme ceci :
~~~
[Unit]
Description=Meilisearch
After=systemd-user-sessions.service
[Service]
Type=simple
WorkingDirectory=/home/meilisearch
ExecStart=/usr/bin/meilisearch --config-file-path /etc/meilisearch.toml
User=meilisearch
Group=meilisearch
[Install]
WantedBy=multi-user.target
~~~
... et on lance la nouvelle unité systemd après l'avoir activée :
~~~
2023-06-05 10:49:42 +02:00
# systemctl enable --now meilisearch
2023-05-18 17:08:14 +02:00
# systemctl status meilisearch
~~~
2023-05-18 17:25:29 +02:00
Le service Meilisearch est maintenant prêt à fonctionner en local (`127.0.0.1:7700`). On voudra probablement le faire communiquer avec le monde extérieur via un serveur mandataire (*proxy*) comme Nginx, HAProxy ou Apache. La doc officielle [donne un exemple pour nginx](https://www.meilisearch.com/docs/learn/cookbooks/running_production#step-5-secure-and-finish-your-setup). En voici un autre pour Apache, qui aura besoin d'un fichier de configuration pour vhost (disons `/etc/apache2/sites-available/meilisearch.conf`) semblable à celui-ci :
2023-05-18 17:08:14 +02:00
~~~
<VirtualHost *:80 *:443>
# FQDN principal
ServerName meilisearch.evolix.net
# Repertoire principal
DocumentRoot /home/meilisearch/www/
# SSL
SSLEngine On
SSLCertificateFile /etc/letsencrypt/meilisearch/live/fullchain.pem
SSLCertificateKeyFile /etc/ssl/private/meilisearch.key
# Propriete du repertoire
<Directory /home/meilisearch/www/>
Require all denied
Include /etc/apache2/whitelist.conf
</Directory>
# user - group
AssignUserID meilisearch meilisearch
2023-06-05 11:25:21 +02:00
# LOG
CustomLog /var/log/apache2/access.log vhost_combined
CustomLog /home/meilisearch/log/access.log combined
ErrorLog /home/meilisearch/log/error.log
2023-05-18 17:08:14 +02:00
# REDIR HTTPS
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP:X-Forwarded-Proto} !=https
RewriteRule ^ https://%{HTTP:Host}%{REQUEST_URI} [L,R=permanent]
ProxyPreserveHost On
ProxyPass / http://localhost:7700
ProxyPassReverse / http://localhost:7700
<Proxy *>
Require all denied
Include /etc/apache2/whitelist.conf
</Proxy>
</VirtualHost>
~~~
2023-05-18 17:34:56 +02:00
Le vhost donné en exemple ci-haut écoute sur les ports 80 et 443 (SSL), force la redirection sur `https://` et n'autorise l'accès qu'à une liste d'adresses IP de confiance. Aussi, la directive `AssignUserID` suppose l'installation de Apache 2 MPM ITK. L'activation du vhost se fait de la manière suivante :
2023-05-18 17:08:14 +02:00
~~~
# a2ensite meilisearch
# apache2ctl -t && { systemctl reload apache2.service; systemctl status apache2.service; }
~~~
Voir [HowtoApache](HowtoApache) au besoin pour plus d'informations.
# Mise à jour
~~~
# apt-get update
# apt-get install meilisearch
# systemctl restart meilisearch
~~~
# Utilisation
Voir le [guide de démarrage rapide](https://www.meilisearch.com/docs/learn/getting_started/quick_start) pour apprendre comment ajouter des documents dans la base de données de Meilisearch, gérer l'indexation et effectuer des recherches.