如何在 Ubuntu 20.04 上安装 Neo4j

[ad_1]

介绍

在本教程中,我们将研究 Neo4j 是什么、它的用途以及它是如何实现的。 我们还将在 Ubuntu 20.04 服务器上安装和配置安装。 Neo4j 是用于创建数据关系的图形数据库。 图形数据库的其他示例包括:

  • 数据库
  • 核心
  • 微软 SQL Server 2017
  • 东方数据库
  • RedisGraph

什么是 Neo4j

Neo4j 连接存储的数据,允许我们运行我们以前从未知道或考虑过的查询。 简单来说,Neo4j 记录的是数据节点之间的关系,而传统的关系型数据库使用列和行来存储结构化数据。 由于每个节点都存储对其连接的所有其他节点的引用,因此 Neo4j 可以以最小的开销编码和查询复杂的关系。

作者:最初由 Ahzf 上传(由 Obersachse 转移)-最初上传于 en.wikipedia,CC0,https://commons.wikimedia.org/w/index.php?curid=19279472

Neo Technology 是开源软件 Neo4j 的创建者和开发者。 该公司自 2003 年以来一直在开发它。它是用 Java 和 Scala 编写的,源代码可在 GitHub 上免费获得。 截至 2015 年,它被认为是当今使用最多的图形数据库管理系统。 Neo4j 使用自己的查询语言 Cypher,但查询也可以用其他样式编写,例如通过 Java API。

先决条件

对于此安装,软件需要以下基线设置。

  • 8 GB RAM 和四核服务器。 建议至少使用 1 GB RAM 和单核服务器。
  • Ubuntu 20.04 操作系统
  • 所有命令都以 root 身份运行。 如果您是普通用户,则命令必须以 sudo 命令。

Neo4j 安装

添加存储库

Ubuntu 在标准包存储库中没有正式包含 Neo4j。 我们将添加指向 Neo4j 存储库位置的包源,然后添加来自 Neo4j 的 GPG 密钥进行验证,然后安装 Neo4j 本身。

我们首先更新包列表和包本身。

[email protected]:~# apt update && apt -y upgrade

添加附加软件

在此步骤中,我们将安装 HTTPS 连接所需的附加包。 此应用程序可能已默认安装在系统上,但仍需要更新。

[email protected]:~# apt install apt-transport-https ca-certificates curl software-properties-common -y

apt-transport-https 包允许使用 libapt-pkg 库通过包管理器使用 https。 这样可以保证安装安全。

验证安全密钥

现在我们为 Neo4j 包存储库添加官方安全密钥。 此密钥检查并验证您正在安装的内容来自官方存储库。

 [email protected]:~# curl -fsSL https://debian.neo4j.com/neotechnology.gpg.key | apt-key add -
 OK
 [email protected]:~#  

添加存储库

将官方 Neo4j 存储库添加到包管理器列表中。

[email protected]:~# add-apt-repository "deb https://debian.neo4j.com stable 4.1"

安装 Neo4j

在安装 Neo4j 及其所有依赖项时,必须注意安装会提示我们安装 Java 包以与 Neo4j 一起使用。 在安装过程中,按 Y. 接受此软件安装。 如果您安装了 Java,安装程序会理解并跳过此步骤。

 [email protected]:~# 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) ...
 [email protected]:~#  

启动 Neo4j 服务

安装完成后,我们需要将其启用为 neo4j.service 服务。

 [email protected]:~# 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.
 [email protected]:~#  

检查 Neo4j 状态

接下来,我们验证一切是否按预期工作。

 [email protected]:~# 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 

测试数据库连接

由于我们安装了 Neo4j 并将其作为服务启动,我们现在将测试数据库连接并配置 admin 用户。

注意:我们使用的是免费的社区版 Neo4j 版本。 它支持使用同一个数据库同时工作,但不包括为用户分配角色和权限。

使用 Neo4j

为了与数据库交互,我们将启动名为 cypher-shell 的内部实用程序来与 Neo4j 一起工作。 当我们第一次运行它时,我们会被要求输入用户名和密码。 默认用户名是neo4j,密码是neo4j。 第一次登录后,系统会提示您将密码更改为您选择的密码。

 [email protected]:~# 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.
 [email protected]>  

要退出,请使用 exit 命令。

 [email protected]> exit
 Bye!
 [email protected]:~#  

添加节点

让我们设置一些示例节点并定义它们之间的关系。 使用 Cypher 连接

 [email protected]:~# 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.
 [email protected]>  

接下来,让我们添加一个名为 Liquidweb 的节点以及在名为 Margaret 的名称下为该公司工作的同事的姓名。 我们可以使用 CREATE 命令来做到这一点,语法如下。

 [email protected]> CREATE (:Liquidweb {name: 'Margaret'});
 0 rows available after 36 ms, consumed after another 0 ms
 Added 1 nodes, Set 1 properties, Added 1 labels
 [email protected]>  

添加用户

让我们再添加一些同事,并将他们与他们工作的公司 Liquidweb 联系起来。 我们将使用 FRIEND 命令进行连接。

 [email protected]> 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
 [email protected]>  

建立关系

由于 Peter 和 Chris 在同一部门工作并且具有与节点相同的属性,因此我们将创建与 name 列的关系。

 [email protected]> 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
 [email protected]> 
  • MATCH – 这表示节点的对应关系。 在这种情况下,在一家公司 Liquidweb 内
  • WHERE – 值之间
  • CREATE – 创建和添加
  • 返回 – 返回基地。

现在在 John 和 Chris 之间建立连接,虽然他们在不同的部门,但他们在同一个项目上工作。[email protected]> 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
 [email protected]>  

显示信息

现在我们将使用以下查询显示所有这些数据及其关系。

 [email protected]> 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
 [email protected]>  

我们收到的输出数据具有以下 FRIEND 关系,其中显示了 DEPARTMENT 和 PROJECT 之间的关系以及以下数据关系。

要退出密码外壳,请运行 exit 命令。

 [email protected]> :exit
 Bye!
 [email protected]:~#  

设置到 Neo4j 的安全远程连接

我们并不总是能够从服务器本身连接到数据库。 如果我们想将应用程序配置为使用 Neo4j,我们需要将其配置为安全地连接到其他服务器。 此外,我们应该配置防火墙以限制哪些服务器可以连接到 Neo4j。

默认情况下,Neo4j 通过 localhost 连接(127.0.0.1 – localhost – 用于测试应用程序,而无需与其他服务器一起使用)。 此外,来自 localhost 的 Neo4j 的工作不会对 Internet 的公共访问开放。 只有能够访问本地网络的用户才能连接到 Neo4j。

配置 Neo4j

为了让 Neo4j 连接到其他服务器,我们需要更改配置文件 /etc/neo4j/neo4j.conf 的设置。 我们将使用 nano 编辑器来完成这项任务。 请记住,如果您不是 root,请使用 sudo 命令。

 [email protected]:~# nano /etc/neo4j/neo4j.conf
 [email protected]:~#  

在网络连接器部分找到该行

#dbms.default_listen_address=0.0.0.0

通过删除 # 符号取消注释此行,然后按 Ctrl + S 和 Ctrl + X 保存并退出编辑器。

0.0.0.0 值会将 Neo4j 绑定到所有可用的 IPv4 网络接口。 您可以将服务器用作数据路径的特定 IP 地址或网络。 您还可以将其配置为使用 IPv6 接口,但该设置有许多细微差别。 我们建议您阅读官方网站上的文档。

为远程连接配置防火墙

要配置 Neo4j 软件进行远程连接,我们必须配置防火墙。 我们限制访问,以便只有受信任的系统才能连接到它。 在这种情况下,我们将使用默认的 Ubuntu 防火墙 UFW。

接下来,我们必须检查防火墙是否被激活。 如果它不活动,我们必须启用它。

 [email protected]:~# ufw enable
 Firewall is active and enabled on system startup
 [email protected]:~#  

Neo4j 在安装软件时会创建两个网络套接字。 一个用于 HTTP 接口的端口 7474 和端口 7687 上的主要协议。Neo4j 建议使用端口 7687。打开端口的命令将类似于以下用于允许 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 

Enter 您的特定网络范围打开端口。 对于 IPv6 地址,该命令将如下所示。

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

以上述IP为例。 替换您的值并添加规则。

 [email protected]:~# ufw allow from 192.168.50.189 to any port 7687 proto tcp
 Rule added
 [email protected]:~#  

重启防火墙

请务必重新启动防火墙。

 [email protected]:~# ufw reload
 Firewall reloaded
 [email protected]:~#  

验证连接

现在让我们检查它是否正常工作。

 [email protected]:~# ufw status
 Status: active
 To                         Action      From
 --                         ------      ----
 7687/tcp                   ALLOW       192.168.50.189            
 [email protected]:~#  

有了这个,我们就有了一个可以运行的 Neo4j 服务器,它可以运行并配置为允许访问端口 7687。

结论

我们会见了 Neo4j 图形数据库,了解了它的工作原理以及为什么需要它。 设置包管理器,然后安装 Neo4j。 接下来,我们检查了功能,进入并更改了密码。 我们尝试了有关如何创建表、建立关系和设置节点的基本命令。 最后,我们配置了与所需 IP 的连接并配置了防火墙以确保安全。

[ad_2]

Related Posts