Thứ ba, 15/09/2020 | 00:00 GMT+7

Cách cài đặt và cấu hình Neo4j trên Ubuntu 20.04

Neo4j là database đồ thị ghi lại mối quan hệ giữa các node dữ liệu, trong khi database quan hệ truyền thống sử dụng các hàng và cột để lưu trữ và cấu trúc dữ liệu. Vì mỗi nút lưu trữ các tham chiếu đến tất cả các node khác mà nó được kết nối, Neo4j có thể mã hóa và truy vấn các mối quan hệ phức tạp với chi phí tối thiểu.

Yêu cầu

Để làm theo hướng dẫn này, bạn cần những thứ sau:

Bước 1 - Cài đặt Neo4j

Repository Ubuntu chính thức không chứa bản sao của công cụ database Neo4j. Để cài đặt gói được hỗ trợ ngược dòng từ Neo4j, ta sẽ thêm một nguồn gói mới trỏ đến repository Neo4j, thêm khóa GPG từ Neo4j đảm bảo download hợp lệ và sau đó cài đặt gói.

Để bắt đầu, hãy cập nhật danh sách gói hiện có của bạn:

  • sudo apt update

Tiếp theo, hãy cài đặt một vài gói tiên quyết, điều này sẽ cho phép apt cài đặt các gói bằng kết nối HTTPS. Hệ thống của bạn có thể đã được cài đặt các gói này theo mặc định, nhưng vẫn an toàn khi chạy lệnh sau.

  • sudo apt install apt-transport-https ca-certificates curl software-properties-common

Bây giờ hãy thêm khóa GPG cho repository Neo4j chính thức vào hệ thống của bạn. Khóa này sẽ đảm bảo bạn có thể tin tưởng các gói Neo4j được cài đặt từ repository ngược dòng. Chạy lệnh sau để cài đặt khóa:

  • curl -fsSL https://debian.neo4j.com/neotechnology.gpg.key | sudo apt-key add -

Tiếp theo, thêm repository Neo4j 4.1 vào nguồn APT của hệ thống :

  • sudo add-apt-repository "deb https://debian.neo4j.com stable 4.1"

Bước tiếp theo là cài đặt gói Neo4j và tất cả các gói phụ thuộc của nó. Bước này sẽ download và cài đặt một gói Java tương thích, vì vậy bạn có thể nhập Y khi apt nhắc bạn cài đặt tất cả các phần phụ thuộc:

  • sudo apt install neo4j

Khi quá trình cài đặt hoàn tất, Neo4j sẽ chạy. Tuy nhiên, nó không được cài đặt để bắt đầu khi server khởi động lại hệ thống của bạn. Vì vậy, bước cài đặt cuối cùng là kích hoạt nó như một dịch vụ:

  • sudo systemctl enable neo4j.service

Sau khi hoàn thành tất cả các bước này, hãy kiểm tra trạng thái của Neo4j bằng lệnh systemctl :

  • sudo systemctl status neo4j.service

Bạn sẽ có kết quả tương tự như sau:

Output
● neo4j.service - Neo4j Graph Database Loaded: loaded (/lib/systemd/system/neo4j.service; enabled; vendor preset: enabled) Active: active (running) since Fri 2020-08-07 01:43:00 UTC; 6min ago Main PID: 21915 (java) Tasks: 45 (limit: 1137) Memory: 259.3M CGroup: /system.slice/neo4j.service . . .

Sẽ có các dòng kết quả dài dòng khác, nhưng điều quan trọng cần lưu ý là các dòng enabledrunning enabled đánh dấu. Khi bạn đã cài đặt và chạy Neo4j, bạn có thể chuyển sang tập hợp các bước tiếp theo, sẽ hướng dẫn bạn kết nối với Neo4j, cấu hình thông tin đăng nhập và chèn các node vào database .

Bước 2 - Kết nối và cấu hình Neo4j

Đến đây bạn đã cài đặt và cấu hình Neo4j để chạy sau bất kỳ lần khởi động lại nào, bạn có thể kiểm tra kết nối với database và cấu hình thông tin đăng nhập administrator .

Để tương tác với Neo4j trên dòng lệnh, hãy sử dụng trình cypher-shell . Gọi tiện ích như thế này:

  • cypher-shell

Khi lần đầu tiên bạn gọi shell, bạn sẽ đăng nhập bằng cách sử dụng kết hợp user neo4j quản trị mặc định và password neo4j . Sau khi bạn được xác thực, Neo4j sẽ nhắc bạn thay đổi password administrator :

cypher-shell prompt
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>

Trong ví dụ này, ******************** được đánh dấu là version bị che của password mới. Chọn password mạnh và dễ nhớ của bạn và nhớ ghi password đó ở nơi an toàn. Sau khi đặt password , bạn sẽ được kết nối với dấu nhắc neo4j@neo4j> tương tác nơi bạn có thể tương tác với database Neo4j bằng cách chèn và truy vấn các node .

Lưu ý : Phiên bản Cộng đồng của Neo4j hỗ trợ chạy một database tại một thời điểm. Ngoài ra, version Cộng đồng không bao gồm khả năng chỉ định role và quyền cho user nên những bước đó không có trong hướng dẫn này. Để biết thêm thông tin về các tính năng khác nhau được hỗ trợ bởi Phiên bản Cộng đồng của Neo4j, hãy tham khảo Tài liệu Neo4j tại đây .

Đến đây bạn đã đặt password administrator và thử nghiệm kết nối với Neo4j, hãy thoát khỏi dấu nhắc cypher-shell bằng lệnh :exit :

  • :exit

Tiếp theo, bạn có thể tùy chọn cấu hình Neo4j để chấp nhận các kết nối từ xa.

Bước 3 (Tùy chọn) - Cấu hình Neo4j để truy cập từ xa

Nếu bạn muốn kết hợp Neo4j vào một ứng dụng hoặc môi trường lớn hơn sử dụng nhiều server , thì bạn cần phải cấu hình nó để chấp nhận kết nối từ các hệ thống khác. Trong bước này, bạn sẽ cấu hình Neo4j để cho phép kết nối từ xa và bạn cũng sẽ thêm các luật firewall để hạn chế hệ thống nào có thể kết nối với server Neo4j của bạn.

Theo mặc định, Neo4j được cấu hình để chỉ chấp nhận các kết nối từ localhost ( 127.0.0.1 là địa chỉ IP cho localhost ). Cấu hình này đảm bảo server Neo4j của bạn không được tiếp xúc với Internet công cộng và chỉ những user có quyền truy cập vào hệ thống local mới có thể tương tác với Neo4j.

Để thay đổi socket mạng mà Neo4j sử dụng từ server localhost thành socket mà các hệ thống khác có thể sử dụng, bạn cần phải chỉnh sửa file /etc/neo4j/neo4j.conf . Mở file cấu hình trong trình soạn thảo bạn muốn và tìm cài đặt dbms.default_listen_address . Ví dụ sau sử dụng nano để chỉnh sửa file :

  • sudo nano /etc/neo4j/neo4j.conf

Tìm dòng được comment #dbms.default_listen_address=0.0.0.0 và bỏ ghi chú bằng cách xóa ký tự comment # đầu.

/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 . . . 

Theo mặc định, giá trị 0.0.0.0 sẽ ràng buộc Neo4j với tất cả các giao diện IPv4 có sẵn trên hệ thống của bạn, bao gồm cả localhost . Nếu bạn muốn giới hạn Neo4j ở một địa chỉ IP cụ thể, chẳng hạn như IP mạng riêng mà server của bạn sử dụng cho một đường dữ liệu, hãy chỉ định địa chỉ IP được gán cho network interface riêng của server của bạn tại đây.

Bạn cũng có thể cấu hình Neo4j để sử dụng giao diện IPv6. Giống như với IPv4, bạn có thể đặt giá trị default_listen_address thành một địa chỉ IPv6 cụ thể mà bạn sẽ sử dụng để giao tiếp với Neo4j. Nếu bạn muốn giới hạn Neo4j chỉ sử dụng địa chỉ IPv6 local cho server của bạn , hãy chỉ định ::1 , tương ứng với localhost sử dụng ký hiệu IPv6.

Khi bạn hoàn tất cấu hình địa chỉ IP mặc định mà Neo4j sẽ sử dụng cho các kết nối, hãy lưu và đóng neo4j.conf . Nếu bạn đang sử dụng nano , bạn có thể thực hiện bằng cách nhấn CTRL+X , tiếp theo là Y và sau đó ENTER .

Lưu ý : Nếu bạn cấu hình Neo4j bằng địa chỉ IPv6, bạn sẽ không thể kết nối trực tiếp với Neo4j với cypher-shell bằng địa chỉ IPv6. Thay vào đó, bạn cần cấu hình tên DNS phân giải thành địa chỉ IPv6 hoặc thêm một mục nhập trong file /etc/hosts của hệ thống từ xa ánh xạ địa chỉ thành một tên. Sau đó, bạn có thể sử dụng tên file DNS hoặc server để kết nối với Neo4j bằng IPv6 từ hệ thống từ xa của bạn .

Ví dụ: server Neo4j có địa chỉ IPv6 như 2001:db8::1 sẽ yêu cầu hệ thống kết nối từ xa có mục nhập /etc/hosts như sau, thay thế tên thay cho your_hostname đánh dấu:

/ etc / hosts
. . . 2001:db8::1 your_hostname 

Sau đó, bạn sẽ kết nối với server từ hệ thống từ xa bằng tên mà bạn đã chỉ định như sau:

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

Nếu bạn hạn chế Neo4j sử dụng địa chỉ IPv6 localhost của ::1 , thì bạn có thể kết nối với nó local trên chính server Neo4j bằng cách sử dụng tên ip6-localhost được cấu hình trước từ file /etc/hosts như sau:

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

Khi bạn gọi cypher-shell với URI kết nối, bạn sẽ được yêu cầu nhập tên user và password của bạn như bình thường.

Đến đây bạn đã cấu hình Neo4j để cho phép các kết nối từ xa, điều quan trọng là giới hạn quyền truy cập từ xa để chỉ các hệ thống tin cậy mới có thể kết nối với nó. Để hạn chế quyền truy cập từ xa vào Neo4j, bạn có thể sử dụng firewall UFW mặc định của Ubuntu. Nếu bạn đã làm theo hướng dẫn Cài đặt server ban đầu tiên quyết với Ubuntu 20.04 thì UFW đã được cài đặt và sẵn sàng sử dụng trên server của bạn.

Neo4j tạo hai socket mạng trong cài đặt mặc định, một trên cổng 7474 cho giao diện HTTP tích hợp và giao thức bolt chính trên cổng 7687. Neo4j khuyến nghị không sử dụng cổng HTTP trong production , vì vậy ta sẽ tạo luật firewall cho cổng 7687 thôi.

Để cấu hình firewall cho phép một server lưu trữ từ xa tin cậy truy cập vào giao diện bolt bằng IPv4, hãy nhập lệnh sau:

Ví dụ về server đơn UFW IPv4
  • sudo ufw allow from 203.0.113.1 to any port 7687 proto tcp

Thay thế địa chỉ IP của hệ thống từ xa tin cậy mà bạn sẽ sử dụng để truy cập Neo4j thay cho giá trị 203.0.113.1 được đánh dấu.

Nếu bạn muốn cho phép toàn bộ phạm vi mạng truy cập, chẳng hạn như quản lý riêng tư hoặc mạng đường dẫn dữ liệu, hãy sử dụng luật như sau:

Ví dụ về mạng UFW IPv4
  • sudo ufw allow from 192.0.2.0/24 to any port 7687 proto tcp

, hãy thay thế mạng mà bạn muốn có quyền truy cập vào Neo4j thay cho mạng 192.0.2.0/24 được đánh dấu.

Nếu bạn muốn cho phép các server truy cập Neo4j từ xa bằng IPv6, hãy thêm luật như sau:

Ví dụ về server đơn UFW IPv6
  • sudo ufw allow from 2001:DB8::1/128 to any port 7687 proto tcp

Thay thế địa chỉ IPv6 của hệ thống tin cậy của bạn thay cho địa chỉ 2001:DB8::1/128 đánh dấu.

Như với IPv4, bạn cũng có thể cho phép một loạt địa chỉ IPv6 truy cập vào server Neo4j của bạn . Để làm như vậy, hãy tạo một luật UFW như sau:

Ví dụ về server đơn UFW IPv6
  • sudo ufw allow from 2001:DB8::/32 to any port 7687 proto tcp

thay thế trong dải mạng tin cậy của bạn thay cho dải mạng 2001:DB8::/32 đánh dấu.

Khi bạn đã tạo luật hoặc luật UFW thích hợp cho cấu hình mạng và server hoặc mạng tin cậy , hãy bật UFW để các luật có hiệu lực:

  • sudo ufw reload

Bạn có thể kiểm tra các luật UFW hiện đang được tải bằng cách sử dụng lệnh ufw status . Chạy nó đảm bảo rằng các địa chỉ hoặc mạng mà bạn đã chỉ định có thể truy cập Neo4j trên cổng 7687:

  • sudo ufw status

Bạn sẽ có kết quả tương tự như sau:

Output
Status: active To Action From -- ------ ---- 22/tcp ALLOW Anywhere 22/tcp (v6) ALLOW Anywhere (v6) 7687/tcp ALLOW 203.0.113.1

Đến đây bạn có một server Neo4j được cấu hình để cho phép truy cập trên cổng 7687 vào một server hoặc mạng từ xa tin cậy . Trong phần tiếp theo của hướng dẫn này, bạn sẽ tìm hiểu về cách thêm các node vào database và cách xác định mối quan hệ giữa chúng.

Bước 4 - Sử dụng Neo4j

Để bắt đầu sử dụng Neo4j, hãy thêm một số nút ví dụ và sau đó xác định mối quan hệ giữa chúng. Kết nối với Neo4j bằng cypher-shell .

  • cypher-shell

Lưu ý : Nếu bạn đã cấu hình Neo4j để cho phép truy cập từ xa trong [Bước 3 (Tùy chọn) - Cấu hình Neo4j cho Truy cập Từ xa] (bước-3-tùy chọn-cấu hình-neo4j-cho-truy cập từ xa], hãy kết nối bằng URI tương ứng với địa chỉ của server Neo4j của bạn. Ví dụ: nếu IP của server Neo4j của bạn là 203.0.113.1 , thì hãy kết nối với nó như thế này từ hệ thống từ xa của bạn:

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

Bạn sẽ được yêu cầu nhập tên user và password của bạn như bình thường.

Nếu bạn đang sử dụng IPv6, hãy đảm bảo bạn có mục nhập /etc/hosts với tên như được mô tả trong Bước 3. Sau đó, kết nối với server Neo4j từ hệ thống từ xa của bạn bằng lệnh cypher-shell như sau:

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

, hãy đảm bảo your_hostname đánh dấu your_hostname ánh xạ tới địa chỉ IPv6 của server Neo4j trong file /etc/hosts của hệ thống từ xa của bạn.

Khi bạn đã đăng nhập vào Neo4j bằng tên user và password của bạn , bạn có thể truy vấn và thêm các node và mối quan hệ vào database .

Để bắt đầu, hãy thêm một nút Cá mập trắng lớn vào Neo4j. Lệnh sau sẽ tạo một nút kiểu Shark , với tên là Great White .

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

Sau mỗi lệnh, bạn sẽ nhận được kết quả tương tự như sau:

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

Lưu ý : Giải thích đầy đủ về từng truy vấn cypher sau đây nằm ngoài phạm vi của hướng dẫn này. Để biết chi tiết về cú pháp của ngôn ngữ truy vấn cypher , hãy tham khảo Hướng dẫn sử dụng Neo4j Cypher .

Tiếp theo, thêm một số cá mập nữa và liên kết chúng bằng mối quan hệ có tên là FRIEND . Neo4j cho phép bạn liên kết các node với các mối quan hệ được đặt tên tùy ý, vì vậy FRIEND có thể là bất kỳ nhãn nào cho mối quan hệ mà bạn muốn sử dụng.

Trong ví dụ sau, ta sẽ thêm ba con cá mập và liên kết chúng với nhau bằng mối quan hệ có tên là FRIEND :

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

Bạn sẽ nhận được kết quả cho biết ba con cá mập mới đã được thêm vào database :

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

Neo4j cho phép bạn liên kết các node bằng cách sử dụng tên tùy ý cho các mối quan hệ, vì vậy ngoài mối quan hệ FRIEND hiện có của chúng, Sammy và Megalodon cũng có thể được liên kết bằng cách sử dụng xếp hạng phân loại.

Sammy và Megalodon chia sẻ một trật tự chung của Lamniformes. Vì các mối quan hệ có thể có các thuộc tính giống như các node , nên ta sẽ tạo một mối quan hệ ORDER với một thuộc tính name được đặt thành Lamniformes để giúp mô tả một trong các mối quan hệ của Sammy và 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;

Sau khi thêm mối quan hệ đó, bạn sẽ có kết quả như sau:

Output
+-------------------------+ | type(r) | r.name | +-------------------------+ | "ORDER" | "Lamniformes" | +-------------------------+ 1 row available after 2 ms, consumed after another 7 ms Created 1 relationships, Set 1 properties

Tiếp theo, thêm mối quan hệ SUPERORDER giữa Sammy và Hammerhead dựa trên siêu phân loại của họ, đó là Selachimorpha. , mối quan hệ được cung cấp một thuộc tính name , được đặt thành 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;

, bạn sẽ nhận được kết quả cho biết loại mối quan hệ, cùng với tên đã được thêm vào để mô tả mối quan hệ:

Output
+--------------------------------+ | type(r) | r.name | +--------------------------------+ | "SUPERORDER" | "Selachimorpha" | +--------------------------------+ 1 row available after 2 ms, consumed after another 8 ms Created 1 relationships, Set 1 properties

Cuối cùng, với tất cả các node và mối quan hệ này được xác định và lưu trữ trong Neo4j, hãy kiểm tra dữ liệu bằng cách sử dụng truy vấn sau:

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

Bạn sẽ nhận được kết quả như sau:

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

Đầu ra bao gồm các mối quan hệ FRIEND đã được xác định giữa Hammerhead, Sammy và Megalodon, cũng như các mối quan hệ phân loại ORDERSUPERORDER .

Khi bạn hoàn tất việc thêm và khám phá các node và mối quan hệ vào database Neo4j của bạn , hãy gõ lệnh :exit để rời khỏi cypher-shell .

Kết luận

Đến đây bạn đã cài đặt, cấu hình và thêm dữ liệu vào Neo4j trên server của bạn . Bạn cũng có thể tùy chọn cấu hình Neo4j để chấp nhận kết nối từ các hệ thống từ xa và bảo mật nó bằng UFW.

Nếu bạn muốn tìm hiểu thêm về cách sử dụng Neo4j và ngôn ngữ truy vấn cypher , hãy tham khảo ý kiến của cán bộ
Tài liệu Neo4j .


Tags:

Các tin liên quan

Cách cài đặt Webmin trên Ubuntu 20.04
2020-08-26
Cách thiết lập môi trường JupyterLab trên Ubuntu 18.04
2020-08-26
Cách cài đặt Node.js trên Ubuntu 18.04
2020-08-06
Cách cài đặt MongoDB trên Ubuntu 20.04 từ site chính thức của Mongodb
2020-07-31
Cách cấu hình truy cập từ xa cho MongoDB trên Ubuntu 20.04
2020-07-31
Cách bảo mật MongoDB trên Ubuntu 20.04
2020-07-31
Cách thiết lập Mattermost trên Ubuntu 20.04
2020-07-29
Làm thế nào để quản lý OpenSSH trên Ubuntu 18.04
2020-07-28
Cách sử dụng Discord Webhooks để nhận thông báo về trạng thái trang web của bạn trên Server
2020-07-27
Cách cài đặt Discourse trên Ubuntu 18.04
2020-07-14