Como instalar e configurar o banco de dados gráfico Neo4j no Ubuntu 22.04
Nesta página
- Pré-requisitos
- Etapa 1 - Instalar o Neo4j
- Etapa 2 - Conexão de teste
- Etapa 3 - Configurar o Neo4j para Acesso Remoto
- Etapa 4 - Configurar o acesso do firewall (UFW)
- Etapa 5 - Use o Neo4j
- Conclusão
Neo4j é um banco de dados gráfico usado para criar relacionamentos de dados. Os dados dentro dos bancos de dados tradicionais são salvos em uma estrutura semelhante a uma tabela. Um banco de dados gráfico registra relacionamentos entre nós de dados. Cada nó armazena referências a todos os outros nós aos quais está conectado. Bancos de dados tradicionais não salvam dados de relacionamento diretamente, mas podem descobrir conexões pesquisando em estruturas de dados com a ajuda de indexação que é cara e demorada. Um banco de dados gráfico como o Neo4j evita toda essa sobrecarga e pode codificar e consultar relacionamentos complexos.
Neo4j é desenvolvido pela Neo Technology. Ele é escrito em Java e Scala e está disponível em uma versão comunitária gratuita e uma versão corporativa. O Neo4j usa sua própria linguagem de consulta chamada Cypher, mas as consultas podem ser escritas em outros estilos.
Este tutorial ensinará como instalar e configurar o Neo4j em um servidor Ubuntu 22.04.
Pré-requisitos
-
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
Passo 1 - Instale o Neo4j
O primeiro passo para instalar o Neo4j é adicionar a chave GPG.
$ curl -fsSL https://debian.neo4j.com/neotechnology.gpg.key | sudo gpg --dearmor -o /usr/share/keyrings/neo4j.gpg
Adicione o repositório Neo4j ao diretório de fontes APTs do seu sistema.
$ 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
Para evitar o risco de atualizar para a próxima versão principal, você pode especificar as versões principal e secundária necessárias no lugar de latest
no comando acima.
O comando a seguir adicionará o repositório Neo4j 5.x, o que significa que você não atualizará para a versão 6.x sempre que for lançada.
$ 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
Atualize a lista de repositórios do sistema.
$ sudo apt update
Liste as versões do Neo4j disponíveis para instalação.
$ 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
Instale a edição Neo4j Community.
$ sudo apt install neo4j
Você pode instalar uma versão específica usando o seguinte comando.
$ sudo apt install neo4j=1:5.3.0
Observe que a versão inclui um componente de versão de época (1:), de acordo com a política Debian sobre versionamento.
O Neo4j instalará automaticamente a versão necessária do JDK com ele.
Habilite o serviço Neo4j.
$ sudo systemctl enable neo4j
Inicie o serviço Neo4j.
$ sudo systemctl start neo4j
Verifique o status do serviço 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
Passo 2 - Testar Conexão
Neo4j usa o Cypher Shell para trabalhar com dados.
Conecte-se ao Cypher Shell.
$ cypher-shell
Você será solicitado a fornecer um nome de usuário e uma senha. O nome de usuário e a senha padrão são neo4j
. Você será solicitado a escolher uma nova senha.
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. >
Isso confirma a conexão bem-sucedida com o Neo4j DBMS.
Digite :exit
para sair do shell.
> :exit Bye!
Passo 3 - Configurar o Neo4j para Acesso Remoto
Para ambientes de produção, pode ser necessário confirmar que o Neo4j aceita conexões de hosts remotos. Por padrão, o Neo4j aceita conexões apenas de localhost
.
Podemos configurar o Neo4j para aceitar conexões de hosts remotos editando seu arquivo de configuração. O Neo4j armazena suas configurações no arquivo /etc/neo4j/neo4j.conf
. Abra-o para edição.
$ sudo nano /etc/neo4j/neo4j.conf
Encontre a linha comentada #dbms.default_listen_address=0.0.0.0
e remova o comentário removendo o hash inicial.
. . . #***************************************************************** # 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 . . .
Salve o arquivo pressionando Ctrl + X e digitando Y quando solicitado.
Por padrão, o valor 0.0.0.0
vinculará o Neo4j a todas as interfaces IPv4 disponíveis em seu sistema, incluindo localhost. Se você quiser limitar o Neo4j a um endereço IP específico, por exemplo, um IP de rede privada, especifique aqui o endereço IP atribuído à interface de rede privada do seu servidor.
Você também pode configurar o Neo4j para usar interfaces IPv6. Assim como no IPv4, você pode definir o valor default_listen_address
para um endereço IPv6 específico que você usará para se comunicar com o Neo4j. Se você deseja limitar o Neo4j para usar apenas o endereço IPv6 local para o seu servidor, especifique ::1
, que corresponde ao localhost usando a notação IPv6.
Se você configurar o Neo4j com um endereço IPv6, não poderá se conectar com o cypher-shell usando o endereço IPv6 diretamente. Em vez disso, você precisa configurar um nome DNS que resolva o endereço IPv6 ou adicionar uma entrada no arquivo /etc/hosts
do sistema remoto que mapeia o endereço para um nome. Então você poderá usar o nome do arquivo DNS ou hosts para se conectar ao Neo4j usando IPv6 do seu sistema remoto.
Por exemplo, um servidor Neo4j com um endereço IPv6 como 2001:db8::1
exigiria que o sistema de conexão remota tivesse um /etc/hosts
entrada como mostrado abaixo.
2001:db8::1 your_hostname
Você pode então se conectar ao servidor a partir do sistema remoto usando o nome que especificou conforme mostrado abaixo.
$ cypher-shell -a 'neo4j://your_hostname:7687'
Se você restringir o Neo4j para usar o endereço de host local IPv6 de ::1, poderá se conectar a ele localmente no próprio servidor Neo4j usando o nome ip6-localhost pré-configurado de seu /etc/hosts
arquivo mostrado abaixo.
$ cypher-shell -a 'neo4j://ip6-localhost:7687'
Depois de invocar cypher-shell
com o URI de conexão, você será solicitado a fornecer seu nome de usuário e senha como de costume.
Etapa 4 - Configurar o acesso do firewall (UFW)
Depois de ativar as conexões remotas, você pode usar o firewall para restringir o Neo4j para limitar as conexões apenas de sistemas confiáveis aos quais ele pode se conectar.
O Neo4j cria dois soquetes de rede, um na porta 7474 para a interface HTTP integrada e o protocolo bolt principal na porta 7687.
O Ubuntu 22.04 usa o Uncomplicated Firewall (UFW) por padrão.
Configure o firewall para permitir que um host remoto confiável acesse a interface bolt
usando IPv4 usando o seguinte comando.
$ sudo ufw allow from 203.0.113.1 to any port 7687 proto tcp
Substitua o endereço IP do sistema remoto confiável no lugar do valor 203.0.113.1
. Da mesma forma, você pode permitir um intervalo de rede inteiro usando o seguinte comando.
$ sudo ufw allow from 192.0.2.0/24 to any port 7687 proto tcp
Substitua a rede real no lugar do valor 192.0.2.0/24
.
Para permitir acesso a um host remoto usando IPv6, você pode usar o seguinte comando.
$ sudo ufw allow from 2001:DB8::1/128 to any port 7687 proto tcp
Substitua o endereço IPv6 de seu sistema confiável no lugar do valor 2001:DB8::1/128
.
Assim como no IPv4, você pode permitir um intervalo de endereços IPv6 usando o seguinte comando.
$ ufw allow from 192.0.2.0/24 to any port 7687 proto tcp
Novamente, substitua seu intervalo de rede confiável no lugar do intervalo de rede 2001:DB8::/32 realçado.
Recarregue o firewall para aplicar as alterações.
$ sudo ufw reload
Verifique o status do firewall.
$ 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
Passo 5 - Use o Neo4j
Conecte-se ao Neo4j usando a ferramenta cypher-shell
. Você será solicitado a fornecer seu nome de usuário e senha.
$ cypher-shell
Se você configurou o Neo4j para acesso remoto, use o seguinte comando para conectar-se ao Neo4j a partir do sistema remoto.
$ cypher-shell -a 'neo4j://203.0.113.1:7687'
Aqui 203.0.113.1
é o endereço IP do servidor Neo4j.
Se você estiver usando IPv6, certifique-se de ter uma entrada /etc/hosts
com um nome descrito na etapa 3. Em seguida, conecte-se ao servidor Neo4j da seguinte maneira.
$ cypher-shell -a 'neo4j://your_hostname:7687'
Certifique-se de que your_hostname
seja mapeado para o endereço IPv6 de seus servidores Neo4j no arquivo /etc/hosts
de sistemas remotos.
Vamos adicionar um nó chamado Slite
e os nomes dos autores ao Neo4j. O comando a seguir criará um nó do tipo Slite
, com um nome Navjot Singh
.
> CREATE (:Slite {name: 'Navjot Singh'});
Você obterá a seguinte saída.
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
Em seguida, adicionaremos mais funcionários e os relacionaremos usando um relacionamento chamado COLLEAGUE
. Você pode vincular nós com relacionamentos nomeados arbitrariamente.
Adicione mais três funcionários e vincule-os usando o relacionamento COLLEAGUE
.
> CREATE (:Slite {name: 'Sammy'})-[:COLLEAGUE]-> (:Slite {name: 'Peter Jack'})-[:COLLEAGUE]-> (:Slite {name: 'Chris Rock'});
Você obterá uma saída semelhante.
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
Agora, vamos criar alguns relacionamentos.
Como Peter e Chris trabalham no mesmo departamento e têm as mesmas propriedades como nós, criaremos um relacionamento com a coluna de nome.
> 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
Agora, vamos criar outra conexão entre Sammy e Peter, já que eles estão trabalhando no mesmo projeto.
> 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
Vamos exibir todos esses dados usando a seguinte consulta.
> 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
Conclusão
Isso conclui nosso tutorial sobre instalação e configuração do Neo4j em um servidor Ubuntu 22.04. Se você tiver alguma dúvida, poste-a nos comentários abaixo.