Cómo instalar y configurar Neo4j en Ubuntu 20.04

Introducción

Índice
  1. Introducción
  • Prerrequisitos
  • Paso 1: Instalación de Neo4j
  • Paso 2: Conexión y configuración de Neo4j
  • Paso 3 (opcional): configuración de Neo4j para acceso remoto
  • Paso 4: uso de Neo4j
  • Conclusión
  • Neo4j es una base de datos gráfica que registra las relaciones entre los nodos de datos, mientras que las bases de datos relacionales tradicionales utilizan filas y columnas para almacenar y estructurar los datos. 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.

    Prerrequisitos

    Para seguir este tutorial, necesitarás lo siguiente:

    • Un servidor Ubuntu 20.04 configurado siguiendo la guía de configuración inicial del servidor Ubuntu 20.04, incluido un usuario no root habilitado para sudo y un firewall.

    Paso 1: Instalación de Neo4j

    Los repositorios de paquetes oficiales de Ubuntu no contienen una copia del motor de base de datos de Neo4j. Para instalar el paquete compatible de Neo4j, deberá agregar la clave GPG de Neo4j para garantizar que las descargas de paquetes sean válidas. Luego, deberá agregar una nueva fuente de paquete que apunte al repositorio de software de Neo4j y, finalmente, instalar el paquete.

    Para comenzar, descargue y envíe la salida del siguiente comando curl al gpg --dearmorcomando. Este paso convertirá la clave a un formato que apt puede usar para verificar los paquetes descargados:

    1. curl -fsSL https://debian.neo4j.com/neotechnology.gpg.key |sudo gpg --dearmor -o /usr/share/keyrings/neo4j.gpg

    A continuación, agregue el repositorio Neo4j 4.1 a las fuentes APT de su sistema:

    1. echo "deb [signed-by=/usr/share/keyrings/neo4j.gpg] https://debian.neo4j.com stable 4.1" | sudo tee -a /etc/apt/sources.list.d/neo4j.list

    La [signed-by=/usr/share/keyrings/neo4j.gpg]parte del archivo indica aptque debe utilizar la clave que descargó para verificar la información del repositorio y del archivo de los paquetes neo4j.

    El siguiente paso es actualizar las listas de paquetes y luego instalar el paquete Neo4j y todas sus dependencias. Este paso descargará e instalará un paquete Java compatible, de modo que pueda ingresar Ycuando el aptcomando le solicite que instale todas las dependencias:

    1. sudo apt update
    1. sudo apt install neo4j

    Una vez que se complete el proceso de instalación, Neo4j debería estar ejecutándose. Sin embargo, no está configurado para iniciarse al reiniciar el sistema. Por lo tanto, el último paso de configuración es habilitarlo como servicio y luego iniciarlo:

    1. sudo systemctl enable neo4j.service

    Ahora inicie el servicio si aún no está ejecutándose:

    1. sudo systemctl start neo4j.service

    Después de completar todos estos pasos, examine el estado de Neo4j usando el systemctlcomando:

    1. sudo systemctl status neo4j.service

    Debería obtener un resultado similar al siguiente:

    Output● neo4j.service - Neo4j Graph Database     Loaded: loaded (/lib/systemd/system/neo4j.service; enabled; vendor preset: enabled)     Active: active (running) since Fri 2020-08-07 01:43:00 UTC; 6min ago   Main PID: 21915 (java)      Tasks: 45 (limit: 1137)     Memory: 259.3M     CGroup: /system.slice/neo4j.service. . .

    Habrá otras líneas de salida detalladas, pero lo importante que hay que tener en cuenta son las líneas resaltadas enabledy running. Una vez que Neo4j esté instalado y en funcionamiento, puede pasar al siguiente conjunto de pasos, que lo guiarán a través de la conexión a Neo4j, la configuración de credenciales y la inserción de nodos en la base de datos.

    Paso 2: Conexión y configuración de Neo4j

    Ahora que tiene Neo4j instalado y configurado para ejecutarse después de cualquier reinicio, puede probar la conexión a la base de datos y configurar las credenciales de administrador.

    Para interactuar con Neo4j en la línea de comandos, utilice la cypher-shellutilidad. Invoque la utilidad de la siguiente manera:

    1. cypher-shell

    Cuando invoque el shell por primera vez, iniciará sesión con la combinación predeterminada neo4jde usuario y neo4jcontraseña de administrador. Una vez que se haya autenticado, Neo4j le solicitará que cambie la contraseña de administrador:

    cypher-shell promptusername: neo4jpassword: *****Password change requirednew 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

    En este ejemplo, lo resaltado ********************es la versión enmascarada de la nueva contraseña. Elija una contraseña segura y fácil de recordar y asegúrese de guardarla en un lugar seguro. Una vez que configure la contraseña, se lo conectará al neo4j@neo4j mensaje interactivo donde podrá interactuar con las bases de datos de Neo4j insertando y consultando nodos.

    Nota : La Community Edition de Neo4j permite ejecutar una única base de datos a la vez. Además, la versión Community no incluye la capacidad de asignar roles y permisos a los usuarios, por lo que estos pasos no se incluyen en este tutorial. Para obtener más información sobre las distintas funciones que admite la Community Edition de Neo4j, consulte la documentación de Neo4j aquí.

    Ahora que ha configurado una contraseña de administrador y ha probado la conexión a Neo4j, salga del cypher-shellmensaje escribiendo :exit:

    1. :exit

    A continuación, puede configurar opcionalmente Neo4j para aceptar conexiones remotas.

    Paso 3 (opcional): configuración de Neo4j para acceso remoto

    Si desea incorporar Neo4j a una aplicación o entorno más grande que utilice varios servidores, deberá configurarlo para que acepte conexiones de otros sistemas. En este paso, configurará Neo4j para permitir conexiones remotas y también agregará reglas de firewall para restringir qué sistemas pueden conectarse a su servidor Neo4j.

    De manera predeterminada, Neo4j está configurado para aceptar conexiones localhostúnicamente desde ( 127.0.0.1es la dirección IP de localhost). Esta configuración garantiza que su servidor Neo4j no esté expuesto a Internet público y que solo los usuarios con acceso al sistema local puedan interactuar con Neo4j.

    Para cambiar el socket de red que utiliza Neo4j por localhostuno que puedan utilizar otros sistemas, deberá editar el /etc/neo4j/neo4j.confarchivo. Abra el archivo de configuración en su editor preferido y busque la dbms.default_listen_addressconfiguración. El siguiente ejemplo utiliza nanopara editar el archivo:

    1. sudo nano /etc/neo4j/neo4j.conf

    Localice la línea comentada #dbms.default_listen_address=0.0.0.0y descomentela quitando el #carácter de comentario inicial.

    /etc/neo4j/neo4j.conf

    . . .#*****************************************************************# Network connector configuration#*****************************************************************# With default configuration Neo4j only accepts local connections.# To accept non-local connections, uncomment this line:dbms.default_listen_address=0.0.0.0. . .

    De manera predeterminada, el valor 0.0.0.0vinculará Neo4j a todas las interfaces IPv4 disponibles en su sistema, incluida localhost. Si desea limitar Neo4j a una dirección IP en particular, por ejemplo, una IP de red privada que sus servidores usan para una ruta de datos, especifique aquí la dirección IP que está asignada a la interfaz de red privada de su servidor.

    También puedes configurar Neo4j para que use interfaces IPv6. Al igual que con IPv4, puedes establecer el default_listen_addressvalor en una dirección IPv6 específica que usarás para comunicarte con Neo4j. Si quieres limitar Neo4j para que use solo la dirección IPv6 local para tu servidor, especifica ::1, que corresponde al localhostuso de la notación IPv6.

    Cuando hayas terminado de configurar la dirección IP predeterminada que Neo4j utilizará para las conexiones, guarda y cierra neo4j.conf. Si estás utilizando nano, puedes hacerlo presionando CTRL+X, seguido de Yy luego ENTER.

    Nota : Si configura Neo4j con una dirección IPv6, no podrá conectarse a Neo4j cypher-shellutilizando la dirección IPv6 directamente. En su lugar, deberá configurar un nombre DNS que resuelva a la dirección IPv6 o agregar una entrada en el /etc/hostsarchivo del sistema remoto que asigne la dirección a un nombre. Luego podrá usar el nombre del archivo DNS o hosts para conectarse a Neo4j utilizando IPv6 desde su sistema remoto.

    Por ejemplo, un servidor Neo4j con una dirección IPv6 como 2001:db8::1requeriría que el sistema de conexión remota tenga una /etc/hostsentrada como la siguiente, sustituyendo un nombre en lugar del resaltado your_hostname:

    /etc/hosts

    . . .2001:db8::1 your_hostname

    Luego, deberá conectarse al servidor desde el sistema remoto utilizando el nombre que especificó de la siguiente manera:

    1. cypher-shell -a 'neo4j://your_hostname:7687'

    Si restringe Neo4j para que use la localhostdirección IPv6 de ::1, entonces puede conectarse a él localmente en el servidor Neo4j usando el ip6-localhostnombre preconfigurado de su /etc/hostsarchivo de esta manera:

    1. cypher-shell -a 'neo4j://ip6-localhost:7687'

    Una vez que invoque cypher-shellla URI de conexión, se le solicitará su nombre de usuario y contraseña como de costumbre.

    Ahora que ha configurado Neo4j para permitir conexiones remotas, es importante limitar el acceso remoto para que solo los sistemas de confianza puedan conectarse a él. Para restringir el acceso remoto a Neo4j, puede utilizar el firewall UFW predeterminado de Ubuntu. Si ha seguido el tutorial de configuración inicial del servidor con Ubuntu 20.04, entonces UFW ya está instalado y listo para usar en su servidor.

    Neo4j crea dos sockets de red en una instalación predeterminada, uno en el puerto 7474 para la interfaz HTTP incorporada y el boltprotocolo principal en el puerto 7687. Neo4j recomienda no usar el puerto HTTP en producción, por lo que crearemos reglas de firewall solo para el puerto 7687.

    Para configurar el firewall para permitir el acceso de un host remoto confiable a la boltinterfaz mediante IPv4, escriba el siguiente comando:

    Ejemplo de host único IPv4 de UFW

    1. sudo ufw allow from 203.0.113.1 to any port 7687 proto tcp

    Sustituya la dirección IP del sistema remoto confiable que utilizará para acceder a Neo4j en lugar de la resaltada.203.0.113.1valor.

    Si desea permitir el acceso a un rango completo de red, como una red de administración privada o una red de ruta de datos, utilice una regla como esta:

    Ejemplo de red IPv4 de UFW

    1. sudo ufw allow from 192.0.2.0/24 to any port 7687 proto tcp

    Nuevamente, sustituya la red a la que desea tener acceso a Neo4j en lugar de la resaltada.192.0.2.0/24red.

    Si desea permitir que los hosts accedan a Neo4j de forma remota mediante IPv6, agregue una regla como la siguiente:

    Ejemplo de host único IPv6 de UFW

    1. sudo ufw allow from 2001:DB8::1/128 to any port 7687 proto tcp

    Sustituya la dirección IPv6 de su sistema de confianza en lugar de la 2001:DB8::1/128dirección resaltada.

    Al igual que con IPv4, también puede permitir que una serie de direcciones IPv6 accedan a su servidor Neo4j. Para ello, cree una regla UFW como la siguiente:

    Ejemplo de host único IPv6 de UFW

    1. sudo ufw allow from 2001:DB8::/32 to any port 7687 proto tcp

    Nuevamente sustituya su rango de red de confianza en lugar del 2001:DB8::/32rango de red resaltado.

    Una vez que haya creado las reglas UFW adecuadas para su configuración de red y los hosts o redes de confianza, habilite UFW para que las reglas surtan efecto:

    1. sudo ufw reload

    Puede examinar las reglas UFW cargadas actualmente mediante el ufw statuscomando Ejecútelo para asegurarse de que las direcciones o redes que especificó puedan acceder a Neo4j en el puerto 7687:

    1. sudo ufw status

    Debería obtener un resultado similar al siguiente:

    OutputStatus: activeTo                         Action      From--                         ------      ----22/tcp                     ALLOW       Anywhere22/tcp (v6)                ALLOW       Anywhere (v6)7687/tcp                   ALLOW       203.0.113.1

    Ahora tiene un servidor Neo4j configurado para permitir el acceso a un servidor o red remotos de confianza en el puerto 7687. En la siguiente sección de este tutorial aprenderá a agregar nodos a la base de datos y a definir relaciones entre ellos.

    Paso 4: uso de Neo4j

    Para comenzar a usar Neo4j, agreguemos algunos nodos de ejemplo y luego definamos las relaciones entre ellos. Conéctese a Neo4j mediante cypher-shell.

    1. cypher-shell

    Nota : Si configuró Neo4j para permitir el acceso remoto en el [Paso 3 (opcional): configuración de Neo4j para acceso remoto](step-3-optional-configuring-neo4j-for-remote-access], conéctese utilizando un URI que corresponda a la dirección de su servidor Neo4j. Por ejemplo, si la IP de su servidor Neo4j es 203.0.113.1, entonces conéctese a él de esta manera desde su sistema remoto:

    1. cypher-shell -a 'neo4j://203.0.113.1:7687'

    Se le solicitará su nombre de usuario y contraseña como de costumbre.

    Si está utilizando IPv6, asegúrese de tener una /etc/hostsentrada con un nombre como el descrito en el Paso 3. Luego, conéctese a su servidor Neo4j desde su sistema remoto con un cypher-shellcomando como este:

    1. cypher-shell -a 'neo4j://your_hostname:7687'

    Nuevamente, asegúrese de que los your_hostnamemapas resaltados correspondan a la dirección IPv6 de su servidor Neo4j en /etc/hostsel archivo de su sistema remoto.

    Una vez que haya iniciado sesión en Neo4j con su nombre de usuario y contraseña, podrá consultar y agregar nodos y relaciones a la base de datos.

    Para comenzar, agregue un nodo de tiburón blanco a Neo4j. El siguiente comando creará un nodo de tipo Shark, con un nombre Great White.

    1. CREATE (:Shark {name: 'Great White'});

    Después de cada comando recibirás un resultado similar al siguiente:

    Output0 rows available after 3 ms, consumed after another 0 msAdded 1 nodes, Set 1 properties, Added 1 labels

    Nota : una explicación completa de cada una de las siguientes cypherconsultas queda fuera del alcance de este tutorial. Para obtener más detalles sobre la sintaxis del cypherlenguaje de consulta, consulte el Manual de Neo4j Cypher.

    A continuación, agregue más tiburones y relaciónelos mediante una relación llamada FRIEND. Neo4j le permite relacionar nodos con relaciones con nombres arbitrarios, por lo que FRIENDpuede ser cualquier etiqueta para una relación que desee utilizar.

    En el siguiente ejemplo, agregaremos tres tiburones y los vincularemos mediante una relación llamada FRIEND:

    1. CREATE
    2. (:Shark {name: 'Hammerhead'})-[:FRIEND]-
    3. (:Shark {name: 'Sammy'})-[:FRIEND]-
    4. (:Shark {name: 'Megalodon'});

    Debería recibir un resultado que indique que se agregaron los tres nuevos tiburones a la base de datos:

    Output. . .Added 3 nodes, Created 2 relationships, Set 3 properties, Added 3 labels

    Neo4j le permite relacionar nodos usando nombres arbitrarios para las relaciones, por lo que además de su FRIENDrelación existente, Sammy y Megalodon también pueden relacionarse usando un rango taxonómico.

    Sammy y Megalodon comparten un orden común de Lamniformes. Dado que las relaciones pueden tener propiedades al igual que los nodos, crearemos una ORDERrelación con una namepropiedad que se configure para Lamniformesayudar a describir una de las relaciones de Sammy y Megalodon:

    1. MATCH (a:Shark),(b:Shark)
    2. WHERE a.name = 'Sammy' AND b.name = 'Megalodon'
    3. CREATE (a)-[r:ORDER { name: 'Lamniformes' }]-(b)
    4. RETURN type(r), r.name;

    Después de agregar esa relación, debería tener un resultado como el siguiente:

    Output+-------------------------+| type(r) | r.name        |+-------------------------+| "ORDER" | "Lamniformes" |+-------------------------+1 row available after 2 ms, consumed after another 7 msCreated 1 relationships, Set 1 properties

    A continuación, agregue una SUPERORDERrelación entre Sammy y Hammerhead en función de su superorden taxonómico, que es Selachimorpha. Nuevamente, se le asigna una namepropiedad a la relación, que se establece en Selachimorpha:

    1. MATCH (a:Shark),(b:Shark)
    2. WHERE a.name = 'Sammy' AND b.name = 'Hammerhead'
    3. CREATE (a)-[r:SUPERORDER { name: 'Selachimorpha'}]-(b)
    4. RETURN type(r), r.name;

    Nuevamente recibirás un resultado que indica el tipo de relación, junto con el nombre que se agregó para describir la relación:

    Output+--------------------------------+| type(r)      | r.name          |+--------------------------------+| "SUPERORDER" | "Selachimorpha" |+--------------------------------+1 row available after 2 ms, consumed after another 8 msCreated 1 relationships, Set 1 properties

    Finalmente, con todos estos nodos y relaciones definidos y almacenados en Neo4j, examine los datos utilizando la siguiente consulta:

    1. MATCH (a)-[r]-(b)
    2. RETURN a.name,r,b.name
    3. ORDER BY r;

    Debería recibir un resultado como el siguiente:

    Output+---------------------------------------------------------------------+| a.name       | r                                     | b.name       |+---------------------------------------------------------------------+| "Hammerhead" | [:FRIEND]                             | "Sammy"      || "Sammy"      | [:FRIEND]                             | "Megalodon"  || "Sammy"      | [:ORDER {name: "Lamniformes"}]        | "Megalodon"  || "Sammy"      | [:SUPERORDER {name: "Selachimorpha"}] | "Hammerhead" |+---------------------------------------------------------------------+4 rows available after 72 ms, consumed after another 1 ms

    El resultado incluye las FRIENDrelaciones que se definieron entre Hammerhead, Sammy y Megalodon, así como las relaciones ORDERtaxonómicas SUPERORDER.

    Cuando haya terminado de agregar y explorar nodos y relaciones a su base de datos Neo4j, escriba el :exitcomando para salir del cypher-shell.

    Conclusión

    Ya ha instalado, configurado y añadido datos a Neo4j en su servidor. También ha configurado de forma opcional Neo4j para que acepte conexiones desde sistemas remotos y lo ha protegido con UFW.

    Si desea obtener más información sobre el uso de Neo4j y el cypherlenguaje de consulta, consulte la documentación oficial de Neo4j.

    SUSCRÍBETE A NUESTRO BOLETÍN 
    No te pierdas de nuestro contenido ni de ninguna de nuestras guías para que puedas avanzar en los juegos que más te gustan.

    Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

    Subir

    Este sitio web utiliza cookies para mejorar tu experiencia mientras navegas por él. Este sitio web utiliza cookies para mejorar tu experiencia de usuario. Al continuar navegando, aceptas su uso. Mas informacion