Database
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Database

Cách cài đặt Neo4j trên Ubuntu 20.04

Giới thiệu

Trong hướng dẫn này, chúng ta sẽ xem xét Neo4j là gì, nó được sử dụng để làm gì và nó được triển khai như thế nào. Chúng tôi cũng sẽ cài đặt và định cấu hình cài đặt trên máy chủ Ubuntu 20.04. Neo4j là một cơ sở dữ liệu đồ họa được sử dụng để tạo các mối quan hệ dữ liệu. Các ví dụ khác về cơ sở dữ liệu đồ họa bao gồm:

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

Neo4j là gì

Neo4j kết nối dữ liệu khi nó được lưu trữ, cho phép chúng tôi chạy các truy vấn mà chúng tôi chưa bao giờ biết hoặc nghĩ đến trước đây. Nói một cách đơn giản, Neo4j ghi lại mối quan hệ giữa các nút dữ liệu, trong khi cơ sở dữ liệu quan hệ thông thường sử dụng các cột và hàng để lưu trữ dữ liệu có cấu trúc. Vì mỗi nút lưu trữ các tham chiếu đến tất cả các nút 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.

Neo Technology là người sáng tạo và phát triển phần mềm nguồn mở Neo4j. Công ty đã phát triển nó từ năm 2003. Nó được viết bằng Java và Scala, và mã nguồn có sẵn miễn phí trên GitHub. Tính đến năm 2015, nó được coi là hệ quản trị cơ sở dữ liệu đồ họa được sử dụng nhiều nhất hiện nay. Neo4j sử dụng ngôn ngữ truy vấn của riêng nó được gọi là Cypher, nhưng các truy vấn cũng có thể được viết theo các kiểu khác, chẳng hạn như thông qua Java API.

Điều kiện tiên quyết

Đối với cài đặt này, phần mềm yêu cầu các cài đặt cơ bản sau.

  • RAM 8 GB và máy chủ bốn lõi. Mức sử dụng tối thiểu được khuyến nghị là RAM 1 GB và máy chủ lõi đơn.
  • Hệ điều hành Ubuntu 20.04
  • Tất cả các lệnh được chạy dưới dạng root. Nếu bạn là người dùng thông thường, các lệnh phải được mở đầu bằng lệnh sudo.

Cài đặt Neo4j

Thêm kho lưu trữ

Ubuntu không chính thức chứa Neo4j trong kho lưu trữ gói tiêu chuẩn. Chúng tôi sẽ thêm nguồn gói trỏ đến vị trí của kho lưu trữ Neo4j, sau đó thêm khóa GPG từ Neo4j để xác minh, sau đó tự cài đặt Neo4j.

Chúng tôi bắt đầu bằng cách cập nhật danh sách các gói và chính các gói đó.

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

Thêm phần mềm bổ sung

Trong bước này, chúng tôi sẽ cài đặt một gói bổ sung cần thiết cho các kết nối HTTPS. Ứng dụng này có thể đã được cài đặt mặc định trên hệ thống, nhưng chúng vẫn cần được cập nhật.

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

apt-transport-https gói cho phép sử dụng https thông qua trình quản lý gói bằng libapt-pkg thư viện. Điều này giúp cài đặt an toàn.

Xác minh Khóa bảo mật

Bây giờ chúng tôi thêm khóa bảo mật chính thức cho kho lưu trữ gói Neo4j. Khóa này kiểm tra và xác minh những gì bạn đang cài đặt có phải từ kho lưu trữ chính thức hay không.

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

Thêm kho lưu trữ

Thêm kho lưu trữ Neo4j chính thức vào danh sách trình quản lý gói.

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

Cài đặt Neo4j

Khi cài đặt Neo4j và tất cả các phụ thuộc của nó, điều cần lưu ý là cài đặt sẽ nhắc chúng ta cài đặt các gói Java để hoạt động với Neo4j. Trong khi cài đặt, nhấn Y. để chấp nhận cài đặt phần mềm này. Nếu bạn đã cài đặt Java, trình cài đặt sẽ hiểu và bỏ qua bước này.

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

Bắt đầu dịch vụ Neo4j

Sau khi cài đặt xong, chúng ta cần kích hoạt nó như một dịch vụ 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:~#  

Kiểm tra trạng thái Neo4j

Tiếp theo, chúng tôi xác minh rằng mọi thứ đang hoạt động như mong đợi.

 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 

Kiểm tra kết nối DB

Vì chúng tôi đã cài đặt Neo4j và bắt đầu nó như một dịch vụ, nên bây giờ chúng tôi sẽ kiểm tra kết nối cơ sở dữ liệu và định cấu hình người dùng quản trị viên.

Lưu ý:Chúng tôi đang sử dụng phiên bản Neo4j Community Edition miễn phí. Nó hỗ trợ làm việc đồng thời với cùng một cơ sở dữ liệu, nhưng không bao gồm việc gán vai trò và quyền cho người dùng.

Làm việc với Neo4j

Để tương tác với cơ sở dữ liệu, chúng tôi sẽ khởi chạy tiện ích nội bộ có tên là cypher-shell để làm việc với Neo4j. Khi chúng tôi chạy nó lần đầu tiên, chúng tôi sẽ được yêu cầu nhập người dùng và mật khẩu. Theo mặc định, tên người dùng là neo4j và mật khẩu là neo4j. Sau lần đăng nhập đầu tiên, bạn sẽ được nhắc thay đổi mật khẩu theo một trong những lựa chọn của bạn.

 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>  

Để thoát, hãy sử dụng lệnh thoát.

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

Thêm nút

Hãy thiết lập một số nút mẫu và xác định mối quan hệ giữa chúng. Kết nối bằng 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>  

Tiếp theo, hãy thêm một nút có tên là Liquidweb và tên của các đồng nghiệp làm việc cho công ty này dưới tên Margaret. Chúng ta có thể thực hiện việc này bằng lệnh CREATE và cú pháp sẽ như sau.

 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>  

Thêm người dùng

Hãy thêm một vài đồng nghiệp nữa và liên kết họ với công ty mà họ làm việc, Liquidweb. Chúng tôi sẽ kết nối bằng lệnh 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>  

Tạo mối quan hệ

Vì Peter và Chris làm việc trong cùng một bộ phận và có cùng thuộc tính như các nút, chúng tôi sẽ tạo mối quan hệ với cột tên.

 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 - Điều này cho biết sự tương ứng của các nút. Trong trường hợp này, trong một công ty Liquidweb
  • WHERE - giữa các giá trị
  • CREATE - tạo và thêm
  • RETURN - Quay lại cơ sở.

Bây giờ, hãy tạo kết nối giữa John và Chris, mặc dù họ ở các phòng ban khác nhau, nhưng họ đang làm việc trên cùng một dự án.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>  

Thông tin hiển thị

Bây giờ, chúng tôi sẽ hiển thị tất cả dữ liệu này và các mối quan hệ của chúng bằng cách sử dụng truy vấn sau.

 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>  

Chúng tôi đã nhận được dữ liệu đầu ra với các mối quan hệ FRIEND sau đây, cho thấy mối quan hệ và các mối quan hệ dữ liệu sau đây giữa SỞ và DỰ ÁN.

Để thoát khỏi trình bao cypher, hãy chạy lệnh thoát.

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

Thiết lập Kết nối Từ xa An toàn với Neo4j

Không phải lúc nào chúng tôi cũng có thể kết nối với cơ sở dữ liệu từ chính máy chủ. Nếu chúng ta muốn định cấu hình ứng dụng để sử dụng Neo4j, chúng ta sẽ cần định cấu hình nó để kết nối an toàn với các máy chủ khác. Ngoài ra, chúng ta nên định cấu hình tường lửa để hạn chế máy chủ nào có thể đính kèm vào Neo4j.

Theo mặc định, Neo4j kết nối qua localhost (127.0.0.1 - localhost - dành cho các ứng dụng thử nghiệm mà không hoạt động với các máy chủ khác). Ngoài ra, công việc của Neo4j từ localhost sẽ không được công khai để truy cập Internet. Chỉ những người dùng có quyền truy cập vào mạng cục bộ mới có thể kết nối với Neo4j.

Định cấu hình Neo4j

Để Neo4j kết nối với các máy chủ khác, chúng ta cần thay đổi cài đặt của tệp cấu hình /etc/neo4j/neo4j.conf . Chúng tôi sẽ sử dụng trình chỉnh sửa nano cho nhiệm vụ này. Hãy nhớ rằng, nếu bạn chưa root, hãy sử dụng lệnh sudo.

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

Tìm dòng trong phần Trình kết nối mạng

#dbms.default_listen_address=0.0.0.0

Bỏ ghi chú dòng này bằng cách xóa ký hiệu # rồi nhấn Ctrl + S và Ctrl + X để lưu và thoát khỏi trình chỉnh sửa.

Giá trị 0.0.0.0 sẽ ràng buộc Neo4j với tất cả các giao diện mạng IPv4 có sẵn. Bạn có thể đặt một địa chỉ IP hoặc mạng cụ thể mà máy chủ của bạn sử dụng làm đường dẫn dữ liệu. Bạn cũng có thể định cấu hình nó để sử dụng giao diện IPv6, nhưng có nhiều sắc thái đối với cài đặt đó. Chúng tôi khuyên bạn nên đọc tài liệu trên trang web chính thức.

Định cấu hình tường lửa cho các kết nối từ xa

Để cấu hình phần mềm Neo4j cho các kết nối từ xa, chúng ta phải cấu hình tường lửa. Chúng tôi hạn chế quyền truy cập để chỉ những hệ thống đáng tin cậy mới có thể kết nối với nó. Trong trường hợp này, chúng tôi sẽ sử dụng tường lửa Ubuntu mặc định, UFW.

Tiếp theo, chúng ta phải kiểm tra xem tường lửa đã được kích hoạt chưa. Nếu nó không hoạt động, chúng tôi phải kích hoạt nó.

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

Neo4j tạo hai ổ cắm mạng khi cài đặt phần mềm. Một trên cổng 7474 cho giao diện HTTP và một cho giao thức chính trên cổng 7687. Neo4j khuyên bạn nên sử dụng cổng 7687. Lệnh mở một cổng sẽ tương tự như lệnh sau được sử dụng để cho phép địa chỉ 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 

Nhập dải mạng cụ thể của bạn để mở cổng. Đối với địa chỉ IPv6, lệnh sẽ giống như thế này.

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

Các IP trên được sử dụng làm ví dụ. Thay thế các giá trị của bạn và thêm quy tắc.

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

Khởi động lại tường lửa

Đảm bảo khởi động lại tường lửa của bạn.

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

Xác minh kết nối

Bây giờ, hãy kiểm tra xem nó có hoạt động bình thường không.

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

Và cùng với đó, chúng tôi có một máy chủ Neo4j đang hoạt động sẵn sàng hoạt động và được định cấu hình để cho phép truy cập trên cổng 7687.

Kết luận

Chúng tôi đã gặp gỡ với cơ sở dữ liệu đồ họa Neo4j, tìm hiểu cách hoạt động và lý do tại sao nó lại cần thiết. Thiết lập trình quản lý gói và sau đó cài đặt Neo4j. Tiếp theo, chúng tôi đã kiểm tra chức năng, truy cập vào nó và thay đổi mật khẩu. Chúng tôi đã thử các lệnh cơ bản về cách tạo bảng, tạo mối quan hệ và thiết lập các nút. Cuối cùng, chúng tôi đã định cấu hình kết nối với các IP mà chúng tôi cần và định cấu hình tường lửa để bảo mật.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hiểu các giao dịch trong SQL

  2. Cách lấy Ngày hôm qua trong T-SQL

  3. Cài đặt WordPress bằng WP-CLI

  4. VLDB ở lứa tuổi thanh thiếu niên 20:Bạn sẽ cần nhiều hơn nữa…

  5. Cài đặt và cấu hình Phần mềm XAMPP trên Windows Server 2019