Comment installer et configurer Neo4j sur Ubuntu 22.04

De Get Docs
Aller à :navigation, rechercher

Introduction

Neo4j est une base de données graphique qui enregistre les relations entre les nœuds de données, alors que les bases de données relationnelles traditionnelles utilisent des lignes et des colonnes pour stocker et structurer les données. Étant donné que chaque nœud stocke des références à tous les autres nœuds auxquels il est connecté, Neo4j peut encoder et interroger des relations complexes avec une surcharge minimale.

Conditions préalables

Pour suivre ce tutoriel, vous aurez besoin des éléments suivants :

Étape 1 - Installation de Neo4j

Les référentiels de packages officiels Ubuntu ne contiennent pas de copie du moteur de base de données Neo4j. Pour installer le package pris en charge en amont à partir de Neo4j, vous devrez ajouter la clé GPG de Neo4j pour vous assurer que les téléchargements de packages sont valides. Ensuite, vous ajouterez une nouvelle source de package pointant vers le référentiel du logiciel Neo4j, et enfin installerez le package.

Pour commencer, téléchargez et dirigez la sortie de la commande curl vers la commande gpg --dearmor. Cette étape convertira la clé téléchargée dans un format que apt pourra utiliser pour vérifier les packages :

curl -fsSL https://debian.neo4j.com/neotechnology.gpg.key |sudo gpg --dearmor -o /usr/share/keyrings/neo4j.gpg

Ensuite, ajoutez le référentiel Neo4j 4.1 aux sources APT de votre système :

echo "deb [signed-by=/usr/share/keyrings/neo4j.gpg] https://debian.neo4j.com stable 4.1" | sudo tee -a /etc/apt/sources.list.d/neo4j.list

La partie [signed-by=/usr/share/keyrings/neo4j.gpg] du fichier indique à apt d'utiliser la clé que vous avez téléchargée pour vérifier les informations de référentiel et de fichier pour les packages neo4j.

L'étape suivante consiste à mettre à jour vos listes de packages, puis à installer le package Neo4j et toutes ses dépendances. Cette étape téléchargera et installera un package Java compatible, vous pouvez donc saisir Y lorsque la commande apt vous invite à installer toutes les dépendances :

sudo apt update
sudo apt install neo4j

Une fois le processus d'installation terminé, Neo4j devrait fonctionner. Cependant, il n'est pas configuré pour démarrer lors d'un redémarrage de votre système. La dernière étape de configuration consiste donc à l'activer en tant que service, puis à le démarrer :

sudo systemctl enable neo4j.service

Démarrez maintenant le service s'il n'est pas déjà en cours d'exécution :

sudo systemctl start neo4j.service

Après avoir terminé toutes ces étapes, examinez l'état de Neo4j à l'aide de la commande systemctl :

sudo systemctl status neo4j.service

Vous devriez avoir une sortie semblable à celle-ci :

Output● neo4j.service - Neo4j Graph Database
     Loaded: loaded (/lib/systemd/system/neo4j.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2022-04-29 15:01:36 UTC; 2s ago
   Main PID: 2053 (java)
      Tasks: 40 (limit: 38383)
     Memory: 658.1M
     CGroup: /system.slice/neo4j.service
. . .

Il y aura d'autres lignes de sortie détaillées, mais les éléments importants à noter sont les lignes enabled et running en surbrillance. Une fois que vous avez installé et exécuté Neo4j, vous pouvez passer à la série d'étapes suivante, qui vous guidera tout au long de la connexion à Neo4j, de la configuration des informations d'identification et de l'insertion de nœuds dans la base de données.

Étape 2 - Connexion et configuration de Neo4j

Maintenant que Neo4j est installé et configuré pour s'exécuter après tout redémarrage, vous pouvez tester la connexion à la base de données et configurer les informations d'identification de l'administrateur.

Pour interagir avec Neo4j en ligne de commande, utilisez l'utilitaire cypher-shell. Appelez l'utilitaire comme ceci :

cypher-shell

Lorsque vous appelez le shell pour la première fois, vous vous connectez à l'aide de la combinaison d'utilisateur administratif par défaut neo4j et de mot de passe neo4j. Une fois authentifié, Neo4j vous proposera de changer le mot de passe administrateur :

cypher-shell promptusername: neo4j
password: *****
Password change required
new password: ********************
Connected to Neo4j 4.1.0 at neo4j://localhost:7687 as user neo4j.
Type :help for a list of available commands or :exit to exit the shell.
Note that Cypher queries must end with a semicolon.
[email protected]>

Dans cet exemple, le ******************** en surbrillance est la version masquée du nouveau mot de passe. Choisissez votre propre mot de passe fort et mémorable et assurez-vous de l'enregistrer dans un endroit sûr. Une fois le mot de passe défini, vous serez connecté à l'invite interactive [email protected]> où vous pourrez interagir avec les bases de données Neo4j en insérant et en interrogeant des nœuds.

Remarque : L'édition communautaire de Neo4j prend en charge l'exécution d'une seule base de données à la fois. De plus, la version communautaire n'inclut pas la possibilité d'attribuer des rôles et des autorisations aux utilisateurs, ces étapes ne sont donc pas incluses dans ce didacticiel. Pour plus d'informations sur les différentes fonctionnalités prises en charge par l'édition communautaire de Neo4j, consultez la documentation Neo4j ici.


Maintenant que vous avez défini un mot de passe administrateur et testé la connexion à Neo4j, quittez l'invite cypher-shell en tapant :exit :

:exit

Ensuite, vous pouvez éventuellement configurer Neo4j pour accepter les connexions à distance.

Étape 3 (facultatif) - Configuration de Neo4j pour l'accès à distance

Si vous souhaitez intégrer Neo4j dans une application ou un environnement plus vaste utilisant plusieurs serveurs, vous devrez le configurer pour accepter les connexions d'autres systèmes. Dans cette étape, vous configurerez Neo4j pour autoriser les connexions à distance, et vous ajouterez également des règles de pare-feu pour limiter les systèmes pouvant se connecter à votre serveur Neo4j.

Par défaut, Neo4j est configuré pour accepter les connexions de localhost uniquement (127.0.0.1 est l'adresse IP de localhost). Cette configuration garantit que votre serveur Neo4j n'est pas exposé à l'Internet public et que seuls les utilisateurs ayant accès au système local peuvent interagir avec Neo4j.

Pour changer la prise réseau que Neo4j utilise de localhost à une prise que d'autres systèmes peuvent utiliser, vous devrez éditer le fichier /etc/neo4j/neo4j.conf. Ouvrez le fichier de configuration dans votre éditeur préféré et recherchez le paramètre dbms.default_listen_address. L'exemple suivant utilise nano pour modifier le fichier :

sudo nano /etc/neo4j/neo4j.conf

Localisez la ligne #dbms.default_listen_address=0.0.0.0 commentée et décommentez-la en supprimant le premier caractère de commentaire #.

/etc/neo4j/neo4j.conf

. . .
#*****************************************************************
# Network connector configuration
#*****************************************************************

# With default configuration Neo4j only accepts local connections.
# To accept non-local connections, uncomment this line:
dbms.default_listen_address=0.0.0.0
. . .

Par défaut, la valeur 0.0.0.0 liera Neo4j à toutes les interfaces IPv4 disponibles sur votre système, y compris localhost. Si vous souhaitez limiter Neo4j à une adresse IP particulière, par exemple une IP de réseau privé que vos serveurs utilisent pour un chemin de données, spécifiez ici l'adresse IP qui est attribuée à l'interface de réseau privé de votre serveur.

Vous pouvez également configurer Neo4j pour utiliser les interfaces IPv6. Comme avec IPv4, vous pouvez définir la valeur default_listen_address sur une adresse IPv6 spécifique que vous utiliserez pour communiquer avec Neo4j. Si vous souhaitez limiter Neo4j à n'utiliser que l'adresse IPv6 locale pour votre serveur, spécifiez ::1, qui correspond à localhost en utilisant la notation IPv6.

Lorsque vous avez terminé de configurer l'adresse IP par défaut que Neo4j utilisera pour les connexions, enregistrez et fermez neo4j.conf. Si vous utilisez nano, vous pouvez le faire en appuyant sur CTRL+X, suivi de Y puis de ENTER.

Remarque : Si vous configurez Neo4j avec une adresse IPv6, vous ne pourrez pas vous connecter à Neo4j avec cypher-shell en utilisant directement l'adresse IPv6. Au lieu de cela, vous devrez soit configurer un nom DNS qui résout l'adresse IPv6, soit ajouter une entrée dans le fichier /etc/hosts du système distant qui associe l'adresse à un nom. Vous pourrez alors utiliser le DNS ou le nom du fichier hosts pour vous connecter à Neo4j en utilisant IPv6 depuis votre système distant.

Par exemple, un serveur Neo4j avec une adresse IPv6 comme 2001:db8::1 nécessiterait que le système de connexion à distance ait une entrée /etc/hosts comme celle-ci, en substituant un nom à la place de your_hostname ] :

/etc/hosts

. . .
2001:db8::1 your_hostname

Vous vous connecteriez ensuite au serveur depuis le système distant en utilisant le nom que vous avez spécifié comme ceci :

cypher-shell -a 'neo4j://your_hostname:7687'

Si vous limitez Neo4j à utiliser l'adresse IPv6 localhost de ::1, vous pouvez vous y connecter localement sur le serveur Neo4j lui-même en utilisant le nom préconfiguré ip6-localhost de votre /etc/hosts fichier comme celui-ci :

cypher-shell -a 'neo4j://ip6-localhost:7687'

Une fois que vous avez appelé cypher-shell avec l'URI de connexion, vous serez invité à entrer votre nom d'utilisateur et votre mot de passe comme d'habitude.


Maintenant que vous avez configuré Neo4j pour autoriser les connexions à distance, il est important de limiter l'accès à distance afin que seuls les systèmes de confiance puissent s'y connecter. Pour restreindre l'accès à distance à Neo4j, vous pouvez utiliser le pare-feu UFW par défaut d'Ubuntu. Si vous avez suivi le prérequis Tutoriel de configuration initiale du serveur avec Ubuntu 22.04, UFW est déjà installé et prêt à être utilisé sur votre serveur.

Neo4j crée deux sockets réseau dans une installation par défaut, une sur le port 7474 pour l'interface HTTP intégrée, et la principale bolt protocol sur le port 7687. Neo4j recommande de ne pas utiliser le port HTTP en production , donc créez des règles de pare-feu pour le port 7687 uniquement.

Pour configurer le pare-feu pour permettre à un hôte distant de confiance d'accéder à l'interface bolt à l'aide d'IPv4, saisissez la commande suivante :

Exemple d'hôte unique IPv4 UFW

sudo ufw allow from 203.0.113.1 to any port 7687 proto tcp

Remplacez l'adresse IP du système distant de confiance que vous utiliserez pour accéder à Neo4j à la place de la valeur 203.0.113.1 en surbrillance.

Si vous souhaitez autoriser l'accès à toute une plage de réseau, comme un réseau de gestion privé ou un réseau de chemin de données, utilisez une règle comme celle-ci :

Exemple de réseau IPv4 UFW

sudo ufw allow from 192.0.2.0/24 to any port 7687 proto tcp

Encore une fois, remplacez le réseau auquel vous souhaitez avoir accès à Neo4j à la place du réseau 192.0.2.0/24 en surbrillance.

Si vous souhaitez autoriser les hôtes à accéder à distance à Neo4j en utilisant IPv6, ajoutez une règle comme celle-ci :

Exemple d'hôte unique IPv6 UFW

sudo ufw allow from 2001:DB8::1/128 to any port 7687 proto tcp

Remplacez l'adresse IPv6 de votre système de confiance à la place de l'adresse 2001:DB8::1/128 en surbrillance.

Comme avec IPv4, vous pouvez également autoriser une plage d'adresses IPv6 à accéder à votre serveur Neo4j. Pour ce faire, créez une règle UFW comme suit :

Exemple d'hôte unique IPv6 UFW

sudo ufw allow from 2001:DB8::/32 to any port 7687 proto tcp

Remplacez à nouveau votre plage de réseau de confiance à la place de la plage de réseau 2001:DB8::/32 en surbrillance.

Une fois que vous avez créé la ou les règles UFW appropriées pour votre configuration réseau et les hôtes ou réseaux de confiance, activez UFW pour que les règles prennent effet :

sudo ufw reload

Vous pouvez examiner les règles UFW actuellement chargées à l'aide de la commande ufw status. Exécutez-le pour vous assurer que les adresses ou réseaux que vous avez spécifiés peuvent accéder à Neo4j sur le port 7687 :

sudo ufw status

Vous devriez avoir une sortie semblable à celle-ci :

OutputStatus: active

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW       Anywhere
22/tcp (v6)                ALLOW       Anywhere (v6)
7687/tcp                   ALLOW       203.0.113.1

Vous disposez maintenant d'un serveur Neo4j configuré pour autoriser l'accès sur le port 7687 à un serveur ou réseau distant de confiance. Dans la section suivante de ce didacticiel, vous apprendrez à ajouter des nœuds à la base de données et à définir des relations entre eux.

Étape 4 - Utilisation de Neo4j

Pour commencer à utiliser Neo4j, ajoutons quelques exemples de nœuds, puis définissons les relations entre eux. Connectez-vous à Neo4j en utilisant cypher-shell.

cypher-shell

Remarque : Si vous avez configuré Neo4j pour autoriser l'accès à distance dans [Étape 3 (facultatif) — Configuration de Neo4j pour l'accès à distance](étape-3-facultatif-configurant-neo4j-pour-l'accès à distance], connectez-vous en utilisant une URI qui correspond à l'adresse de votre serveur Neo4j. Par exemple si l'IP de votre serveur Neo4j est 203.0.113.1, alors connectez-vous comme ceci depuis votre système distant :

cypher-shell -a 'neo4j://203.0.113.1:7687'

Vous serez invité à entrer votre nom d'utilisateur et votre mot de passe comme d'habitude.

Si vous utilisez IPv6, assurez-vous que vous disposez d'une entrée /etc/hosts avec un nom tel que décrit à l'étape 3. Connectez-vous ensuite à votre serveur Neo4j depuis votre système distant avec une commande cypher-shell comme ceci :

cypher-shell -a 'neo4j://your_hostname:7687'

Encore une fois, assurez-vous que le your_hostname en surbrillance correspond à l'adresse IPv6 de votre serveur Neo4j dans le fichier /etc/hosts de votre système distant.


Une fois que vous vous êtes connecté à Neo4j avec votre nom d'utilisateur et votre mot de passe, vous pouvez interroger et ajouter des nœuds et des relations à la base de données.

Pour commencer, ajoutez un nœud Great White shark à Neo4j. La commande suivante créera un nœud de type Shark, avec un nom Great White.

CREATE (:Shark {name: 'Great White'});

Après chaque commande, vous recevrez une sortie semblable à la suivante :

Output0 rows available after 3 ms, consumed after another 0 ms
Added 1 nodes, Set 1 properties, Added 1 labels

Remarque : Une explication complète de chacune des requêtes cypher suivantes dépasse le cadre de ce didacticiel. Pour plus de détails sur la syntaxe du langage de requête cypher, reportez-vous au The Neo4j Cypher Manual .


Ensuite, ajoutez d'autres requins et reliez-les à l'aide d'une relation appelée FRIEND. Neo4j vous permet de relier des nœuds avec des relations nommées arbitrairement, donc FRIEND peut être n'importe quelle étiquette pour une relation que vous souhaitez utiliser.

Dans l'exemple suivant, vous allez ajouter trois requins et les relier à l'aide d'une relation appelée FRIEND :

CREATE
(:Shark {name: 'Hammerhead'})-[:FRIEND]->
(:Shark {name: 'Sammy'})-[:FRIEND]->
(:Shark {name: 'Megalodon'});

Vous devriez recevoir une sortie indiquant que les trois nouveaux requins ont été ajoutés à la base de données :

Output. . .
Added 3 nodes, Created 2 relationships, Set 3 properties, Added 3 labels

Neo4j vous permet de relier des nœuds en utilisant des noms arbitraires pour les relations, donc en plus de leur relation FRIEND existante, Sammy et Megalodon peuvent également être liés en utilisant un rang taxonomique.

Sammy et Megalodon partagent un ordre commun de Lamniformes. Étant donné que les relations peuvent avoir des propriétés tout comme les nœuds, créez une relation ORDER avec une propriété name définie sur Lamniformes pour aider à décrire l'une des relations de Sammy et Megalodon :

MATCH (a:Shark),(b:Shark)
WHERE a.name = 'Sammy' AND b.name = 'Megalodon'
CREATE (a)-[r:ORDER { name: 'Lamniformes' }]->(b)
RETURN type(r), r.name;

Après avoir ajouté cette relation, vous devriez avoir une sortie comme celle-ci :

Output+-------------------------+
| type(r) | r.name        |
+-------------------------+
| "ORDER" | "Lamniformes" |
+-------------------------+

1 row available after 2 ms, consumed after another 7 ms
Created 1 relationships, Set 1 properties

Ensuite, ajoutez une relation SUPERORDER entre Sammy et Hammerhead basée sur leur super-ordre taxonomique, qui est Selachimorpha. Encore une fois, la relation reçoit une propriété name, qui est définie sur Selachimorpha :

MATCH (a:Shark),(b:Shark)
WHERE a.name = 'Sammy' AND b.name = 'Hammerhead'
CREATE (a)-[r:SUPERORDER { name: 'Selachimorpha'}]->(b)
RETURN type(r), r.name;

Vous recevrez à nouveau une sortie indiquant le type de relation, ainsi que le nom qui a été ajouté pour décrire la relation :

Output+--------------------------------+
| type(r)      | r.name          |
+--------------------------------+
| "SUPERORDER" | "Selachimorpha" |
+--------------------------------+

1 row available after 2 ms, consumed after another 8 ms
Created 1 relationships, Set 1 properties

Enfin, avec tous ces nœuds et relations définis et stockés dans Neo4j, examinez les données à l'aide de la requête suivante :

MATCH (a)-[r]->(b)
RETURN a.name,r,b.name
ORDER BY r;

Vous devriez recevoir une sortie comme celle-ci :

Output+---------------------------------------------------------------------+
| a.name       | r                                     | b.name       |
+---------------------------------------------------------------------+
| "Hammerhead" | [:FRIEND]                             | "Sammy"      |
| "Sammy"      | [:FRIEND]                             | "Megalodon"  |
| "Sammy"      | [:ORDER {name: "Lamniformes"}]        | "Megalodon"  |
| "Sammy"      | [:SUPERORDER {name: "Selachimorpha"}] | "Hammerhead" |
+---------------------------------------------------------------------+

4 rows available after 72 ms, consumed after another 1 ms

La sortie inclut les relations FRIEND qui ont été définies entre Hammerhead, Sammy et Megalodon, ainsi que les relations taxonomiques ORDER et SUPERORDER.

Lorsque vous avez terminé d'ajouter et d'explorer des nœuds et des relations dans votre base de données Neo4j, tapez la commande :exit pour quitter cypher-shell.

Conclusion

Vous avez maintenant installé, configuré et ajouté des données à Neo4j sur votre serveur. Vous avez également éventuellement configuré Neo4j pour accepter les connexions de systèmes distants et l'avez sécurisé à l'aide d'UFW.

Si vous souhaitez en savoir plus sur l'utilisation de Neo4j et du langage de requête cypher, consultez la Documentation Neo4j.