Base de datos · 9 min read · Dec 20, 2025

Cómo instalar y configurar la base de datos gráfica Neo4j en Ubuntu 22.04

Neo4j es una base de datos gráfica utilizada para crear relaciones de datos. Los datos dentro de las bases de datos tradicionales se guardan en una estructura similar a una tabla. Una base de datos gráfica registra relaciones entre nodos de datos. Cada nodo almacena referencias a todos los otros nodos a los que está conectado. Las bases de datos tradicionales no guardan datos de relación directamente, pero pueden averiguar conexiones buscando alrededor de estructuras de datos con la ayuda de la indexación, lo cual es costoso y consume mucho tiempo. Una base de datos gráfica como Neo4j evita toda esta sobrecarga y puede codificar y consultar relaciones complejas.

Cómo se almacenan los datos en una base de datos gráfica

Neo4j es desarrollado por Neo Technology. Está escrito en Java y Scala y está disponible en una versión comunitaria gratuita y en una versión empresarial. Neo4j utiliza su propio lenguaje de consulta llamado Cypher, pero las consultas se pueden escribir en otros estilos.

Este tutorial te enseñará cómo instalar y configurar Neo4j en un servidor Ubuntu 22.04.

Requisitos previos

  • Un servidor que ejecute Ubuntu 22.04 con un mínimo de 1 núcleo de CPU y 2 GB de memoria. Necesitarás actualizar el servidor según los requisitos.
  • Un usuario no root con privilegios de sudo.
  • Asegúrate de que todo esté actualizado.
  • $ sudo apt update
    
  • Instala paquetes de utilidad básicos. Algunos de ellos pueden ya estar instalados. $ sudo apt install wget curl nano software-properties-common dirmngr apt-transport-https gnupg gnupg2 ca-certificates lsb-release ubuntu-keyring unzip -y

Paso 1 - Instalar Neo4j

El primer paso para instalar Neo4j es agregar la clave GPG.

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

Agrega el repositorio de Neo4j al directorio de fuentes APT de tu 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 el riesgo de actualizar a la siguiente versión principal, puedes especificar las versiones mayor y menor requeridas en lugar de latest en el comando anterior.

El siguiente comando agregará el repositorio de Neo4j 5.x, lo que significa que no terminarás actualizando a la versión 6.x cada vez que se publique.

$ 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

Actualiza la lista de repositorios del sistema.

$ sudo apt update

Lista las versiones de Neo4j disponibles para instalación.

$ 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

Instala la edición comunitaria de Neo4j.

$ sudo apt install neo4j

Puedes instalar una versión específica usando el siguiente comando.

$ sudo apt install neo4j=1:5.3.0

Ten en cuenta que la versión incluye un componente de versión de época (1:), de acuerdo con la política de versionado de Debian.

Neo4j instalará automáticamente la versión JDK requerida junto con él.

Habilita el servicio de Neo4j.

$ sudo systemctl enable neo4j

Inicia el servicio de Neo4j.

$ sudo systemctl start neo4j

Verifica el estado del servicio de 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

Paso 2 - Probar la conexión

Neo4j utiliza el Cypher Shell para trabajar con datos.

Conéctate al Cypher Shell.

$ cypher-shell

Se te pedirá un nombre de usuario y una contraseña. El nombre de usuario y la contraseña predeterminados son neo4j. Se te pedirá que elijas una nueva contraseña.

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@neo4j>

Esto confirma la conexión exitosa al sistema de gestión de bases de datos Neo4j.

Escribe :exit para salir del shell.

neo4j@neo4j> :exit

¡Adiós!

Paso 3 - Configurar Neo4j para acceso remoto

Para entornos de producción, es posible que debas confirmar que Neo4j acepte conexiones de hosts remotos. Por defecto, Neo4j acepta conexiones solo desde localhost.

Podemos configurar Neo4j para aceptar conexiones de hosts remotos editando su archivo de configuración. Neo4j almacena su configuración en el archivo /etc/neo4j/neo4j.conf. Ábrelo para editar.

$ sudo nano /etc/neo4j/neo4j.conf

Encuentra la línea comentada #dbms.default_listen_address=0.0.0.0 y descoméntala eliminando el hash inicial.

. . .
#***************************************************************
# Configuración del conector de red
#***************************************************************

# Con la configuración predeterminada, Neo4j solo acepta conexiones locales.
# Para aceptar conexiones no locales, descomenta esta línea:
server.default_listen_address=0.0.0.0
. . .

Guarda el archivo presionando Ctrl + X y luego Y cuando se te pida.

Por defecto, el valor 0.0.0.0 vinculará Neo4j a todas las interfaces IPv4 disponibles en tu sistema, incluido localhost. Si deseas limitar Neo4j a una dirección IP particular, por ejemplo, una IP de red privada, especifica la dirección IP que está asignada a la interfaz de red privada de tu servidor aquí.

También puedes configurar Neo4j para usar interfaces IPv6. Al igual que con IPv4, puedes establecer el valor default_listen_address a una dirección IPv6 específica que utilizarás para comunicarte con Neo4j. Si deseas limitar a Neo4j a usar solo la dirección IPv6 local de tu servidor, especifica ::1, que corresponde a localhost usando notación IPv6.

Si configuras Neo4j con una dirección IPv6, no podrás conectarte con cypher-shell usando la dirección IPv6 directamente. En su lugar, necesitas configurar un nombre DNS que resuelva a la dirección IPv6, o agregar una entrada en el archivo /etc/hosts del sistema remoto que mapee la dirección a un nombre. Luego podrás usar el nombre del DNS o del archivo hosts para conectarte a Neo4j usando IPv6 desde tu sistema remoto.

Por ejemplo, un servidor Neo4j con una dirección IPv6 como 2001:db8::1 requeriría que el sistema remoto que se conecta tenga una entrada en /etc/hosts como se muestra a continuación.

2001:db8::1 your_hostname

Luego puedes conectarte al servidor desde el sistema remoto usando el nombre que especificaste como se muestra a continuación.

$ cypher-shell -a 'neo4j://your_hostname:7687'

Si restringes a Neo4j para usar la dirección localhost IPv6 de ::1, entonces puedes conectarte a él localmente en el propio servidor Neo4j usando el nombre preconfigurado ip6-localhost de tu archivo /etc/hosts que se muestra a continuación.

$ cypher-shell -a 'neo4j://ip6-localhost:7687'

Una vez que invoques cypher-shell con la URI de conexión, se te pedirá tu nombre de usuario y contraseña como de costumbre.

Paso 4 - Configurar acceso al firewall (UFW)

Una vez que hayas habilitado las conexiones remotas, puedes usar el firewall para restringir a Neo4j y limitar las conexiones solo a sistemas de confianza a los que puede conectarse.

Neo4j crea dos sockets de red, uno en el puerto 7474 para la interfaz HTTP incorporada y el protocolo bolt principal en el puerto 7687.

Ubuntu 22.04 utiliza Uncomplicated Firewall (UFW) por defecto.

Configura el firewall para permitir que un host remoto de confianza acceda a la interfaz bolt usando IPv4 con el siguiente comando.

$ sudo ufw allow from 203.0.113.1 to any port 7687 proto tcp

Sustituye la dirección IP del sistema remoto de confianza en lugar del valor 203.0.113.1. De manera similar, puedes permitir un rango completo de red usando el siguiente comando.

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

Sustituye la red real en lugar del valor 192.0.2.0/24.

Para permitir el acceso a un host remoto usando IPv6, puedes usar el siguiente comando.

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

Sustituye la dirección IPv6 de tu sistema de confianza en lugar del valor 2001:DB8::1/128.

Al igual que con IPv4, puedes permitir un rango de direcciones IPv6 usando el siguiente comando.

$ ufw allow from 192.0.2.0/24 to any port 7687 proto tcp

Nuevamente, sustituye tu rango de red de confianza en lugar del rango de red destacado 2001:DB8::/32.

Recarga el firewall para aplicar los cambios.

$ sudo ufw reload

Verifica el estado del 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

Paso 5 - Usar Neo4j

Conéctate a Neo4j usando la herramienta cypher-shell. Se te pedirá tu nombre de usuario y contraseña.

$ cypher-shell

Si configuraste Neo4j para acceso remoto, entonces usa el siguiente comando para conectarte a Neo4j desde el sistema remoto.

$ cypher-shell -a 'neo4j://203.0.113.1:7687'

Aquí 203.0.113.1 es la dirección IP del servidor Neo4j.

Si estás usando IPv6, asegúrate de tener una entrada en /etc/hosts con un nombre descrito en el paso 3. Luego conéctate al servidor Neo4j de la siguiente manera.

$ cypher-shell -a 'neo4j://your_hostname:7687'

Asegúrate de que your_hostname se mapee a la dirección IPv6 de tu servidor Neo4j en el archivo /etc/hosts del sistema remoto.

Agreguemos un nodo llamado Slite y los nombres de los autores a Neo4j. El siguiente comando creará un nodo de tipo Slite, con un nombre Navjot Singh.

neo4j@neo4j> CREATE (:Slite {name: 'Navjot Singh'});

Obtendrás la siguiente salida.

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

A continuación, agregaremos más empleados y los relacionaremos usando una relación llamada COLLEAGUE. Puedes vincular nodos con relaciones nombradas arbitrariamente.

Agrega tres empleados más y vincúlalos usando la relación COLLEAGUE.

neo4j@neo4j> CREATE
             (:Slite {name: 'Sammy'})-[:COLLEAGUE]->
             (:Slite {name: 'Peter Jack'})-[:COLLEAGUE]->
             (:Slite {name: 'Chris Rock'});

Obtendrás una salida similar.

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

Ahora, creemos algunas relaciones.

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

neo4j@neo4j> 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

Ahora, creemos otra conexión entre Sammy y Peter ya que están trabajando en el mismo proyecto.

neo4j@neo4j> 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

Mostremos todos estos datos usando la siguiente consulta.

neo4j@neo4j> 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

Conclusión

Esto concluye nuestro tutorial sobre la instalación y configuración de Neo4j en un servidor Ubuntu 22.04. Si tienes alguna pregunta, publícalas en los comentarios a continuación.

Share: X/Twitter LinkedIn

Recibe nuevas publicaciones en tu bandeja de entrada.

No spam. Cancela la suscripción en cualquier momento.