Database
 sql >> Datenbank >  >> RDS >> Database

So installieren Sie Neo4j unter Ubuntu 20.04

Einführung

In diesem Tutorial werden wir untersuchen, was Neo4j ist, wofür es verwendet wird und wie es implementiert wird. Wir werden die Installation auch auf einem Ubuntu 20.04-Server installieren und konfigurieren. Neo4j ist eine grafische Datenbank zum Erstellen von Datenbeziehungen. Weitere Beispiele für grafische Datenbanken sind:

  • ArangoDB
  • Grakn-Kern
  • Microsoft SQL Server 2017
  • OrientDB
  • RedisGraph

Was ist Neo4j

Neo4j verbindet Daten, während sie gespeichert werden, und ermöglicht es uns, Abfragen auszuführen, die wir vorher nie kannten oder über die wir nie nachgedacht hatten. Einfach ausgedrückt zeichnet Neo4j die Beziehung zwischen Datenknoten auf, während herkömmliche relationale Datenbanken Spalten und Zeilen verwenden, um strukturierte Daten zu speichern. Da jeder Knoten Verweise auf alle anderen Knoten speichert, mit denen er verbunden ist, kann Neo4j komplexe Beziehungen mit minimalem Overhead kodieren und abfragen.

Neo Technology ist der Schöpfer und Entwickler der Open-Source-Software Neo4j. Das Unternehmen entwickelt es seit 2003. Es ist in Java und Scala geschrieben, und der Quellcode ist auf GitHub frei verfügbar. Ab 2015 gilt es als das am häufigsten verwendete grafische Datenbankverwaltungssystem, das heute verwendet wird. Neo4j verwendet seine eigene Abfragesprache namens Cypher, aber Abfragen können auch in anderen Stilen geschrieben werden, beispielsweise über die Java-API.

Voraussetzungen

Für diese Installation erfordert die Software die folgenden Basiseinstellungen.

  • 8 GB RAM und ein Server mit vier Kernen. Die empfohlene Verwendung beträgt mindestens 1 GB RAM und einen Single-Core-Server.
  • Ubuntu 20.04-Betriebssystem
  • Alle Befehle werden als root ausgeführt. Wenn Sie ein normaler Benutzer sind, muss den Befehlen der Befehl sudo vorangestellt werden.

Neo4j-Installation

Repository hinzufügen

Ubuntu enthält Neo4j offiziell nicht im Standard-Paket-Repository. Wir fügen die Paketquelle hinzu, die auf den Speicherort des Neo4j-Repositorys verweist, fügen dann den GPG-Schlüssel von Neo4j zur Überprüfung hinzu und installieren dann Neo4j selbst.

Wir beginnen mit der Aktualisierung der Paketliste und der Pakete selbst.

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

Zusätzliche Software hinzufügen

In diesem Schritt installieren wir ein zusätzliches Paket, das für HTTPS-Verbindungen benötigt wird. Diese Anwendung ist möglicherweise bereits standardmäßig auf dem System installiert, sie muss jedoch noch aktualisiert werden.

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

Die apt-transport-https Paket ermöglicht die Verwendung von https über den Paketmanager mit dem libapt-pkg Bücherei. Dadurch bleibt die Installation sicher.

Sicherheitsschlüssel überprüfen

Jetzt fügen wir den offiziellen Sicherheitsschlüssel für das Neo4j-Paket-Repository hinzu. Diese Schlüsselüberprüfung und bestätigt, dass das, was Sie installieren, aus dem offiziellen Repository stammt.

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

Repository hinzufügen

Fügen Sie das offizielle Neo4j-Repository zur Paketmanagerliste hinzu.

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

Installieren Sie Neo4j

Bei der Installation von Neo4j und all seinen Abhängigkeiten ist unbedingt zu beachten, dass die Installation uns auffordert, Java-Pakete zu installieren, um mit Neo4j zu arbeiten. Drücken Sie während der Installation Y., um diese Softwareinstallation zu akzeptieren. Wenn Sie Java installiert haben, versteht das Installationsprogramm diesen Schritt und überspringt ihn.

 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:~#  

Starten Sie den Neo4j-Dienst

Sobald wir es installiert haben, müssen wir es als neo4j.service-Dienst aktivieren.

 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:~#  

Überprüfen Sie den Neo4j-Status

Als nächstes überprüfen wir, ob alles wie erwartet funktioniert.

 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 

DB-Verbindung testen

Da wir Neo4j installiert und als Dienst gestartet haben, werden wir nun die Datenbankverbindung testen und den Admin-Benutzer konfigurieren.

Hinweis:Wir verwenden die kostenlose Community Edition Neo4j-Version. Es unterstützt die gleichzeitige Arbeit mit derselben Datenbank, beinhaltet jedoch nicht die Zuweisung von Rollen und Berechtigungen an Benutzer.

Arbeiten mit Neo4j

Um mit der Datenbank zu interagieren, starten wir das interne Dienstprogramm namens Cypher-Shell, um mit Neo4j zu arbeiten. Wenn wir es zum ersten Mal ausführen, werden wir aufgefordert, einen Benutzer und ein Passwort einzugeben. Standardmäßig ist der Benutzername neo4j und das Passwort neo4j. Nach der ersten Anmeldung werden Sie aufgefordert, das Passwort in eines Ihrer Wahl zu ändern.

 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>  

Verwenden Sie zum Beenden den Exit-Befehl.

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

Knoten hinzufügen 

Lassen Sie uns einige Beispielknoten einrichten und Beziehungen zwischen ihnen definieren. Verbinden Sie sich mit 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>  

Als Nächstes fügen wir einen Knoten namens Liquidweb und die Namen von Kollegen hinzu, die für dieses Unternehmen unter dem Namen Margaret arbeiten. Wir können dies mit dem CREATE-Befehl tun, und die Syntax wird wie folgt sein.

 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>  

Benutzer hinzufügen

Lassen Sie uns ein paar weitere Kollegen hinzufügen und sie mit dem Unternehmen, für das sie arbeiten, Liquidweb, verknüpfen. Wir verbinden uns mit dem FRIEND-Befehl.

 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>  

Beziehungen erstellen

Da Peter und Chris in derselben Abteilung arbeiten und dieselben Eigenschaften als Knoten haben, erstellen wir eine Beziehung mit der Namensspalte.

 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> 
  • VERGLEICH - Dies zeigt die Entsprechung der Knoten an. In diesem Fall innerhalb eines Unternehmens Liquidweb
  • WHERE - zwischen Werten
  • CREATE - erstellen und hinzufügen
  • RÜCKKEHR - Zurück zur Basis.

Erstellen Sie nun eine Verbindung zwischen John und Chris, obwohl sie in verschiedenen Abteilungen sind, aber am selben Projekt arbeiten.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>  

Informationen anzeigen

Jetzt werden wir all diese Daten und ihre Beziehungen mit der folgenden Abfrage anzeigen.

 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>  

Wir haben die Ausgabedaten mit den folgenden FRIEND-Beziehungen erhalten, die die Beziehung und die folgenden Datenbeziehungen zwischen ABTEILUNG und PROJEKT zeigen.

Um die Cypher-Shell zu verlassen, führen Sie den Exit-Befehl aus.

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

Richten Sie eine sichere Remote-Verbindung zu Neo4j ein

Wir werden nicht immer in der Lage sein, vom Server selbst eine Verbindung zur Datenbank herzustellen. Wenn wir die Anwendung für die Verwendung von Neo4j konfigurieren möchten, müssen wir sie so konfigurieren, dass sie eine sichere Verbindung zu anderen Servern herstellt. Außerdem sollten wir die Firewall konfigurieren, um einzuschränken, welche Server sich mit Neo4j verbinden können.

Standardmäßig stellt Neo4j eine Verbindung über localhost her (127.0.0.1 – localhost – zum Testen von Anwendungen gedacht, ohne mit anderen Servern zu arbeiten). Außerdem wird die Arbeit von Neo4j von localhost nicht für den öffentlichen Zugriff auf das Internet geöffnet. Nur Benutzer mit Zugriff auf das lokale Netzwerk können sich mit Neo4j verbinden.

Neo4j konfigurieren

Damit sich Neo4j mit anderen Servern verbinden kann, müssen wir die Einstellungen der Konfigurationsdatei /etc/neo4j/neo4j.conf ändern . Wir werden für diese Aufgabe den Nano-Editor verwenden. Denken Sie daran, wenn Sie nicht root sind, verwenden Sie den Befehl sudo.

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

Suchen Sie die Zeile im Abschnitt Netzwerkverbindung

#dbms.default_listen_address=0.0.0.0

Kommentieren Sie diese Zeile aus, indem Sie das Symbol # entfernen, und drücken Sie dann Strg + S und Strg + X, um zu speichern und den Editor zu verlassen.

Der Wert 0.0.0.0 bindet Neo4j an alle verfügbaren IPv4-Netzwerkschnittstellen. Sie können eine bestimmte IP-Adresse oder ein bestimmtes Netzwerk angeben, das Ihre Server als Datenpfad verwenden. Sie können es auch für die Verwendung von IPv6-Schnittstellen konfigurieren, aber diese Einstellung hat viele Nuancen. Wir empfehlen Ihnen, die Dokumentation auf der offiziellen Website zu lesen.

Firewall für Remoteverbindungen konfigurieren

Um die Neo4j-Software für Remoteverbindungen zu konfigurieren, müssen wir die Firewall konfigurieren. Wir beschränken den Zugriff, sodass nur vertrauenswürdige Systeme eine Verbindung herstellen können. In diesem Fall verwenden wir die standardmäßige Ubuntu-Firewall UFW.

Als nächstes müssen wir prüfen, ob die Firewall aktiviert ist. Wenn es nicht aktiv ist, müssen wir es aktivieren.

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

Neo4j erstellt bei der Installation der Software zwei Netzwerk-Sockets. Eine auf Port 7474 für die HTTP-Schnittstelle und eine für das primäre Protokoll auf Port 7687. Neo4j empfiehlt die Verwendung von Port 7687. Der Befehl zum Öffnen eines Ports ähnelt dem folgenden Befehl, der zum Zulassen einer IPv4-Adresse verwendet wird.

 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 

Geben Sie Ihren spezifischen Netzwerkbereich ein, um den Port zu öffnen. Für eine IPv6-Adresse sieht der Befehl so aus.

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

Die oben genannten IPs dienen als Beispiel. Ersetzen Sie Ihre Werte und fügen Sie eine Regel hinzu.

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

Firewall neu starten

Stellen Sie sicher, dass Sie Ihre Firewall neu starten.

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

Verbindung überprüfen

Lassen Sie uns jetzt überprüfen, ob es richtig funktioniert.

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

Und damit haben wir einen funktionierenden Neo4j-Server, der einsatzbereit und so konfiguriert ist, dass er den Zugriff auf Port 7687 zulässt.

Schlussfolgerung

Wir haben uns mit der grafischen Datenbank Neo4j getroffen, gelernt, wie sie funktioniert und warum sie benötigt wird. Richten Sie einen Paketmanager ein und installieren Sie dann Neo4j. Als nächstes haben wir die Funktionalität überprüft, sind darauf eingegangen und haben das Passwort geändert. Wir haben grundlegende Befehle zum Erstellen einer Tabelle, zum Herstellen von Beziehungen und zum Einrichten von Knoten ausprobiert. Am Ende konfigurierten wir die Verbindung zu den benötigten IPs und konfigurierten eine Firewall für die Sicherheit.