Поиск по сайту:

Как установить и настроить базу данных Neo4j Graph в Ubuntu 22.04


На этой странице

  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, но запросы могут быть написаны и в других стилях.

В этом руководстве вы узнаете, как установить и настроить 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. Если у вас есть какие-либо вопросы, задайте их в комментариях ниже.