Как установить и настроить базу данных Neo4j Graph в Ubuntu 22.04
На этой странице
- Предпосылки
- Шаг 1. Установите Neo4j
- Шаг 2. Проверка подключения
- Шаг 3. Настройка Neo4j для удаленного доступа
- Шаг 4. Настройка доступа к брандмауэру (UFW)
- Шаг 5. Используйте Neo4j
- Заключение
Neo4j — это база данных графов, используемая для создания отношений данных. Данные в традиционных базах данных сохраняются в табличной структуре. Графическая база данных записывает отношения между узлами данных. Каждый узел хранит ссылки на все остальные узлы, к которым он подключен. Традиционные базы данных не сохраняют данные о взаимосвязях напрямую, но они могут определять связи путем поиска в структурах данных с помощью индексации, которая является дорогостоящей и трудоемкой. Графическая база данных, такая как Neo4j, позволяет избежать всех этих накладных расходов и может кодировать и запрашивать сложные отношения.
Neo4j разработан компанией Neo Technology. Он написан на Java и Scala и доступен как в бесплатной версии сообщества, так и в корпоративной версии. Neo4j использует собственный язык запросов под названием Cypher, но запросы могут быть написаны и в других стилях.
В этом руководстве вы узнаете, как установить и настроить Neo4j на сервере Ubuntu 22.04.
Предпосылки
-
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
Обратите внимание, что версия включает компонент версии эпохи (1:) в соответствии с политикой Debian в отношении управления версиями.
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
Вам будет предложено ввести имя пользователя и пароль. Имя пользователя и пароль по умолчанию: 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.
Введите :exit
, чтобы выйти из оболочки.
> :exit Bye!
Шаг 3 — Настройте Neo4j для удаленного доступа
Для производственных сред вам может потребоваться подтвердить Neo4j, чтобы принимать соединения с удаленных хостов. По умолчанию Neo4j принимает подключения только от localhost
.
Мы можем настроить 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 в вашей системе, включая localhost. Если вы хотите ограничить Neo4j определенным IP-адресом, например, IP-адресом частной сети, укажите здесь IP-адрес, назначенный интерфейсу частной сети вашего сервера.
Вы также можете настроить Neo4j для использования интерфейсов IPv6. Как и в случае с IPv4, вы можете установить значение default_listen_address
для определенного адреса IPv6, который вы будете использовать для связи с Neo4j. Если вы хотите, чтобы Neo4j использовал только локальный адрес IPv6 для вашего сервера, укажите ::1
, который соответствует localhost с использованием нотации IPv6.
Если вы настроите Neo4j с адресом IPv6, вы не сможете напрямую подключиться к cypher-shell, используя адрес IPv6. Вместо этого вам нужно либо настроить DNS-имя, которое разрешается в адрес IPv6, либо добавить запись в файл /etc/hosts
удаленной системы, которая сопоставляет адрес с именем. Затем вы сможете использовать имя файла DNS или hosts для подключения к Neo4j с использованием IPv6 из вашей удаленной системы.
Например, сервер Neo4j с IPv6-адресом типа 2001:db8::1
потребует, чтобы удаленная подключающаяся система имела /etc/hosts
запись, как показано ниже.
2001:db8::1 your_hostname
Затем вы можете подключиться к серверу из удаленной системы, используя указанное вами имя, как показано ниже.
$ cypher-shell -a 'neo4j://your_hostname:7687'
Если вы запретите Neo4j использовать адрес локального хоста IPv6 ::1, вы сможете подключиться к нему локально на самом сервере Neo4j, используя предварительно настроенное имя ip6-localhost из вашего /etc/hosts
. файл, показанный ниже.
$ cypher-shell -a 'neo4j://ip6-localhost:7687'
Как только вы вызовете cypher-shell
с URI подключения, вам, как обычно, будет предложено ввести имя пользователя и пароль.
Шаг 4. Настройте доступ к брандмауэру (UFW)
После того, как вы включили удаленные подключения, вы можете использовать брандмауэр, чтобы ограничить Neo4j, чтобы ограничить подключения только от доверенных систем, к которым он может подключаться.
Neo4j создает два сетевых сокета, один на порту 7474 для встроенного интерфейса HTTP и основной протокол Bolt на порту 7687.
Ubuntu 22.04 по умолчанию использует Uncomplicated Firewall (UFW).
Настройте брандмауэр, чтобы разрешить доверенному удаленному хосту доступ к интерфейсу bolt
с использованием IPv4, используя следующую команду.
$ 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
Подключитесь к Neo4j с помощью инструмента cypher-shell
. Вам будет предложено ввести имя пользователя и пароль.
$ cypher-shell
Если вы настроили Neo4j для удаленного доступа, используйте следующую команду для подключения к Neo4j из удаленной системы.
$ cypher-shell -a 'neo4j://203.0.113.1:7687'
Здесь 203.0.113.1
— это IP-адрес сервера Neo4j.
Если вы используете IPv6, убедитесь, что у вас есть запись /etc/hosts
с именем, описанным в шаге 3. Затем подключитесь к серверу Neo4j следующим образом.
$ cypher-shell -a 'neo4j://your_hostname:7687'
Убедитесь, что your_hostname
соответствует IPv6-адресу ваших серверов Neo4j в файле /etc/hosts
удаленных систем.
Давайте добавим узел с именем Slite
и имена авторов в Neo4j. Следующая команда создаст узел типа 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
Теперь давайте создадим некоторые отношения.
Поскольку Питер и Крис работают в одном отделе и имеют те же свойства, что и узлы, мы создадим связь со столбцом имени.
> 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
Теперь давайте создадим еще одну связь между Сэмми и Питером, так как они работают над одним и тем же проектом.
> 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
Заключение
На этом мы завершаем наше руководство по установке и настройке Neo4j на сервере Ubuntu 22.04. Если у вас есть какие-либо вопросы, задайте их в комментариях ниже.