sql >> Databasteknik >  >> RDS >> Database

Hur man installerar Neo4j på Ubuntu 20.04

Introduktion

I den här handledningen kommer vi att undersöka vad Neo4j är, vad den används till och hur den implementeras. Vi kommer även att installera och konfigurera installationen på en Ubuntu 20.04-server. Neo4j är en grafisk databas som används för att skapa datarelationer. Andra exempel på grafiska databaser inkluderar:

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

Vad är Neo4j

Neo4j kopplar ihop data när den lagras, vilket gör att vi kan köra frågor som vi aldrig visste eller tänkt på tidigare. Enkelt uttryckt registrerar Neo4j förhållandet mellan datanoder, medan konventionella relationsdatabaser använder kolumner och rader för att lagra strukturerad data. Eftersom varje nod lagrar referenser till alla andra noder som den är ansluten till, kan Neo4j koda och fråga komplexa relationer med minimal overhead.

Neo Technology är skaparen och utvecklaren av programvaran med öppen källkod Neo4j. Företaget har utvecklat det sedan 2003. Det är skrivet i Java och Scala, och källkoden är fritt tillgänglig på GitHub. Från och med 2015 anses det vara det mest använda grafiska databashanteringssystemet som används idag. Neo4j använder sitt eget frågespråk som heter Cypher, men frågor kan också skrivas i andra stilar, till exempel genom Java API.

Förutsättningar

För denna installation kräver programvaran följande grundinställningar.

  • 8 GB RAM och en fyrkärnig server. Den rekommenderade användningen är minst 1 GB RAM och en enkelkärnig server.
  • Ubuntu 20.04 OS
  • Alla kommandon körs som root. Om du är en vanlig användare måste kommandon föregås av kommandot sudo.

Neo4j-installation

Lägg till arkiv

Ubuntu innehåller inte officiellt Neo4j i standardpaketförrådet. Vi lägger till paketkällan som pekar på platsen för Neo4j-förvaret, lägger sedan till GPG-nyckeln från Neo4j för verifiering och installerar sedan Neo4j själv.

Vi börjar med att uppdatera listan över paket och själva paketen.

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

Lägg till ytterligare programvara

I det här steget kommer vi att installera ett extra paket som behövs för HTTPS-anslutningar. Denna applikation kan redan vara installerad som standard på systemet, men den behöver fortfarande uppdateras.

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

apt-transport-https paketet möjliggör användning av https via pakethanteraren med libapt-pkg bibliotek. Detta håller installationen säker.

Verifiera säkerhetsnyckel

Nu lägger vi till den officiella säkerhetsnyckeln för Neo4j-paketförrådet. Den här nyckeln kontrollerar och verifierar att det du installerar kommer från det officiella arkivet.

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

Lägg till arkiv

Lägg till det officiella Neo4j-förrådet till pakethanterarens lista.

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

Installera Neo4j

När du installerar Neo4j och alla dess beroenden är det viktigt att notera att installationen kommer att uppmana oss att installera Java-paket för att fungera med Neo4j. Under installationen, tryck på Y. för att acceptera denna programvaruinstallation. Om du har Java installerat kommer installationsprogrammet att förstå och hoppa över detta steg.

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

Starta Neo4j-tjänsten

När vi har installerat det måste vi aktivera det som en neo4j.service-tjänst.

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

Kontrollera Neo4j-status

Därefter verifierar vi att allt fungerar som förväntat.

 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 

Testa DB-anslutning

Eftersom vi installerade Neo4j och startade den som en tjänst kommer vi nu att testa databasanslutningen och konfigurera adminanvändaren.

Obs:Vi använder den kostnadsfria Community Edition Neo4j-versionen. Den stöder samtidigt arbete med samma databas, men inkluderar inte tilldelning av roller och behörigheter till användare.

Arbeta med Neo4j

För att interagera med databasen kommer vi att starta det interna verktyget som heter cypher-shell för att arbeta med Neo4j. När vi först kör det kommer vi att bli ombedda att ange en användare och lösenord. Som standard är användarnamnet neo4j, och lösenordet är neo4j. Efter den första inloggningen kommer du att uppmanas att ändra lösenordet till ett av dina val.

 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>  

För att avsluta, använd kommandot exit.

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

Lägg till noder 

Låt oss sätta upp några exempelnoder och definiera relationer mellan dem. Anslut med 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>  

Låt oss sedan lägga till en nod som heter Liquidweb och namnen på kollegor som arbetar för detta företag under namnet Margaret. Vi kan göra detta med kommandot CREATE, och syntaxen blir som följer.

 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>  

Lägg till användare

Låt oss lägga till några fler kollegor och länka dem till företaget de jobbar för, Liquidweb. Vi kommer att ansluta med kommandot 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>  

Skapa relationer

Eftersom Peter och Chris arbetar på samma avdelning och har samma egenskaper som noder kommer vi att skapa en relation med namnkolumnen.

 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 - Detta indikerar korrespondensen mellan noderna. I det här fallet inom ett företag Liquidweb
  • WHERE - mellan värden
  • SKAPA - skapa och lägg till
  • RETURN - Återgå till basen.

Skapa nu en koppling mellan John och Chris, även om de är på olika avdelningar, men de arbetar med samma projekt.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>  

Visa info

Nu kommer vi att visa all denna data och deras relationer med hjälp av följande fråga.

 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>  

Vi fick utdata med följande FRIEND-relationer, som visar relationen och följande datarelationer mellan DEPARTMENT och PROJECT.

För att avsluta cypher-skalet, kör kommandot exit.

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

Konfigurera en säker fjärranslutning till Neo4j

Vi kommer inte alltid att kunna ansluta till databasen från själva servern. Om vi ​​vill konfigurera applikationen att använda Neo4j måste vi konfigurera den för att säkert ansluta till andra servrar. Dessutom bör vi konfigurera brandväggen för att begränsa vilka servrar som kan ansluta till Neo4j.

Som standard ansluter Neo4j via localhost (127.0.0.1 - localhost - avsedd för att testa applikationer utan att arbeta med andra servrar). Dessutom kommer arbetet med Neo4j från localhost inte att vara öppet för allmänheten till Internet. Endast användare med åtkomst till det lokala nätverket kommer att kunna ansluta till Neo4j.

Konfigurera Neo4j

För att Neo4j ska kunna ansluta till andra servrar måste vi ändra inställningarna för konfigurationsfilen /etc/neo4j/neo4j.conf . Vi kommer att använda nanoredigeraren för denna uppgift. Kom ihåg att om du inte är root, använd kommandot sudo.

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

Hitta raden i avsnittet Nätverksanslutning

#dbms.default_listen_address=0.0.0.0

Avkommentera den här raden genom att ta bort #-symbolen och tryck sedan på Ctrl + S och Ctrl + X för att spara och avsluta redigeraren.

Värdet 0.0.0.0 kommer att binda Neo4j till alla tillgängliga IPv4-nätverksgränssnitt. Du kan ange en specifik IP-adress eller nätverk som dina servrar använder som en datasökväg. Du kan också konfigurera den för att använda IPv6-gränssnitt, men det finns många nyanser i den inställningen. Vi rekommenderar att du läser dokumentationen på den officiella webbplatsen.

Konfigurera brandvägg för fjärranslutningar

För att konfigurera Neo4j-programvaran för fjärranslutningar måste vi konfigurera brandväggen. Vi begränsar åtkomsten så att endast betrodda system kan ansluta till den. I det här fallet kommer vi att använda Ubuntus standardbrandvägg, UFW.

Därefter måste vi kontrollera om brandväggen är aktiverad. Om det inte är aktivt måste vi aktivera det.

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

Neo4j skapar två nätverksuttag när programvaran installeras. En på port 7474 för HTTP-gränssnittet och en för det primära protokollet på port 7687. Neo4j rekommenderar att du använder port 7687. Kommandot för att öppna en port kommer att likna följande kommando som används för att tillåta en IPv4-adress.

 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 

Ange ditt specifika nätverksområde för att öppna porten. För en IPv6-adress kommer kommandot att se ut så här.

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

Ovanstående IP-adresser används som exempel. Byt ut dina värden och lägg till en regel.

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

Starta om brandväggen

Se till att starta om din brandvägg.

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

Verifiera anslutningen

Låt oss nu kontrollera om det fungerar korrekt.

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

Och med det har vi en fungerande Neo4j-server som är redo att gå och konfigurerad för att tillåta åtkomst på port 7687.

Slutsats

Vi träffade den grafiska databasen Neo4j, lärde oss hur den fungerar och varför den behövs. Sätt upp en pakethanterare och installerade sedan Neo4j. Därefter kontrollerade vi funktionaliteten, gick in i den och ändrade lösenordet. Vi provade grundläggande kommandon om hur man skapar en tabell, skapar relationer och ställer in noder. Till slut konfigurerade vi anslutningen till de IP-adresser vi behövde och konfigurerade en brandvägg för säkerhet.


  1. Hur pg_sleep_until() fungerar i PostgreSQL

  2. Välj kolumner över olika databaser

  3. Pratar om SQL Server-prestanda flaskhalsar

  4. Android Room Database, hämta det specifika värdet för den senaste posten