Database
 sql >> Base de Dados >  >> RDS >> Database

Como instalar o Neo4j no Ubuntu 20.04

Introdução


Neste tutorial, examinaremos o que é o Neo4j, para que é usado e como é implementado. Também instalaremos e configuraremos a instalação em um servidor Ubuntu 20.04. Neo4j é um banco de dados gráfico usado para criar relacionamentos de dados. Outros exemplos de bancos de dados gráficos incluem:
  • ArangoDB
  • Grakn Core
  • Microsoft SQL Server 2017
  • OrientDB
  • RedisGraph

O que é Neo4j


O Neo4j conecta os dados à medida que são armazenados, permitindo-nos executar consultas que nunca conhecíamos ou pensávamos antes. Simplificando, o Neo4j registra o relacionamento entre os nós de dados, enquanto os bancos de dados relacionais convencionais usam colunas e linhas para armazenar dados estruturados. Como cada nó armazena referências a todos os outros nós aos quais está conectado, o Neo4j pode codificar e consultar relacionamentos complexos com sobrecarga mínima.

A Neo Technology é a criadora e desenvolvedora do software de código aberto Neo4j. A empresa o desenvolve desde 2003. Ele é escrito em Java e Scala, e o código-fonte está disponível gratuitamente no GitHub. A partir de 2015, é considerado o sistema de gerenciamento de banco de dados gráfico mais utilizado atualmente. O Neo4j emprega sua própria linguagem de consulta chamada Cypher, mas as consultas também podem ser escritas em outros estilos, por exemplo, por meio da API Java.

Pré-requisitos


Para esta instalação, o software requer as seguintes configurações de linha de base.
  • 8 GB de RAM e um servidor de quatro núcleos. No mínimo, o uso recomendado é de 1 GB de RAM e um servidor de núcleo único.
  • Ubuntu 20.04 OS
  • Todos os comandos são executados como root. Se você for um usuário comum, os comandos devem ser precedidos pelo comando sudo.

Instalação do Neo4j

Adicionar repositório


O Ubuntu não contém oficialmente o Neo4j no repositório de pacotes padrão. Adicionaremos a fonte do pacote apontando para o local do repositório do Neo4j, adicionaremos a chave GPG do Neo4j para verificação e instalaremos o próprio Neo4j.

Começamos atualizando a lista de pacotes e os próprios pacotes.
root@host:~# apt update && apt -y upgrade

Adicionar software adicional


Nesta etapa, instalaremos um pacote adicional necessário para conexões HTTPS. Este aplicativo pode já estar instalado por padrão no sistema, mas ainda precisa ser atualizado.
root@host:~# apt install apt-transport-https ca-certificates curl software-properties-common -y

O apt-transport-https pacote habilita o uso de https através do gerenciador de pacotes usando o libapt-pkg biblioteca. Isso mantém a instalação segura.

Verificar chave de segurança


Agora adicionamos a chave de segurança oficial para o repositório de pacotes Neo4j. Esta chave verifica e verifica se o que você está instalando é do repositório oficial.
 root@host:~# curl -fsSL https://debian.neo4j.com/neotechnology.gpg.key | apt-key add -
 OK
 root@host:~#  

Adicionar repositório


Adicione o repositório oficial do Neo4j à lista de gerenciadores de pacotes.
root@host:~# add-apt-repository "deb https://debian.neo4j.com stable 4.1"

Instale o Neo4j


Ao instalar o Neo4j e todas as suas dependências, é essencial observar que a instalação nos solicitará a instalação de pacotes Java para trabalhar com o Neo4j. Durante a instalação, pressione Y. para aceitar esta instalação de software. Se você tiver o Java instalado, o instalador entenderá e pulará esta etapa.
 root@host:~# apt install neo4j -y
 Reading package lists... Done
 Building dependency tree       
 Reading state information... Done
 The following package was automatically installed and is no longer required:
   libfprint-2-tod1
 Use 'sudo apt autoremove' to remove it.
 The following additional packages will be installed:
   cypher-shell
 The following NEW packages will be installed:
   cypher-shell neo4j
 0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
 Need to get 116 MB of archives.
 After this operation, 131 MB of additional disk space will be used.
 Get:1 https://debian.neo4j.com stable/4.1 amd64 cypher-shell all 4.1.3 [27,1 MB]
 Get:2 https://debian.neo4j.com stable/4.1 amd64 neo4j all 1:4.1.5 [88,4 MB]
 Fetched 116 MB in 10s (11,1 MB/s)                                              
 Preconfiguring packages ...
 Selecting previously unselected package cypher-shell.
 (Reading database ... 163626 files and directories currently installed.)
 Preparing to unpack .../cypher-shell_4.1.3_all.deb ...
 Unpacking cypher-shell (4.1.3) ...
 Selecting previously unselected package neo4j.
 Preparing to unpack .../neo4j_1%3a4.1.5_all.deb ...
 Unpacking neo4j (1:4.1.5) ...
 Setting up cypher-shell (4.1.3) ...
 Setting up neo4j (1:4.1.5) ...
 Processing triggers for man-db (2.9.1-1) ...
 Processing triggers for systemd (245.4-4ubuntu3.3) ...
 root@host:~#  

Iniciar o serviço Neo4j


Uma vez instalado, precisamos habilitá-lo como um serviço neo4j.service.
 root@host:~# systemctl enable neo4j.service
 Synchronizing state of neo4j.service with SysV service script with /lib/systemd/systemd-sysv-install.
 Executing: /lib/systemd/systemd-sysv-install enable neo4j
 Created symlink /etc/systemd/system/multi-user.target.wants/neo4j.service → /lib/systemd/system/neo4j.service.
 root@host:~#  

Verifique o status do Neo4j


Em seguida, verificamos se tudo está funcionando conforme o esperado.
 root@host:~# systemctl status neo4j.service
  neo4j.service - Neo4j Graph Database
      Loaded: loaded (/lib/systemd/system/neo4j.service; enabled; vendor preset:>
      Active: active (running) since Wed 2020-12-23 20:04:44 +03; 2min 4s ago
    Main PID: 4827 (java)
       Tasks: 52 (limit: 9489)
      Memory: 447.9M
      CGroup: /system.slice/neo4j.service
              └─4827 /usr/bin/java -cp /var/lib/neo4j/plugins:/etc/neo4j:/usr/sh>
 сне 23 20:04:46 host neo4j[4827]: 2020-12-23 17:04:46.101+0000 INFO  ======== N>
 сне 23 20:04:47 host neo4j[4827]: 2020-12-23 17:04:47.073+0000 INFO  Initializi>
 сне 23 20:04:47 host neo4j[4827]: 2020-12-23 17:04:47.077+0000 INFO  Setting up>
 сне 23 20:04:47 host neo4j[4827]: 2020-12-23 17:04:47.077+0000 INFO  Creating n>
 сне 23 20:04:47 host neo4j[4827]: 2020-12-23 17:04:47.083+0000 INFO  Setting ve>
 сне 23 20:04:47 host neo4j[4827]: 2020-12-23 17:04:47.085+0000 INFO  After init>
 сне 23 20:04:47 host neo4j[4827]: 2020-12-23 17:04:47.088+0000 INFO  Performing>
 сне 23 20:04:47 host neo4j[4827]: 2020-12-23 17:04:47.197+0000 INFO  Bolt enabl>
 сне 23 20:04:47 host neo4j[4827]: 2020-12-23 17:04:47.843+0000 INFO  Remote int>
 сне 23 20:04:47 host neo4j[4827]: 2020-12-23 17:04:47.844+0000 INFO  Started.
 lines 1-19/19 (END)
 To exit this screen, press Ctrl + C.
 It is important to have the following parameters:
 Loaded: loaded (/lib/systemd/system/neo4j.service; enabled; vendor preset:>
  Active: active (running) since Wed 2020-12-23 20:04:44 +03; 2min 4s ago 

Testar conexão de banco de dados


Como instalamos o Neo4j e o iniciamos como um serviço, agora vamos testar a conexão com o banco de dados e configurar o usuário admin.
Observação:Estamos usando a versão gratuita do Community Edition Neo4j. Ele suporta o trabalho simultâneo com o mesmo banco de dados, mas não inclui a atribuição de funções e permissões aos usuários.

Trabalhando com o Neo4j


Para interagir com o banco de dados, lançaremos o utilitário interno chamado cypher-shell para trabalhar com o Neo4j. Quando o executamos pela primeira vez, será solicitado que insira um usuário e uma senha. Por padrão, o nome de usuário é neo4j e a senha é neo4j. Após o primeiro login, você será solicitado a alterar a senha para uma de sua escolha.
 oot@host:~# cypher-shell
 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>  

Para sair, use o comando exit.
 neo4j@neo4j> exit
 Bye!
 root@host:~#  

Adicionar nós 


Vamos configurar alguns nós de amostra e definir relacionamentos entre eles. Conectar usando Cypher
 root@host:~# cypher-shell
 username: neo4j
 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>  

Em seguida, vamos adicionar um nó chamado Liquidweb e os nomes dos colegas que trabalham para esta empresa sob o nome de Margaret. Podemos fazer isso usando o comando CREATE, e a sintaxe será a seguinte.
 neo4j@neo4j> CREATE (:Liquidweb {name: 'Margaret'});
 0 rows available after 36 ms, consumed after another 0 ms
 Added 1 nodes, Set 1 properties, Added 1 labels
 neo4j@neo4j>  

Adicionar usuários


Vamos adicionar mais alguns colegas e vinculá-los à empresa para a qual trabalham, a Liquidweb. Vamos nos conectar usando o comando FRIEND.
 neo4j@neo4j> CREATE (:Liquidweb {name: 'John'})-[:FRIEND]->
              (:Liquidweb {name: 'Peter'})-[:FRIEND]->
              (:Liquidweb {name: 'Chris'});
 0 rows available after 38 ms, consumed after another 0 ms
 Added 3 nodes, Created 2 relationships, Set 3 properties, Added 3 labels
 neo4j@neo4j>  

Criar relacionamentos


Como Peter e Chris trabalham no mesmo departamento e possuem as mesmas propriedades dos nós, criaremos um relacionamento com a coluna name.
 neo4j@neo4j> MATCH (a:Liquidweb),(b:Liquidweb)
              WHERE a.name = 'Peter' AND b.name = 'Chris'
              CREATE (a)-[r:DEPARTMENT { name: 'Developers' }]->(b)
              RETURN type(r), r.name;
 +------------------------+
 | type(r) | r.name       |
 +------------------------+
 | "DEPARTMENT" | "Developers" |
 +------------------------+
 1 row available after 105 ms, consumed after another 10 ms
 Created 1 relationships, Set 1 properties
 neo4j@neo4j> 
  • MATCH - Indica a correspondência dos nós. Neste caso, dentro de uma empresa Liquidweb
  • ONDE - entre valores
  • CRIAR - criar e adicionar
  • RETURN - Retornar à base.

Agora crie uma conexão entre John e Chris, embora estejam em departamentos diferentes, mas estejam trabalhando no mesmo projeto.neo4j@neo4j> MATCH (a:Liquidweb),(b:Liquidweb)
              WHERE a.name = 'John' AND b.name = 'Chris'
              CREATE (a)-[r:PROJECT { name: 'Cool Project' }]->(b)
              RETURN type(r), r.name;
 +----------------------------+
 | type(r)   | r.name         |
 +----------------------------+
 | "PROJECT" | "Cool Project" |
 +----------------------------+
 1 row available after 48 ms, consumed after another 5 ms
 Created 1 relationships, Set 1 properties
 neo4j@neo4j>  

Informações de exibição


Agora vamos exibir todos esses dados e seus relacionamentos usando a seguinte consulta.
 neo4j@neo4j> Match (n)-[r]->(m)
              Return n,r,m;
 +--------------------------------------------------------------------------------------------------+
 | n                            | r                                  | m                            |
 +--------------------------------------------------------------------------------------------------+
 | (:Liquidweb {name: "John"})  | [:FRIEND]                          | (:Liquidweb {name: "Peter"}) |
 | (:Liquidweb {name: "John"})  | [:PROJECT {name: "Cool Project"}]  | (:Liquidweb {name: "Chris"})  |
 | (:Liquidweb {name: "Peter"}) | [:DEPARTMENT {name: "Developers"}] | (:Liquidweb {name: "Chris"})  |
 | (:Liquidweb {name: "Peter"}) | [:FRIEND]                          | (:Liquidweb {name: "Chris"})  |
 +--------------------------------------------------------------------------------------------------+
 4 rows available after 17 ms, consumed after another 2 ms
 neo4j@neo4j>  

Recebemos os dados de saída com os seguintes relacionamentos FRIEND, que mostram o relacionamento e os seguintes relacionamentos de dados entre DEPARTMENT e PROJECT.

Para sair do shell cypher, execute o comando exit.
 neo4j@neo4j> :exit
 Bye!
 root@host:~#  

Configure uma conexão remota segura com o Neo4j


Nem sempre poderemos nos conectar ao banco de dados a partir do próprio servidor. Se quisermos configurar o aplicativo para usar o Neo4j, precisaremos configurá-lo para conectar-se com segurança a outros servidores. Além disso, devemos configurar o firewall para restringir quais servidores podem se conectar ao Neo4j.

Por padrão, o Neo4j se conecta via localhost (127.0.0.1 - localhost - destinado a testar aplicativos sem trabalhar com outros servidores). Além disso, o trabalho do Neo4j do localhost não será aberto para acesso público à Internet. Somente usuários com acesso à rede local poderão se conectar ao Neo4j.

Configurar o Neo4j


Para que o Neo4j se conecte a outros servidores, precisamos alterar as configurações do arquivo de configuração /etc/neo4j/neo4j.conf . Usaremos o editor nano para esta tarefa. Lembre-se, se você não for root, use o comando sudo.
 root@host:~# nano /etc/neo4j/neo4j.conf
 root@host:~#  

Encontre a linha na seção Conector de rede
#dbms.default_listen_address=0.0.0.0

Remova o comentário desta linha removendo o símbolo # e pressione Ctrl + S e Ctrl + X para salvar e sair do editor.

O valor 0.0.0.0 vinculará o Neo4j a todas as interfaces de rede IPv4 disponíveis. Você pode colocar um endereço IP específico ou rede que seus servidores usam como caminho de dados. Você também pode configurá-lo para usar interfaces IPv6, mas há muitas nuances nessa configuração. Recomendamos que você leia a documentação no site oficial.

Configurar firewall para conexões remotas


Para configurar o software Neo4j para conexões remotas, devemos configurar o firewall. Restringimos o acesso para que apenas sistemas confiáveis ​​possam se conectar a ele. Neste caso, usaremos o firewall padrão do Ubuntu, UFW.

Em seguida, devemos verificar se o firewall está ativado. Se não estiver ativo, temos que habilitá-lo.
 root@host:~# ufw enable
 Firewall is active and enabled on system startup
 root@host:~#  

O Neo4j cria dois soquetes de rede ao instalar o software. Um na porta 7474 para a interface HTTP e outro para o protocolo primário na porta 7687. O Neo4j recomenda usar a porta 7687. O comando para abrir uma porta será semelhante ao seguinte comando usado para permitir um endereço IPv4.
 ufw allow from YOUR_IP to any port 7687 proto tcp
 YOUR_IP - Use an IP here to provide access permission. If you want to allow access to the entire local network, use the following rule:
 ufw allow from 192.168.50.0/16 to any port 7687 proto tcp 

Digite seu intervalo de rede específico para abrir a porta. Para um endereço IPv6, o comando ficará assim.
ufw allow from fe80::1006:f7a3:b9cc:b0cb to any port 7687 proto tcp

Os IPs acima são usados ​​como exemplo. Substitua seus valores e adicione uma regra.
 root@host:~# ufw allow from 192.168.50.189 to any port 7687 proto tcp
 Rule added
 root@host:~#  

Reiniciar o firewall


Certifique-se de reiniciar o firewall.
 root@host:~# ufw reload
 Firewall reloaded
 root@host:~#  

Verificar conexão


Agora vamos verificar se está funcionando corretamente.
 root@host:~# ufw status
 Status: active
 To                         Action      From
 --                         ------      ----
 7687/tcp                   ALLOW       192.168.50.189            
 root@host:~#  

E com isso, temos um servidor Neo4j funcionando, pronto para funcionar e configurado para permitir acesso na porta 7687.

Conclusão


Conhecemos o banco de dados gráfico Neo4j, aprendemos como funciona e porque é necessário. Configure um gerenciador de pacotes e instale o Neo4j. Em seguida, verificamos a funcionalidade, entramos nela e alteramos a senha. Tentamos comandos básicos sobre como criar uma tabela, fazer relacionamentos e configurar nós. No final, configuramos a conexão com os IPs que precisávamos e configuramos um firewall para segurança.