Qué hace Neo4j
Neo4j registra nodos — un cliente, un producto, un servidor — con etiquetas (:Person, :Product) y propiedades, conectados por relaciones dirigidas y con nombre (:KNOWS, :BOUGHT, :DEPENDS_ON). Una relación se almacena como un enlace directo entre dos nodos: seguirla no requiere buscar en un índice, por grande que sea la base.
Se consulta en Cypher, un lenguaje que dibuja el patrón buscado: (a:Person)-[:KNOWS]->(b:Person). Los caminos de longitud variable (-[:KNOWS*1..3]->), los caminos más cortos y las agregaciones caben en una línea, donde SQL apila uniones o consultas recursivas.
Lo que aporta Neo4j
- Cypher —
MATCH,MERGE, caminos de longitud variable y caminos más cortos, en un lenguaje legible. - Neo4j Browser — una interfaz web que ejecuta las consultas y dibuja el grafo obtenido.
- API HTTP — una consulta Cypher por llamada
POST, respuesta en JSON, desde cualquier lenguaje. - Drivers oficiales en Bolt — Python, JavaScript, Java, Go y .NET.
- Índices y restricciones — unicidad, búsqueda de texto completo e índices vectoriales para embeddings.
- Transacciones ACID — un grafo coherente, incluso cuando varias aplicaciones escriben en él.
Neo4j frente a otras opciones
Desplace la tabla
| Neo4j | PostgreSQL | Qdrant | |
|---|---|---|---|
| Modelo | Nodos y relaciones | Tablas y uniones | Vectores y metadatos |
| Consultas | Cypher | SQL | Búsqueda por similitud |
| Punto fuerte | Relaciones en varios niveles | Transacciones y datos en tablas | Búsqueda semántica |
| Papel en un RAG | Hechos conectados y con fuente | Datos de negocio | Pasajes cercanos a la pregunta |
| Coste | Precio del VPS | Precio del VPS | Precio del VPS |
Requisitos previos
Un VPS Ubuntu 24.04 con 2 GB de RAM y 20 GB de disco, Docker y el plugin Compose instalados, nginx y Certbot en el host, y un subdominio que apunte al VPS, por ejemplo neo4j.example.com. Neo4j es más rápido cuando el grafo cabe en su caché de páginas: prevé más memoria para un grafo de decenas de millones de nodos.
Instalar Neo4j con Docker Compose
Preparar el directorio y la contraseña
El archivo
.envcontiene la contraseña del usuarioneo4j. La carpetabackupsrecibirá las copias de seguridad: pertenece al usuario 7474, el del contenedor.mkdir -p /opt/neo4j/backups && cd /opt/neo4j echo "NEO4J_PASSWORD=$(openssl rand -hex 16)" > .env chmod 600 .env chown 7474:7474 backupsEscribir el archivo docker-compose.yml
Los dos puertos se publican solo en la interfaz local: 7474 para Neo4j Browser y la API HTTP, 7687 para Bolt.
NEO4J_AUTHcrea el usuarioneo4jcon tu contraseña en el primer arranque, y la dirección Bolt anunciada es la que nginx publicará en HTTPS.services: neo4j: image: neo4j:2026.10.2-community restart: unless-stopped ports: - "127.0.0.1:7474:7474" - "127.0.0.1:7687:7687" environment: NEO4J_AUTH: neo4j/${NEO4J_PASSWORD} NEO4J_server_bolt_advertised__address: neo4j.example.com:443 NEO4J_server_memory_heap_initial__size: 512m NEO4J_server_memory_heap_max__size: 512m NEO4J_server_memory_pagecache_size: 512m volumes: - neo4j-data:/data - neo4j-logs:/logs volumes: neo4j-data: {} neo4j-logs: {}Arrancar Neo4j
El primer arranque tarda unos treinta segundos; después la raíz responde con un pequeño documento JSON que da la versión y las direcciones de conexión.
docker compose up -d docker compose ps curl -s http://127.0.0.1:7474/
No publiques nunca 7474 ni 7687 en Internet
Deja los dos puertos en 127.0.0.1: una base de datos accesible directamente desde Internet se escanea en pocas horas. nginx lleva el HTTPS en el 443, y la conexión Bolt del navegador pasa por el mismo nombre en WebSocket. Conserva también NEO4J_AUTH: sin él, el usuario neo4j arranca con la contraseña de fábrica neo4j, que todo el mundo conoce.
Poner Neo4j detrás de nginx en HTTPS
Neo4j Browser necesita dos cosas: la interfaz HTTP y una conexión Bolt, que el navegador abre en WebSocket. nginx dirige ambas con el mismo nombre: las peticiones normales al 7474, las de WebSocket al 7687.
map $http_upgrade $neo4j_backend {
default 127.0.0.1:7474;
websocket 127.0.0.1:7687;
}
server {
listen 80;
server_name neo4j.example.com;
location / {
proxy_pass http://$neo4j_backend;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $http_connection;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 3600s;
}
}certbot --nginx -d neo4j.example.comAbre después https://neo4j.example.com. En Neo4j Browser, escribe neo4j+s://neo4j.example.com:443 como Connect URL, el usuario neo4j y tu contraseña.
Primeras consultas Cypher
En Neo4j Browser, crea una restricción de unicidad, algunos nodos y sus relaciones, y luego sigue un camino de dos niveles como máximo. MERGE solo crea un nodo o una relación si todavía no existe: la consulta se puede repetir sin duplicados.
CREATE CONSTRAINT person_name IF NOT EXISTS FOR (p:Person) REQUIRE p.name IS UNIQUE;
MERGE (sara:Person {name: 'Sara'})
MERGE (yassine:Person {name: 'Yassine'})
MERGE (casa:City {name: 'Casablanca'})
MERGE (sara)-[:KNOWS]->(yassine)
MERGE (yassine)-[:LIVES_IN]->(casa);
MATCH (p:Person {name: 'Sara'})-[:KNOWS*1..2]->(f)-[:LIVES_IN]->(c:City)
RETURN f.name, c.name;El Browser dibuja el resultado; el comando :guide abre sus tutoriales integrados, y :sysinfo muestra el tamaño de la base y el uso de la caché.
Conectar una aplicación
Desde cualquier lenguaje, la API HTTP recibe una consulta Cypher por POST y responde en JSON, con autenticación HTTP básica. Una aplicación instalada en el mismo VPS usa más bien un driver oficial en Bolt, en bolt://127.0.0.1:7687. Desde tu equipo de desarrollo, un túnel SSH hace accesible el mismo puerto sin abrirlo a Internet.
curl -s -u neo4j:$NEO4J_PASSWORD \
-H 'Content-Type: application/json' \
-d '{"statement": "MATCH (p:Person) RETURN p.name LIMIT 5"}' \
https://neo4j.example.com/db/neo4j/query/v2from neo4j import GraphDatabase
driver = GraphDatabase.driver("bolt://127.0.0.1:7687", auth=("neo4j", "<mot-de-passe>"))
records, _, _ = driver.execute_query("MATCH (p:Person) RETURN p.name AS name")
print([r["name"] for r in records])ssh -L 7687:127.0.0.1:7687 [email protected]Usa el esquema bolt:// y no neo4j:// para una conexión local: el segundo pide la tabla de enrutamiento, que anuncia la dirección pública en el puerto 443.
GraphRAG: dar hechos conectados a un asistente de IA
Un RAG clásico recupera pasajes cercanos a la pregunta. Un GraphRAG añade las relaciones: las entidades extraídas de los documentos (personas, contratos, productos) se convierten en nodos, conectados entre sí y con los pasajes que las citan. Neo4j guarda ambos en la misma base, gracias a sus índices vectoriales.
CREATE VECTOR INDEX chunk_embedding IF NOT EXISTS
FOR (c:Chunk) ON c.embedding
OPTIONS {indexConfig: {`vector.dimensions`: 768, `vector.similarity_function`: 'cosine'}};La búsqueda vectorial encuentra los pasajes pertinentes y luego una consulta Cypher sigue sus relaciones para reunir el contexto: el asistente responde con hechos conectados y la fuente de cada uno. Los embeddings pueden venir de un modelo local servido por Ollama en el mismo VPS.
Copias de seguridad y actualizaciones
En Community Edition, la copia se hace con la base detenida, con neo4j-admin database dump: unos segundos de interrupción para un grafo de tamaño medio. Prográmala por la noche.
cd /opt/neo4j
docker compose stop neo4j
docker compose run --rm -v /opt/neo4j/backups:/backups neo4j \
neo4j-admin database dump neo4j --to-path=/backups --overwrite-destination=true
docker compose start neo4jCopia después backups/neo4j.dump fuera del VPS. Para actualizar, cambia la versión de la imagen en docker-compose.yml y luego docker compose pull && docker compose up -d, justo después de una copia; lee las notas de la versión antes de cambiar de versión mayor.
Instalación en un clic en ServOrbit
Desde el Marketplace de tu área de cliente, Neo4j se instala en un VPS de ServOrbit sin escribir una línea: Neo4j Community Edition se despliega detrás de un pequeño proxy que sirve Neo4j Browser, la API HTTP y la conexión Bolt en un solo puerto, la contraseña del usuario neo4j se genera y aparece en tu área de cliente, y todo se publica en HTTPS en tu dominio o en el subdominio gratuito del VPS. El puerto Bolt sigue disponible en local, en bolt://127.0.0.1:7687, para tus aplicaciones.
servorbit.com/ma-es/blog/autoalojar-neo4j-vps-base-de-datos-grafos