如何在 Ubuntu 20.04 上安装和配置 Neo4j

介绍

Neo4j是一个图形数据库,用于记录数据节点之间的关系,而传统的关系数据库则使用行和列来存储和构造数据。由于每个节点都存储对其所连接的所有其他节点的引用,因此 Neo4j 可以以最小的开销编码和查询复杂的关系。

先决条件

要遵循本教程,您需要满足以下条件:

第 1 步 - 安装 Neo4j

官方 Ubuntu 软件包存储库不包含 Neo4j 数据库引擎的副本。要从 Neo4j 安装上游支持的软件包,您需要从 Neo4j 添加 GPG 密钥以确保软件包下载有效。然后,您将添加指向 Neo4j 软件存储库的新软件包源,最后安装该软件包。

首先,下载以下 curl 命令并将其输出通过管道传输到gpg --dearmor命令中。此步骤将密钥转换为 apt 可用于验证下载软件包的格式:

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

接下来,将 Neo4j 4.1 存储库添加到系统的 APT 源:

接下来,将 Neo4j 4.1 存储库添加到系统的 APT 源:

[signed-by=/usr/share/keyrings/neo4j.gpg]该文件的部分指示使用apt您下载的密钥来验证 neo4j 包的存储库和文件信息。

下一步是更新您的软件包列表,然后安装 Neo4j 软件包及其所有依赖项。此步骤将下载并安装兼容的 Java 软件包,因此您可以在命令提示您安装所有依赖项Y时输入:apt

sudo apt update

sudo apt install neo4j

安装过程完成后,Neo4j 应该可以运行。但是,它并未设置为在系统重启时启动。因此,最后一个设置步骤是将其启用为服务,然后启动它:

sudo systemctl enable neo4j.service

sudo systemctl start neo4j.service

sudo systemctl start neo4j.service

第 2 步 - 连接并配置 Neo4j

现在您已经安装 Neo4j 并将其配置为在重启后运行,您可以测试连接到数据库并配置管理员凭据。

要在命令行上与 Neo4j 交互,请使用该cypher-shell实用程序。像这样调用该实用程序:

cypher-shell

首次调用 shell 时,您将使用默认的管理neo4j用户和neo4j密码组合登录。通过身份验证后,Neo4j 将提示您更改管理员密码:

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>

在此示例中,突出显示的********************是新密码的掩码版本。选择您自己的强而易记的密码,并确保将其记录在安全的地方。设置密码后,您将连接到交互式提示,neo4j@neo4j> 您可以在其中通过插入和查询节点与 Neo4j 数据库进行交互。

步骤 3(可选) - 配置 Neo4j 进行远程访问

如果您希望将 Neo4j 整合到使用多台服务器的大型应用程序或环境中,则需要将其配置为接受来自其他系统的连接。在此步骤中,您将配置 Neo4j 以允许远程连接,并且还将添加防火墙规则以限制哪些系统可以连接到您的 Neo4j 服务器。

默认情况下,Neo4j 配置为localhost仅接受来自 (127.0.0.1是 的 IP 地址localhost)的连接。此配置可确保您的 Neo4j 服务器不会暴露在公共 Internet 上,并且只有有权访问本地系统的用户才能与 Neo4j 交互。

要将 Neo4j 使用的网络套接字更改为localhost其他系统可以使用的网络套接字,您需要编辑该/etc/neo4j/neo4j.conf文件。在您喜欢的编辑器中打开配置文件并找到设置dbms.default_listen_address。以下示例用于nano编辑文件:

sudo nano /etc/neo4j/neo4j.conf

找到注释掉的#dbms.default_listen_address=0.0.0.0行并通过删除前导注释字符来取消注释#

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

默认情况下,该值0.0.0.0会将 Neo4j 绑定到系统上所有可用的 IPv4 接口,包括localhost。如果您想将 Neo4j 限制到特定的 IP 地址,例如服务器用于数据路径的私有网络 IP,请在此处指定分配给服务器私有网络接口的 IP 地址。

您还可以将 Neo4j 配置为使用 IPv6 接口。与 IPv4 一样,您可以将值设置default_listen_address为用于与 Neo4j 通信的特定 IPv6 地址。如果您想限制 Neo4j 仅使用服务器的本地 IPv6 地址,请指定::1,这对应于localhost使用 IPv6 表示法。

配置完 Neo4j 用于连接的默认 IP 地址后,保存并关闭neo4j.conf。如果您正在使用nano,可以按CTRL+X,然后按Y,然后按ENTER

注意:如果您使用 IPv6 地址配置 Neo4j,则无法 cypher-shell直接使用 IPv6 地址连接到 Neo4j。相反,您需要配置解析为 IPv6 地址的 DNS 名称,或者在远程系统的/etc/hosts文件中添加将地址映射到名称的条目。然后,您将能够使用 DNS 或主机文件名从远程系统使用 IPv6 连接到 Neo4j。

例如,具有如下 IPv6 地址的 Neo4j 服务器2001:db8::1将要求远程连接系统具有/etc/hosts如下条目,用名称代替突出显示的your_hostname

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

然后,您将使用您指定的名称从远程系统连接到服务器,如下所示:

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

如果您限制 Neo4j 使用localhost的 IPv6 地址,那么您可以使用文件中的::1预配置名称在 Neo4j 服务器上本地连接到它,如下所示:ip6-localhost/etc/hosts

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

现在您已将 Neo4j 配置为允许远程连接,限制远程访问非常重要,以便只有受信任的系统才能连接到它。要限制对 Neo4j 的远程访问,您可以使用 Ubuntu 的默认 UFW 防火墙。如果您遵循了必备的Ubuntu 20.04 初始服务器设置教程,则 UFW 已安装并可在您的服务器上使用。

Neo4j 在默认安装中创建两个网络套接字,一个在端口 7474 上用于内置 HTTP 接口,一个在端口 7687 上用于主bolt协议。Neo4j 建议不要在生产中使用 HTTP 端口,因此我们将仅为端口 7687 创建防火墙规则。

要配置防火墙以允许受信任的远程主机bolt使用 IPv4 访问接口,请输入以下命令:

sudo ufw allow from 203.0.113.1 to any port 7687 proto tcp

将突出显示的 IP 地址替换为用于访问 Neo4j 的受信任远程系统的 IP 地址203.0.113.1价值。

如果您想允许整个网络范围访问,例如私有管理或数据路径网络,请使用如下规则:

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

第 4 步 - 使用 Neo4j

要开始使用 Neo4j,让我们添加一些示例节点,然后定义它们之间的关系。使用 连接到 Neo4j cypher-shell

cypher-shell




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





使用用户名和密码登录 Neo4j 后,您可以查询并将节点和关系添加到数据库。

首先,将大白鲨节点添加到 Neo4j。以下命令将创建一个类型为 的节点Shark,名称为Great White

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

执行每条命令后您将收到类似以下内容的输出:

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

接下来,添加更多鲨鱼,并使用名为 的关系将它们关联起来FRIEND。Neo4j 允许您将节点与任意命名的关系关联起来,因此FRIEND可以是您想要使用的任何关系标签。

在下面的例子中,我们将添加三条鲨鱼,并使用名为的关系将它们链接在一起FRIEND

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

您应该收到表明三条新鲨鱼已添加到数据库的输出:

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

Neo4j 允许您使用任意名称来关联节点,因此除了现有FRIEND关系之外,Sammy 和 Megalodon 还可以使用分类等级来关联。

萨米和巨齿鲨属于鼠类目。由于关系可以像节点一样具有属性,我们将创建一个ORDER关系,并将name属性设置为,Lamniformes以帮助描述萨米和巨齿鲨的关系之一:

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;

添加该关系后,您应该有如下输出:

Output
+-------------------------+
| type(r) | r.name        |
+-------------------------+
| "ORDER" | "Lamniformes" |
+-------------------------+

1 row available after 2 ms, consumed after another 7 ms
Created 1 relationships, Set 1 properties

SUPERORDER接下来,根据 Sammy 和 Hammerhead 的分类总目(即 Selachimorpha)添加它们之间的关系。同样,为该关系赋予一个name属性,该属性设置为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;

您将再次收到指示关系类型的输出,以及用于描述关系的名称:

Output
+--------------------------------+
| type(r)      | r.name          |
+--------------------------------+
| "SUPERORDER" | "Selachimorpha" |
+--------------------------------+

1 row available after 2 ms, consumed after another 8 ms
Created 1 relationships, Set 1 properties

最后,在 Neo4j 中定义和存储所有这些节点和关系后,使用以下查询检查数据:

MATCH (a)-[r]->(b)
RETURN a.name,r,b.name
ORDER BY r;
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

输出包括FRIENDHammerhead、Sammy 和 Megalodon 之间定义的关系以及ORDER分类SUPERORDER关系。

当您完成向 Neo4j 数据库添加和探索节点和关系后,键入:exit命令以离开cypher-shell

结论

现在,您已在服务器上安装、配置并向 Neo4j 添加数据。您还可以选择将 Neo4j 配置为接受来自远程系统的连接,并使用 UFW 保护它。

如果您想了解有关使用 Neo4j 和cypher查询语言的更多信息,请查阅官方 Neo4j 文档

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北京橙溪 www.enwing.com

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值