Si të instaloni dhe konfiguroni bazën e të dhënave të grafikut Neo4j në Ubuntu 22.04


Neo4j është një bazë të dhënash grafike që përdoret për të krijuar marrëdhënie të dhënash. Të dhënat brenda bazave të të dhënave tradicionale ruhen në një strukturë të ngjashme me tabelën. Një bazë të dhënash grafike regjistron marrëdhëniet ndërmjet nyjeve të të dhënave. Çdo nyje ruan referenca për të gjitha nyjet e tjera me të cilat është e lidhur. Bazat e të dhënave tradicionale nuk ruajnë drejtpërdrejt të dhënat e marrëdhënieve, por ato mund të kuptojnë lidhjet duke kërkuar rreth strukturave të të dhënave me ndihmën e indeksimit që është i shtrenjtë dhe kërkon kohë. Një bazë të dhënash grafike si Neo4j shmang të gjitha këto shpenzime dhe mund të kodojë dhe të kërkojë marrëdhënie komplekse.

Neo4j është zhvilluar nga Neo Technology. Është shkruar në Java dhe Scala dhe është i disponueshëm në të dyja, një version falas për komunitetin dhe një version të ndërmarrjes. Neo4j përdor gjuhën e vet të pyetjeve të quajtur Cypher, por pyetjet mund të shkruhen në stile të tjera.

Ky tutorial do t'ju mësojë se si të instaloni dhe konfiguroni Neo4j në një server Ubuntu 22.04.

Parakushtet

  • A server running Ubuntu 22.04 with a minimum of 1 CPU core and 2 GB of memory. You will need to upgrade the server as per requirements.

  • A non-root user with sudo privileges.

  • Make sure everything is updated.

  • $ sudo apt update
    
  • Install basic utility packages. Some of them may already be installed.

    $ sudo apt install wget curl nano software-properties-common dirmngr apt-transport-https gnupg gnupg2 ca-certificates lsb-release ubuntu-keyring unzip -y
    

Hapi 1 - Instaloni Neo4j

Hapi i parë për të instaluar Neo4j është shtimi i çelësit GPG.

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

Shtoni depon e Neo4j në drejtorinë e burimeve të sistemit tuaj APT.

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

Për të shmangur rrezikun e përmirësimit në versionin tjetër kryesor, mund të specifikoni versionet kryesore dhe të vogla të kërkuara në vend të më të fundit në komandën e mësipërme.

Komanda e mëposhtme do të shtojë depo Neo4j 5.x, që do të thotë se nuk do të përfundoni duke u përmirësuar në versionin 6.x sa herë që ai publikohet.

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

Përditësoni listën e depove të sistemit.

$ sudo apt update

Listoni versionet e Neo4j të disponueshme për instalim.

$ apt list -a neo4j
Listing... Done
neo4j/stable 1:5.3.0 all
neo4j/stable 1:5.2.0 all
neo4j/stable 1:5.1.0 all

Instaloni botimin e Komunitetit Neo4j.

$ sudo apt install neo4j

Ju mund të instaloni një version specifik duke përdorur komandën e mëposhtme.

$ sudo apt install neo4j=1:5.3.0

Vini re se versioni përfshin një komponent të versionit të epokës (1:), në përputhje me politikën e Debian për versionimin.

Neo4j do të instalojë automatikisht versionin e kërkuar JDK me të.

Aktivizo shërbimin Neo4j.

$ sudo systemctl enable neo4j

Nisni shërbimin Neo4j.

$ sudo systemctl start neo4j

Kontrolloni statusin e shërbimit Neo4j.

$ sudo systemctl status neo4j
? neo4j.service - Neo4j Graph Database
     Loaded: loaded (/lib/systemd/system/neo4j.service; enabled; vendor preset: enabled)
     Active: active (running) since Sat 2023-01-21 20:50:52 UTC; 33s ago
   Main PID: 5241 (java)
      Tasks: 72 (limit: 1030)
     Memory: 399.3M
        CPU: 20.350s
     CGroup: /system.slice/neo4j.service

Hapi 2 - Testoni lidhjen

Neo4j përdor Cypher Shell për të punuar me të dhëna.

Lidhu me Cypher Shell.

$ cypher-shell

Do t'ju kërkohet një emër përdoruesi dhe një fjalëkalim. Emri i përdoruesit dhe fjalëkalimi i parazgjedhur është neo4j. Do t'ju kërkohet të zgjidhni një fjalëkalim të ri.

username: neo4j
password:
Password change required
new password:
confirm password:
Connected to Neo4j using Bolt protocol version 5.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.
>

Kjo konfirmon lidhjen e suksesshme me Neo4j DBMS.

Shkruani :exit për të dalë nga guaska.

> :exit

Bye!

Hapi 3 - Konfiguro Neo4j për qasje në distancë

Për mjediset e prodhimit, mund t'ju duhet të konfirmoni Neo4j për të pranuar lidhje nga hostet në distancë. Si parazgjedhje, Neo4j pranon lidhje vetëm nga localhost.

Ne mund të konfigurojmë Neo4j që të pranojë lidhje nga hostet në distancë duke redaktuar skedarin e tij të konfigurimit. Neo4j ruan cilësimet e tij në skedarin /etc/neo4j/neo4j.conf. Hape atë për redaktim.

$ sudo nano /etc/neo4j/neo4j.conf

Gjeni rreshtin e komentuar #dbms.default_listen_address=0.0.0.0 dhe hiqni komentin duke hequr hash-in kryesor.

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

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

Ruani skedarin duke shtypur Ctrl + X dhe duke futur Y kur ju kërkohet.

Si parazgjedhje, vlera 0.0.0.0 do të lidhë Neo4j me të gjitha ndërfaqet IPv4 të disponueshme në sistemin tuaj, duke përfshirë localhost. Nëse dëshironi të kufizoni Neo4j në një adresë IP të caktuar, për shembull, një IP rrjeti privat, specifikoni adresën IP që i është caktuar ndërfaqes së rrjetit privat të serverit tuaj këtu.

Ju gjithashtu mund të konfiguroni Neo4j për të përdorur ndërfaqet IPv6. Ashtu si me IPv4, mund të vendosni vlerën default_listen_address në një adresë specifike IPv6 që do të përdorni për të komunikuar me Neo4j. Nëse dëshironi të kufizoni Neo4j që të përdorë vetëm adresën IPv6 lokale për serverin tuaj, specifikoni ::1, që korrespondon me localhost duke përdorur shënimin IPv6.

Nëse konfiguroni Neo4j me një adresë IPv6, nuk do të jeni në gjendje të lidheni me cypher-shell duke përdorur drejtpërdrejt adresën IPv6. Në vend të kësaj, ju duhet ose të konfiguroni një emër DNS që zgjidhet në adresën IPv6, ose të shtoni një hyrje në skedarin /etc/hosts të sistemit të largët që lidh adresën me një emër. Pastaj do të mund të përdorni emrin e skedarit DNS ose hosts për t'u lidhur me Neo4j duke përdorur IPv6 nga sistemi juaj në distancë.

Për shembull, një server Neo4j me një adresë IPv6 si 2001:db8::1 do të kërkonte që sistemi i lidhjes në distancë të ketë një /etc/hosts hyrje siç tregohet më poshtë.

2001:db8::1 your_hostname

Më pas mund të lidheni me serverin nga sistemi në distancë duke përdorur emrin që specifikuat siç tregohet më poshtë.

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

Nëse e kufizoni Neo4j që të përdorë adresën IPv6 localhost të ::1, atëherë mund të lidheni me të në nivel lokal në vetë serverin Neo4j duke përdorur emrin e parakonfiguruar ip6-localhost nga /etc/hosts skedari i paraqitur më poshtë.

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

Pasi të thirrni cypher-shell me lidhjen URI, do t'ju kërkohet të shkruani emrin e përdoruesit dhe fjalëkalimin tuaj si zakonisht.

Hapi 4 - Konfiguro aksesin në murin e zjarrit (UFW)

Pasi të keni aktivizuar lidhjet në distancë, mund të përdorni murin e zjarrit për të kufizuar Neo4j për të kufizuar lidhjet nga vetëm sistemet e besuara me të cilat mund të lidhet.

Neo4j krijon dy priza rrjeti, një në portën 7474 për ndërfaqen e integruar HTTP dhe protokollin kryesor të bulonave në portën 7687.

Ubuntu 22.04 përdor Firewall të pakomplikuar (UFW) si parazgjedhje.

Konfiguro murin e zjarrit për të lejuar një host të besuar në distancë në ndërfaqen bolt duke përdorur IPv4 duke përdorur komandën e mëposhtme.

$ sudo ufw allow from 203.0.113.1 to any port 7687 proto tcp

Zëvendësoni adresën IP të sistemit të besuar në distancë në vend të vlerës 203.0.113.1. Në mënyrë të ngjashme, ju mund të lejoni një gamë të tërë rrjeti duke përdorur komandën e mëposhtme.

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

Zëvendësoni rrjetin aktual në vend të vlerës 192.0.2.0/24.

Për të lejuar hyrjen në një host të largët duke përdorur IPv6, mund të përdorni komandën e mëposhtme.

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

Zëvendësoni adresën IPv6 të sistemeve tuaja të besuara në vend të vlerës 2001:DB8::1/128.

Ashtu si me IPv4, ju mund të lejoni një sërë adresash IPv6 duke përdorur komandën e mëposhtme.

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

Përsëri, zëvendësoni gamën tuaj të besuar të rrjetit në vend të gamës së rrjetit të theksuar 2001:DB8::/32.

Ringarko murin e zjarrit për të zbatuar ndryshimet.

$ sudo ufw reload

Kontrolloni statusin e murit të zjarrit.

$ sudo ufw status
Status: active

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

Hapi 5 - Përdorni Neo4j

Lidhu me Neo4j duke përdorur mjetin cypher-shell. Do t'ju kërkohet për emrin e përdoruesit dhe fjalëkalimin tuaj.

$ cypher-shell

Nëse keni konfiguruar Neo4j për qasje në distancë, atëherë përdorni komandën e mëposhtme për t'u lidhur me Neo4j nga sistemi në distancë.

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

Këtu 203.0.113.1 është adresa IP e serverit Neo4j.

Nëse jeni duke përdorur IPv6, sigurohuni që të keni një hyrje /etc/hosts me një emër të përshkruar në hapin 3. Më pas lidheni me serverin Neo4j si më poshtë.

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

Sigurohuni që your_hostname të lidhet me adresën IPv6 të serverëve tuaj Neo4j në skedarin /etc/hosts të sistemeve në distancë.

Le të shtojmë një nyje të quajtur Slite dhe emrat e autorëve në Neo4j. Komanda e mëposhtme do të krijojë një nyje të llojit Slite, me një emër Navjot Singh.

> CREATE (:Slite {name: 'Navjot Singh'});

Do të merrni daljen e mëposhtme.

0 rows
ready to start consuming query after 124 ms, results consumed after another 0 ms
Added 1 nodes, Set 1 properties, Added 1 labels

Më pas, ne do të shtojmë më shumë punonjës dhe do t'i lidhim ata duke përdorur një marrëdhënie të quajtur KOLLEAGUE. Ju mund të lidhni nyjet me marrëdhënie të emërtuara në mënyrë arbitrare.

Shtoni tre punonjës të tjerë dhe lidhini ata duke përdorur marrëdhënien COLLEAGUE.

> CREATE
             (:Slite {name: 'Sammy'})-[:COLLEAGUE]->
             (:Slite {name: 'Peter Jack'})-[:COLLEAGUE]->
             (:Slite {name: 'Chris Rock'});

Do të merrni një rezultat të ngjashëm.

0 rows
ready to start consuming query after 72 ms, results consumed after another 0 ms
Added 3 nodes, Created 2 relationships, Set 3 properties, Added 3 labels

Tani, le të krijojmë disa marrëdhënie.

Meqenëse Peter dhe Chris punojnë në të njëjtin departament dhe kanë të njëjtat veti si nyjet, ne do të krijojmë një marrëdhënie me kolonën e emrit.

> MATCH (a:Slite),(b:Slite)
             WHERE a.name = 'Peter Jack' AND b.name = 'Chris Rock'
             CREATE (a)-[r:DEPARTMENT { name: 'Designers' }]->(b)
             RETURN type(r), r.name;
+----------------------------+
| type(r)      | r.name      |
+----------------------------+
| "DEPARTMENT" | "Designers" |
+----------------------------+

1 row
ready to start consuming query after 60 ms, results consumed after another 17 ms
Created 1 relationships, Set 1 properties

Tani, le të krijojmë një lidhje tjetër midis Sammy dhe Peter pasi ata janë duke punuar në të njëjtin projekt.

> MATCH (a:Slite), (b:Slite)
             WHERE a.name = 'Peter Jack' AND b.name = 'Sammy'                                                                        CREATE (a)-[r:PROJECT { name: 'Test Project 1' }]->(b)                                                                  RETURN type(r), r.name;
+------------------------------+
| type(r)   | r.name           |
+------------------------------+
| "PROJECT" | "Test Project 1" |
+------------------------------+

1 row
ready to start consuming query after 132 ms, results consumed after another 12 ms
Created 1 relationships, Set 1 properties

Le t'i shfaqim të gjitha këto të dhëna duke përdorur pyetjen e mëposhtme.

> MATCH (a)-[r]->(b)
             RETURN a.name,r,b.name
             ORDER BY r;
+-------------------------------------------------------------------+
| a.name       | r                                   | b.name       |
+-------------------------------------------------------------------+
| "Sammy"      | [:COLLEAGUE]                        | "Peter Jack" |
| "Peter Jack" | [:COLLEAGUE]                        | "Chris Rock" |
| "Peter Jack" | [:DEPARTMENT {name: "Designers"}]   | "Chris Rock" |
| "Peter Jack" | [:PROJECT {name: "Test Project 1"}] | "Sammy"      |
+-------------------------------------------------------------------+

4 rows
ready to start consuming query after 99 ms, results consumed after another 5 ms

konkluzioni

Kjo përfundon tutorialin tonë për instalimin dhe konfigurimin e Neo4j në një server Ubuntu 22.04. Nëse keni ndonjë pyetje, postojini ato në komentet më poshtë.