如何在 Ubuntu 22.04 上安装和配置 Neo4j 图形数据库如何在 Ubuntu 22.04 上安装和配置 Neo4j 图形数据库如何在 Ubuntu 22.04 上安装和配置 Neo4j 图形数据库如何在 Ubuntu 22.04 上安装和配置 Neo4j 图形数据库
  • 文章
  • 正则表达式
    • 工具
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容
发表 admin at 2025年2月28日
类别
  • 未分类
标签

如何在 Ubuntu 22.04 上安装和配置 Neo4j 图形数据库

在此页

  1. 先决条件
  2. 第 1 步 - 安装 Neo4j
  3. 第 2 步 - 测试连接
  4. 第 3 步 - 配置 Neo4j 以进行远程访问
  5. 第 4 步 - 配置防火墙访问 (UFW)
  6. 第 5 步 - 使用 Neo4j
  7. 结论

Neo4j 是一个用于创建数据关系的图形数据库。传统数据库中的数据保存在类似表的结构中。图形数据库记录数据节点之间的关系。每个节点都存储对其连接的所有其他节点的引用。传统数据库不直接保存关系数据,而是借助索引在数据结构中搜索来找出联系,这种方法既昂贵又费时。像 Neo4j 这样的图形数据库避免了所有这些开销,并且可以编码和查询复杂的关系。

Neo4j 由 Neo Technology 开发。它是用 Java 和 Scala 编写的,有免费的社区版和企业版。 Neo4j 使用自己的称为 Cypher 的查询语言,但可以用其他样式编写查询。

本教程将教您如何在 Ubuntu 22.04 服务器上安装和配置 Neo4j。

先决条件

  • 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
    

第 1 步 - 安装 Neo4j

安装 Neo4j 的第一步是添加 GPG 密钥。

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

将 Neo4j 存储库添加到您的系统 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

为避免升级到下一个主要版本的风险,您可以在上述命令中指定所需的主要和次要版本来代替 latest。

以下命令将添加 Neo4j 5.x 存储库,这意味着无论何时发布,您都不会升级到 6.x 版本。

$ 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

更新系统存储库列表。

$ sudo apt update

列出可供安装的 Neo4j 版本。

$ 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

安装 Neo4j 社区版。

$ sudo apt install neo4j

您可以使用以下命令安装特定版本。

$ sudo apt install neo4j=1:5.3.0

请注意,根据 Debian 的版本控制政策,该版本包含纪元版本组件 (1:)。

Neo4j 会自动安装所需的 JDK 版本。

启用 Neo4j 服务。

$ sudo systemctl enable neo4j

启动 Neo4j 服务。

$ sudo systemctl start neo4j

检查 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

第 2 步 - 测试连接

Neo4j 使用 Cypher Shell 来处理数据。

连接到 Cypher Shell。

$ cypher-shell

系统将提示您输入用户名和密码。默认的用户名和密码是 neo4j。系统将要求您选择一个新密码。

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

这确认已成功连接到 Neo4j DBMS。

输入 :exit 退出 shell。

> :exit

Bye!

第 3 步 - 配置 Neo4j 以进行远程访问

对于生产环境,您可能需要确认 Neo4j 接受来自远程主机的连接。默认情况下,Neo4j 只接受来自 localhost 的连接。

我们可以通过编辑 Neo4j 的配置文件来配置 Neo4j 以接受来自远程主机的连接。 Neo4j 将其设置存储在 /etc/neo4j/neo4j.conf 文件中。打开它进行编辑。

$ sudo nano /etc/neo4j/neo4j.conf

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

. . .
#*****************************************************************
# 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
. . .

通过按 Ctrl + X 并在出现提示时输入 Y 来保存文件。

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

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

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

例如,具有像 2001:db8::1 这样的 IPv6 地址的 Neo4j 服务器将要求远程连接系统具有 /etc/hosts入口如下图。

2001:db8::1 your_hostname

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

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

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

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

使用连接 URI 调用 cypher-shell 后,系统将像往常一样提示您输入用户名和密码。

第 4 步 - 配置防火墙访问 (UFW)

启用远程连接后,您可以使用防火墙来限制 Neo4j,以限制仅来自它可以连接到的受信任系统的连接。

Neo4j 创建两个网络套接字,一个在端口 7474 上用于内置 HTTP 接口,主要的螺栓协议在端口 7687 上。

Ubuntu 22.04 默认使用简单防火墙(UFW)。

使用以下命令配置防火墙以允许受信任的远程主机使用 IPv4 访问 bolt 接口。

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

用可信远程系统的 IP 地址代替 203.0.113.1 值。同样,您可以使用以下命令允许整个网络范围。

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

用实际网络代替 192.0.2.0/24 值。

要允许使用 IPv6 访问远程主机,您可以使用以下命令。

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

用您信任的系统 IPv6 地址代替 2001:DB8::1/128 值。

与 IPv4 一样,您可以使用以下命令允许一系列 IPv6 地址。

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

同样,用您信任的网络范围替换突出显示的 2001:DB8::/32 网络范围。

重新加载防火墙以应用更改。

$ sudo ufw reload

检查防火墙的状态。

$ 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

第 5 步 - 使用 Neo4j

使用 cypher-shell 工具连接到 Neo4j。系统将提示您输入用户名和密码。

$ cypher-shell

如果您为远程访问配置了 Neo4j,则使用以下命令从远程系统连接到 Neo4j。

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

这里 203.0.113.1 是 Neo4j 服务器的 IP 地址。

如果您使用的是 IPv6,请确保您有一个名称在步骤 3 中描述的 /etc/hosts 条目。然后按如下方式连接到 Neo4j 服务器。

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

确保 your_hostname 映射到远程系统 /etc/hosts 文件中的 Neo4j 服务器 IPv6 地址。

让我们向 Neo4j 添加一个名为 Slite 的节点和作者姓名。以下命令将创建一个类型为 Slite 的节点,名称为 Navjot Singh。

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

您将获得以下输出。

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

接下来,我们将添加更多员工,并使用名为 COLLEAGUE 的关系将他们关联起来。您可以使用任意命名的关系链接节点。

再添加三名员工并使用 COLLEAGUE 关系链接他们。

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

您将获得类似的输出。

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

现在,让我们创建一些关系。

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

> 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

现在,让我们在 Sammy 和 Peter 之间创建另一个连接,因为他们在同一个项目上工作。

> 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

让我们使用以下查询显示所有这些数据。

> 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

结论

我们关于在 Ubuntu 22.04 服务器上安装和配置 Neo4j 的教程到此结束。如果您有任何问题,请在下面的评论中发表。

©2015-2025 艾丽卡 support@alaica.com