sql >> Base de Datos >  >> RDS >> Database

Cómo instalar Neo4j en Ubuntu 20.04

Introducción

En este tutorial, examinaremos qué es Neo4j, para qué se usa y cómo se implementa. También instalaremos y configuraremos la instalación en un servidor Ubuntu 20.04. Neo4j es una base de datos gráfica utilizada para crear relaciones de datos. Otros ejemplos de bases de datos gráficas incluyen:

  • ArangoDB
  • Núcleo Grakn
  • Microsoft SQL Server 2017
  • OrientDB
  • RedisGraph

Qué es Neo4j

Neo4j conecta los datos a medida que se almacenan, lo que nos permite ejecutar consultas que nunca antes sabíamos o en las que habíamos pensado. En pocas palabras, Neo4j registra la relación entre los nodos de datos, mientras que las bases de datos relacionales convencionales usan columnas y filas para almacenar datos estructurados. Dado que cada nodo almacena referencias a todos los demás nodos a los que está conectado, Neo4j puede codificar y consultar relaciones complejas con una sobrecarga mínima.

Neo Technology es el creador y desarrollador del software de código abierto Neo4j. La empresa lo ha estado desarrollando desde 2003. Está escrito en Java y Scala, y el código fuente está disponible gratuitamente en GitHub. A partir de 2015, se considera el sistema de gestión de bases de datos gráficas más utilizado en la actualidad. Neo4j emplea su propio lenguaje de consulta llamado Cypher, pero las consultas también se pueden escribir en otros estilos, por ejemplo, a través de la API de Java.

Requisitos

Para esta instalación, el software requiere la siguiente configuración básica.

  • 8 GB de RAM y un servidor de cuatro núcleos. Como mínimo, el uso recomendado es 1 GB de RAM y un servidor de un solo núcleo.
  • SO Ubuntu 20.04
  • Todos los comandos se ejecutan como root. Si es un usuario normal, los comandos deben estar precedidos por el comando sudo.

Instalación de Neo4j

Agregar repositorio

Ubuntu no contiene oficialmente Neo4j en el repositorio de paquetes estándar. Agregaremos la fuente del paquete que apunta a la ubicación del repositorio de Neo4j, luego agregaremos la clave GPG de Neo4j para verificar, luego instalaremos Neo4j.

Empezamos actualizando la lista de paquetes y los propios paquetes.

root@host:~# apt update && apt -y upgrade

Agregar software adicional

En este paso, instalaremos un paquete adicional que se necesita para las conexiones HTTPS. Es posible que esta aplicación ya esté instalada de manera predeterminada en el sistema, pero aún deben actualizarse.

root@host:~# apt install apt-transport-https ca-certificates curl software-properties-common -y

El apt-transporte-https El paquete habilita el uso de https a través del administrador de paquetes usando libapt-pkg biblioteca. Esto mantiene la instalación segura.

Verificar clave de seguridad

Ahora agregamos la clave de seguridad oficial para el repositorio de paquetes de Neo4j. Esta clave verifica y verifica que lo que está instalando es del repositorio oficial.

 root@host:~# curl -fsSL https://debian.neo4j.com/neotechnology.gpg.key | apt-key add -
 OK
 root@host:~#  

Agregar repositorio

Agregue el repositorio oficial de Neo4j a la lista de administradores de paquetes.

root@host:~# add-apt-repository "deb https://debian.neo4j.com stable 4.1"

Instalar Neo4j

A la hora de instalar Neo4j y todas sus dependencias, es fundamental tener en cuenta que la instalación nos pedirá que instalemos paquetes de Java para trabajar con Neo4j. Durante la instalación, presione Y. para aceptar la instalación de este software. Si tiene Java instalado, el instalador comprenderá y omitirá este paso.

 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 el Servicio Neo4j

Una vez que lo tengamos instalado, debemos habilitarlo como un servicio de 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:~#  

Comprobar el estado de Neo4j

A continuación, verificamos que todo funciona como se esperaba.

 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 

Conexión de base de datos de prueba

Como instalamos Neo4j y lo iniciamos como un servicio, ahora probaremos la conexión de la base de datos y configuraremos el usuario administrador.

Nota:estamos utilizando la versión gratuita Community Edition Neo4j. Admite el trabajo simultáneo con la misma base de datos, pero no incluye la asignación de roles y permisos a los usuarios.

Trabajar con Neo4j

Para interactuar con la base de datos, lanzaremos la utilidad interna llamada cypher-shell para trabajar con Neo4j. Cuando lo ejecutamos por primera vez, se nos pedirá que ingresemos un usuario y una contraseña. De forma predeterminada, el nombre de usuario es neo4j y la contraseña es neo4j. Después del primer inicio de sesión, se le pedirá que cambie la contraseña por una de su elección.

 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 salir, utilice el comando de salida.

 neo4j@neo4j> exit
 Bye!
 root@host:~#  

Añadir nodos 

Configuremos algunos nodos de muestra y definamos las relaciones entre ellos. Conéctate 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>  

A continuación, agreguemos un nodo llamado Liquidweb y los nombres de los colegas que trabajan para esta empresa con el nombre de Margaret. Podemos hacer esto usando el comando CREAR, y la sintaxis será la siguiente.

 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>  

Agregar usuarios

Agreguemos algunos colegas más y vinculémoslos a la empresa para la que trabajan, Liquidweb. Nos conectaremos usando el comando AMIGO.

 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>  

Crear relaciones

Dado que Peter y Chris trabajan en el mismo departamento y tienen las mismas propiedades que los nodos, crearemos una relación con la columna de nombre.

 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> 
  • COINCIDIR - Esto indica la correspondencia de los nodos. En este caso, dentro de una empresa Liquidweb
  • DONDE - entre valores
  • CREAR:crear y agregar
  • VOLVER - Regresa a la base.

Ahora cree una conexión entre John y Chris, aunque están en diferentes departamentos, pero están trabajando en el mismo proyecto.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>  

Mostrar información

Ahora mostraremos todos estos datos y sus relaciones usando la siguiente 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>  

Recibimos los datos de salida con las siguientes relaciones de AMIGOS, que muestran la relación y las siguientes relaciones de datos entre DEPARTAMENTO y PROYECTO.

Para salir del shell de cifrado, ejecute el comando de salida.

 neo4j@neo4j> :exit
 Bye!
 root@host:~#  

Configurar una conexión remota segura a Neo4j

No siempre podremos conectarnos a la base de datos desde el propio servidor. Si queremos configurar la aplicación para usar Neo4j, necesitaremos configurarla para conectarse de forma segura a otros servidores. Además, debemos configurar el firewall para restringir qué servidores pueden conectarse a Neo4j.

De forma predeterminada, Neo4j se conecta a través de localhost (127.0.0.1 - localhost - diseñado para probar aplicaciones sin trabajar con otros servidores). Además, el trabajo de Neo4j de localhost no estará abierto para el acceso público a Internet. Solo los usuarios con acceso a la red local podrán conectarse a Neo4j.

Configurar Neo4j

Para que Neo4j se conecte a otros servidores, debemos cambiar la configuración del archivo de configuración /etc/neo4j/neo4j.conf . Usaremos el editor nano para esta tarea. Recuerda, si no eres root, usa el comando sudo.

 root@host:~# nano /etc/neo4j/neo4j.conf
 root@host:~#  

Encuentra la línea en la sección Conector de red

#dbms.default_listen_address=0.0.0.0

Descomente esta línea eliminando el símbolo # y luego presione Ctrl + S y Ctrl + X para guardar y salir del editor.

El valor 0.0.0.0 vinculará Neo4j a todas las interfaces de red IPv4 disponibles. Puede poner una dirección IP o red específica que sus servidores usen como ruta de datos. También puede configurarlo para usar interfaces IPv6, pero hay muchos matices en esa configuración. Le recomendamos que lea la documentación en el sitio web oficial.

Configurar cortafuegos para conexiones remotas

Para configurar el software Neo4j para conexiones remotas, debemos configurar el firewall. Restringimos el acceso para que solo los sistemas confiables puedan conectarse. En este caso, usaremos el firewall predeterminado de Ubuntu, UFW.

A continuación, debemos comprobar si el cortafuegos está activado. Si no está activo, tenemos que habilitarlo.

 root@host:~# ufw enable
 Firewall is active and enabled on system startup
 root@host:~#  

Neo4j crea dos sockets de red al instalar el software. Uno en el puerto 7474 para la interfaz HTTP y otro para el protocolo principal en el puerto 7687. Neo4j recomienda usar el puerto 7687. El comando para abrir un puerto será similar al siguiente comando que se usa para permitir una dirección 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 

Ingrese su rango de red específico para abrir el puerto. Para una dirección IPv6, el comando se verá así.

ufw allow from fe80::1006:f7a3:b9cc:b0cb to any port 7687 proto tcp

Las direcciones IP anteriores se utilizan como ejemplo. Sustituya sus valores y agregue una regla.

 root@host:~# ufw allow from 192.168.50.189 to any port 7687 proto tcp
 Rule added
 root@host:~#  

Reiniciar cortafuegos

Asegúrese de reiniciar su cortafuegos.

 root@host:~# ufw reload
 Firewall reloaded
 root@host:~#  

Verificar conexión

Ahora vamos a comprobar si funciona correctamente.

 root@host:~# ufw status
 Status: active
 To                         Action      From
 --                         ------      ----
 7687/tcp                   ALLOW       192.168.50.189            
 root@host:~#  

Y con eso, tenemos un servidor Neo4j en funcionamiento que está listo para funcionar y configurado para permitir el acceso en el puerto 7687.

Conclusión

Nos reunimos con la base de datos gráfica de Neo4j, aprendimos cómo funciona y por qué es necesaria. Configure un administrador de paquetes y luego instale Neo4j. A continuación, verificamos la funcionalidad, entramos y cambiamos la contraseña. Probamos comandos básicos sobre cómo crear una tabla, establecer relaciones y configurar nodos. Al final, configuramos la conexión a las IP que necesitábamos y configuramos un firewall por seguridad.