Database
 sql >> Base de données >  >> RDS >> Database

Comment installer Neo4j sur Ubuntu 20.04

Présentation

Dans ce didacticiel, nous examinerons ce qu'est Neo4j, à quoi il sert et comment il est implémenté. Nous allons également installer et configurer l'installation sur un serveur Ubuntu 20.04. Neo4j est une base de données graphique utilisée pour créer des relations de données. Voici d'autres exemples de bases de données graphiques :

  • ArangoDB
  • Grakn Core
  • Microsoft SQL Server 2017
  • OrientDB
  • RedisGraph

Qu'est-ce que Neo4j

Neo4j connecte les données au fur et à mesure qu'elles sont stockées, nous permettant d'exécuter des requêtes que nous n'avions jamais connues ou auxquelles nous n'avions jamais pensé auparavant. Pour faire simple, Neo4j enregistre la relation entre les nœuds de données, alors que les bases de données relationnelles conventionnelles utilisent des colonnes et des lignes pour stocker des données structuré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.

Neo Technology est le créateur et développeur du logiciel open-source Neo4j. L'entreprise le développe depuis 2003. Il est écrit en Java et Scala, et le code source est librement disponible sur GitHub. Depuis 2015, il est considéré comme le système de gestion de base de données graphique le plus utilisé actuellement. Neo4j utilise son propre langage de requête appelé Cypher, mais les requêtes peuvent également être écrites dans d'autres styles, par exemple via l'API Java.

Prérequis

Pour cette installation, le logiciel nécessite les paramètres de base suivants.

  • 8 Go de RAM et un serveur à quatre cœurs. Au minimum, l'utilisation recommandée est de 1 Go de RAM et d'un serveur monocœur.
  • Système d'exploitation Ubuntu 20.04
  • Toutes les commandes sont exécutées en tant que root. Si vous êtes un utilisateur régulier, les commandes doivent être précédées de la commande sudo.

Installation de Neo4j

Ajouter un référentiel

Ubuntu ne contient pas officiellement Neo4j dans le référentiel de packages standard. Nous allons ajouter la source du paquet pointant vers l'emplacement du référentiel Neo4j, puis ajouter la clé GPG de Neo4j pour vérification, puis installer Neo4j lui-même.

Nous commençons par mettre à jour la liste des packages et les packages eux-mêmes.

root@host:~# apt update && apt -y upgrade

Ajouter un logiciel supplémentaire

Dans cette étape, nous allons installer un package supplémentaire nécessaire pour les connexions HTTPS. Cette application peut être déjà installée par défaut sur le système, mais elle doit encore être mise à jour.

root@host:~# apt install apt-transport-https ca-certificates curl software-properties-common -y

Le apt-transport-https package permet l'utilisation de https via le gestionnaire de packages à l'aide de libapt-pkg bibliothèque. Cela permet de sécuriser l'installation.

Vérifier la clé de sécurité

Nous ajoutons maintenant la clé de sécurité officielle pour le référentiel de packages Neo4j. Cette clé vérifie et vérifie que ce que vous installez provient du référentiel officiel.

 root@host:~# curl -fsSL https://debian.neo4j.com/neotechnology.gpg.key | apt-key add -
 OK
 root@host:~#  

Ajouter un référentiel

Ajoutez le référentiel officiel Neo4j à la liste des gestionnaires de packages.

root@host:~# add-apt-repository "deb https://debian.neo4j.com stable 4.1"

Installer Neo4j

Lors de l'installation de Neo4j et de toutes ses dépendances, il est essentiel de noter que l'installation nous invitera à installer des packages Java pour fonctionner avec Neo4j. Pendant l'installation, appuyez sur Y. pour accepter l'installation de ce logiciel. Si Java est installé, le programme d'installation comprendra et ignorera cette étape.

 root@host:~# apt install neo4j -y
 Reading package lists... Done
 Building dependency tree       
 Reading state information... Done
 The following package was automatically installed and is no longer required:
   libfprint-2-tod1
 Use 'sudo apt autoremove' to remove it.
 The following additional packages will be installed:
   cypher-shell
 The following NEW packages will be installed:
   cypher-shell neo4j
 0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
 Need to get 116 MB of archives.
 After this operation, 131 MB of additional disk space will be used.
 Get:1 https://debian.neo4j.com stable/4.1 amd64 cypher-shell all 4.1.3 [27,1 MB]
 Get:2 https://debian.neo4j.com stable/4.1 amd64 neo4j all 1:4.1.5 [88,4 MB]
 Fetched 116 MB in 10s (11,1 MB/s)                                              
 Preconfiguring packages ...
 Selecting previously unselected package cypher-shell.
 (Reading database ... 163626 files and directories currently installed.)
 Preparing to unpack .../cypher-shell_4.1.3_all.deb ...
 Unpacking cypher-shell (4.1.3) ...
 Selecting previously unselected package neo4j.
 Preparing to unpack .../neo4j_1%3a4.1.5_all.deb ...
 Unpacking neo4j (1:4.1.5) ...
 Setting up cypher-shell (4.1.3) ...
 Setting up neo4j (1:4.1.5) ...
 Processing triggers for man-db (2.9.1-1) ...
 Processing triggers for systemd (245.4-4ubuntu3.3) ...
 root@host:~#  

Démarrer le service Neo4j

Une fois installé, nous devons l'activer en tant que service neo4j.service.

 root@host:~# systemctl enable neo4j.service
 Synchronizing state of neo4j.service with SysV service script with /lib/systemd/systemd-sysv-install.
 Executing: /lib/systemd/systemd-sysv-install enable neo4j
 Created symlink /etc/systemd/system/multi-user.target.wants/neo4j.service → /lib/systemd/system/neo4j.service.
 root@host:~#  

Vérifier l'état de Neo4j

Ensuite, nous vérifions que tout fonctionne comme prévu.

 root@host:~# systemctl status neo4j.service
  neo4j.service - Neo4j Graph Database
      Loaded: loaded (/lib/systemd/system/neo4j.service; enabled; vendor preset:>
      Active: active (running) since Wed 2020-12-23 20:04:44 +03; 2min 4s ago
    Main PID: 4827 (java)
       Tasks: 52 (limit: 9489)
      Memory: 447.9M
      CGroup: /system.slice/neo4j.service
              └─4827 /usr/bin/java -cp /var/lib/neo4j/plugins:/etc/neo4j:/usr/sh>
 сне 23 20:04:46 host neo4j[4827]: 2020-12-23 17:04:46.101+0000 INFO  ======== N>
 сне 23 20:04:47 host neo4j[4827]: 2020-12-23 17:04:47.073+0000 INFO  Initializi>
 сне 23 20:04:47 host neo4j[4827]: 2020-12-23 17:04:47.077+0000 INFO  Setting up>
 сне 23 20:04:47 host neo4j[4827]: 2020-12-23 17:04:47.077+0000 INFO  Creating n>
 сне 23 20:04:47 host neo4j[4827]: 2020-12-23 17:04:47.083+0000 INFO  Setting ve>
 сне 23 20:04:47 host neo4j[4827]: 2020-12-23 17:04:47.085+0000 INFO  After init>
 сне 23 20:04:47 host neo4j[4827]: 2020-12-23 17:04:47.088+0000 INFO  Performing>
 сне 23 20:04:47 host neo4j[4827]: 2020-12-23 17:04:47.197+0000 INFO  Bolt enabl>
 сне 23 20:04:47 host neo4j[4827]: 2020-12-23 17:04:47.843+0000 INFO  Remote int>
 сне 23 20:04:47 host neo4j[4827]: 2020-12-23 17:04:47.844+0000 INFO  Started.
 lines 1-19/19 (END)
 To exit this screen, press Ctrl + C.
 It is important to have the following parameters:
 Loaded: loaded (/lib/systemd/system/neo4j.service; enabled; vendor preset:>
  Active: active (running) since Wed 2020-12-23 20:04:44 +03; 2min 4s ago 

Tester la connexion à la base de données

Puisque nous avons installé Neo4j et l'avons démarré en tant que service, nous allons maintenant tester la connexion à la base de données et configurer l'utilisateur admin.

Remarque :nous utilisons la version gratuite Community Edition Neo4j. Il prend en charge le travail simultané avec la même base de données, mais n'inclut pas l'attribution de rôles et d'autorisations aux utilisateurs.

Travailler avec Neo4j

Pour interagir avec la base de données, nous allons lancer l'utilitaire interne appelé cypher-shell pour travailler avec Neo4j. Lorsque nous l'exécuterons pour la première fois, il nous sera demandé d'entrer un utilisateur et un mot de passe. Par défaut, le nom d'utilisateur est neo4j et le mot de passe est neo4j. Après la première connexion, vous serez invité à changer le mot de passe pour celui de votre choix.

 oot@host:~# cypher-shell
 username: 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.
 neo4j@neo4j>  

Pour quitter, utilisez la commande exit.

 neo4j@neo4j> exit
 Bye!
 root@host:~#  

Ajouter des nœuds 

Configurons quelques exemples de nœuds et définissons les relations entre eux. Connectez-vous en utilisant Cypher

 root@host:~# cypher-shell
 username: neo4j
 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.
 neo4j@neo4j>  

Ensuite, ajoutons un nœud appelé Liquidweb et les noms des collègues qui travaillent pour cette entreprise sous le nom de Margaret. Nous pouvons le faire en utilisant la commande CREATE, et la syntaxe sera la suivante.

 neo4j@neo4j> CREATE (:Liquidweb {name: 'Margaret'});
 0 rows available after 36 ms, consumed after another 0 ms
 Added 1 nodes, Set 1 properties, Added 1 labels
 neo4j@neo4j>  

Ajouter des utilisateurs

Ajoutons quelques collègues supplémentaires et lions-les à l'entreprise pour laquelle ils travaillent, Liquidweb. Nous allons nous connecter en utilisant la commande FRIEND.

 neo4j@neo4j> CREATE (:Liquidweb {name: 'John'})-[:FRIEND]->
              (:Liquidweb {name: 'Peter'})-[:FRIEND]->
              (:Liquidweb {name: 'Chris'});
 0 rows available after 38 ms, consumed after another 0 ms
 Added 3 nodes, Created 2 relationships, Set 3 properties, Added 3 labels
 neo4j@neo4j>  

Créer des relations

Étant donné que Peter et Chris travaillent dans le même service et ont les mêmes propriétés que les nœuds, nous allons créer une relation avec la colonne name.

 neo4j@neo4j> MATCH (a:Liquidweb),(b:Liquidweb)
              WHERE a.name = 'Peter' AND b.name = 'Chris'
              CREATE (a)-[r:DEPARTMENT { name: 'Developers' }]->(b)
              RETURN type(r), r.name;
 +------------------------+
 | type(r) | r.name       |
 +------------------------+
 | "DEPARTMENT" | "Developers" |
 +------------------------+
 1 row available after 105 ms, consumed after another 10 ms
 Created 1 relationships, Set 1 properties
 neo4j@neo4j> 
  • MATCH - Ceci indique la correspondance des nœuds. Dans ce cas, au sein d'une même entreprise Liquidweb
  • OÙ - entre les valeurs
  • CRÉER - créer et ajouter
  • RETOUR - Retour à la base.

Créez maintenant une connexion entre John et Chris, bien qu'ils soient dans des départements différents, mais ils travaillent sur le même projet.neo4j@neo4j> MATCH (a:Liquidweb),(b:Liquidweb)

              WHERE a.name = 'John' AND b.name = 'Chris'
              CREATE (a)-[r:PROJECT { name: 'Cool Project' }]->(b)
              RETURN type(r), r.name;
 +----------------------------+
 | type(r)   | r.name         |
 +----------------------------+
 | "PROJECT" | "Cool Project" |
 +----------------------------+
 1 row available after 48 ms, consumed after another 5 ms
 Created 1 relationships, Set 1 properties
 neo4j@neo4j>  

Afficher les informations

Nous allons maintenant afficher toutes ces données et leurs relations à l'aide de la requête suivante.

 neo4j@neo4j> Match (n)-[r]->(m)
              Return n,r,m;
 +--------------------------------------------------------------------------------------------------+
 | n                            | r                                  | m                            |
 +--------------------------------------------------------------------------------------------------+
 | (:Liquidweb {name: "John"})  | [:FRIEND]                          | (:Liquidweb {name: "Peter"}) |
 | (:Liquidweb {name: "John"})  | [:PROJECT {name: "Cool Project"}]  | (:Liquidweb {name: "Chris"})  |
 | (:Liquidweb {name: "Peter"}) | [:DEPARTMENT {name: "Developers"}] | (:Liquidweb {name: "Chris"})  |
 | (:Liquidweb {name: "Peter"}) | [:FRIEND]                          | (:Liquidweb {name: "Chris"})  |
 +--------------------------------------------------------------------------------------------------+
 4 rows available after 17 ms, consumed after another 2 ms
 neo4j@neo4j>  

Nous avons reçu les données de sortie avec les relations FRIEND suivantes, qui montrent la relation et les relations de données suivantes entre DEPARTMENT et PROJECT.

Pour quitter le shell de chiffrement, exécutez la commande exit.

 neo4j@neo4j> :exit
 Bye!
 root@host:~#  

Configurer une connexion distante sécurisée à Neo4j

Nous ne pourrons pas toujours nous connecter à la base de données depuis le serveur lui-même. Si nous voulons configurer l'application pour utiliser Neo4j, nous devrons la configurer pour se connecter en toute sécurité à d'autres serveurs. De plus, nous devons configurer le pare-feu afin de limiter les serveurs pouvant se connecter à Neo4j.

Par défaut, Neo4j se connecte via localhost (127.0.0.1 - localhost - destiné à tester des applications sans travailler avec d'autres serveurs). De plus, le travail de Neo4j de localhost ne sera pas ouvert à l'accès public à Internet. Seuls les utilisateurs ayant accès au réseau local pourront se connecter à Neo4j.

Configurer Neo4j

Pour que Neo4j se connecte à d'autres serveurs, nous devons modifier les paramètres du fichier de configuration /etc/neo4j/neo4j.conf . Nous utiliserons l'éditeur nano pour cette tâche. N'oubliez pas que si vous n'êtes pas root, utilisez la commande sudo.

 root@host:~# nano /etc/neo4j/neo4j.conf
 root@host:~#  

Trouvez la ligne dans la section Connecteur réseau

#dbms.default_listen_address=0.0.0.0

Décommentez cette ligne en supprimant le symbole #, puis appuyez sur Ctrl + S et Ctrl + X pour enregistrer et quitter l'éditeur.

La valeur 0.0.0.0 liera Neo4j à toutes les interfaces réseau IPv4 disponibles. Vous pouvez mettre une adresse IP ou un réseau spécifique que vos serveurs utilisent comme chemin de données. Vous pouvez également le configurer pour utiliser les interfaces IPv6, mais il existe de nombreuses nuances à ce paramètre. Nous vous recommandons de lire la documentation sur le site officiel.

Configurer le pare-feu pour les connexions à distance

Pour configurer le logiciel Neo4j pour les connexions à distance, nous devons configurer le pare-feu. Nous restreignons l'accès afin que seuls les systèmes de confiance puissent s'y connecter. Dans ce cas, nous utiliserons le pare-feu Ubuntu par défaut, UFW.

Ensuite, nous devons vérifier si le pare-feu est activé. S'il n'est pas actif, nous devons l'activer.

 root@host:~# ufw enable
 Firewall is active and enabled on system startup
 root@host:~#  

Neo4j crée deux sockets réseau lors de l'installation du logiciel. Une sur le port 7474 pour l'interface HTTP et celle pour le protocole principal sur le port 7687. Neo4j recommande d'utiliser le port 7687. La commande pour ouvrir un port sera similaire à la commande suivante utilisée pour autoriser une adresse IPv4.

 ufw allow from YOUR_IP to any port 7687 proto tcp
 YOUR_IP - Use an IP here to provide access permission. If you want to allow access to the entire local network, use the following rule:
 ufw allow from 192.168.50.0/16 to any port 7687 proto tcp 

Entrez votre plage de réseau spécifique pour ouvrir le port. Pour une adresse IPv6, la commande ressemblera à ceci.

ufw allow from fe80::1006:f7a3:b9cc:b0cb to any port 7687 proto tcp

Les adresses IP ci-dessus sont utilisées à titre d'exemple. Remplacez vos valeurs et ajoutez une règle.

 root@host:~# ufw allow from 192.168.50.189 to any port 7687 proto tcp
 Rule added
 root@host:~#  

Redémarrer le pare-feu

Assurez-vous de redémarrer votre pare-feu.

 root@host:~# ufw reload
 Firewall reloaded
 root@host:~#  

Vérifier la connexion

Vérifions maintenant s'il fonctionne correctement.

 root@host:~# ufw status
 Status: active
 To                         Action      From
 --                         ------      ----
 7687/tcp                   ALLOW       192.168.50.189            
 root@host:~#  

Et avec cela, nous avons un serveur Neo4j fonctionnel, prêt à l'emploi et configuré pour autoriser l'accès sur le port 7687.

Conclusion

Nous avons rencontré la base de données graphique Neo4j, appris comment elle fonctionne et pourquoi elle est nécessaire. Configurez un gestionnaire de paquets, puis installez Neo4j. Ensuite, nous avons vérifié la fonctionnalité, y sommes entrés et avons changé le mot de passe. Nous avons essayé des commandes de base sur la façon de créer une table, d'établir des relations et de configurer des nœuds. Au final, nous avons configuré la connexion aux adresses IP dont nous avions besoin et configuré un pare-feu pour la sécurité.