Ce que fait Neo4j
Neo4j enregistre des nœuds — un client, un produit, un serveur — porteurs d'étiquettes (:Person, :Product) et de propriétés, reliés par des relations orientées et nommées (:KNOWS, :BOUGHT, :DEPENDS_ON). Une relation est stockée comme un lien direct entre deux nœuds : la suivre ne demande aucune recherche d'index, quelle que soit la taille de la base.
On l'interroge en Cypher, un langage qui dessine le motif recherché : (a:Person)-[:KNOWS]->(b:Person). Les chemins de longueur variable (-[:KNOWS*1..3]->), les plus courts chemins et les agrégations s'écrivent en une ligne, là où SQL empile les jointures ou les requêtes récursives.
Ce que Neo4j apporte
- Cypher —
MATCH,MERGE, chemins de longueur variable et plus courts chemins, dans un langage lisible. - Neo4j Browser — une interface web qui exécute les requêtes et dessine le graphe obtenu.
- API HTTP — une requête Cypher par appel
POST, réponse en JSON, depuis n'importe quel langage. - Pilotes officiels en Bolt — Python, JavaScript, Java, Go et .NET.
- Index et contraintes — unicité, recherche plein texte et index vectoriels pour les embeddings.
- Transactions ACID — un graphe cohérent, même quand plusieurs applications y écrivent.
Neo4j face aux autres options
Faites défiler le tableau
| Neo4j | PostgreSQL | Qdrant | |
|---|---|---|---|
| Modèle | Nœuds et relations | Tables et jointures | Vecteurs et métadonnées |
| Requêtes | Cypher | SQL | Recherche par similarité |
| Point fort | Relations sur plusieurs niveaux | Transactions et données en tables | Recherche sémantique |
| Rôle dans un RAG | Faits reliés et sourcés | Données métier | Passages proches de la question |
| Coût | Prix du VPS | Prix du VPS | Prix du VPS |
Prérequis
Un VPS Ubuntu 24.04 avec 2 Go de RAM et 20 Go de disque, Docker et le plugin Compose installés, nginx et Certbot sur l'hôte, et un sous-domaine qui pointe vers le VPS, par exemple neo4j.example.com. Neo4j est le plus rapide quand le graphe tient dans son cache de pages : prévoyez davantage de mémoire pour un graphe de plusieurs dizaines de millions de nœuds.
Installer Neo4j avec Docker Compose
Préparer le répertoire et le mot de passe
Le fichier
.envporte le mot de passe de l'utilisateurneo4j. Le dossierbackupsrecevra les sauvegardes : il appartient à l'utilisateur 7474, celui du conteneur.mkdir -p /opt/neo4j/backups && cd /opt/neo4j echo "NEO4J_PASSWORD=$(openssl rand -hex 16)" > .env chmod 600 .env chown 7474:7474 backupsÉcrire le fichier docker-compose.yml
Les deux ports sont publiés sur la seule boucle locale : 7474 pour Neo4j Browser et l'API HTTP, 7687 pour Bolt.
NEO4J_AUTHcrée l'utilisateurneo4javec votre mot de passe dès le premier démarrage, et l'adresse Bolt annoncée est celle que nginx publiera 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: {}Démarrer Neo4j
Le premier démarrage prend une trentaine de secondes ; la racine répond ensuite par un petit document JSON qui donne la version et les adresses de connexion.
docker compose up -d docker compose ps curl -s http://127.0.0.1:7474/
Ne publiez jamais 7474 ni 7687 sur Internet
Laissez les deux ports sur 127.0.0.1 : une base de données joignable directement depuis Internet est scannée en quelques heures. nginx porte le HTTPS sur 443, et la connexion Bolt du navigateur passe par le même nom en WebSocket. Gardez aussi NEO4J_AUTH : sans lui, l'utilisateur neo4j démarre avec le mot de passe d'usine neo4j, que tout le monde connaît.
Placer Neo4j derrière nginx en HTTPS
Neo4j Browser a besoin de deux choses : l'interface HTTP et une connexion Bolt, que le navigateur ouvre en WebSocket. nginx aiguille les deux sur le même nom : les requêtes ordinaires vers 7474, les demandes de WebSocket vers 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.comOuvrez ensuite https://neo4j.example.com. Dans Neo4j Browser, saisissez neo4j+s://neo4j.example.com:443 comme Connect URL, l'utilisateur neo4j et votre mot de passe.
Premières requêtes Cypher
Dans Neo4j Browser, créez une contrainte d'unicité, quelques nœuds et leurs relations, puis suivez un chemin de deux niveaux au plus. MERGE ne crée un nœud ou une relation que s'il n'existe pas encore : la requête peut être rejouée sans doublon.
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;Le Browser dessine le résultat ; la commande :guide ouvre ses tutoriels intégrés, et :sysinfo affiche la taille de la base et l'occupation du cache.
Connecter une application
Depuis n'importe quel langage, l'API HTTP reçoit une requête Cypher en POST et répond en JSON, avec l'authentification HTTP de base. Une application installée sur le même VPS utilise plutôt un pilote officiel en Bolt, sur bolt://127.0.0.1:7687. Depuis votre poste de développement, un tunnel SSH rend le même port accessible sans l'ouvrir sur 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]Utilisez le schéma bolt:// et non neo4j:// pour une connexion locale : le second demande la table de routage, qui annonce l'adresse publique sur le port 443.
GraphRAG : donner des faits reliés à un assistant IA
Un RAG classique retrouve des passages proches de la question. Un GraphRAG ajoute les relations : les entités extraites des documents (personnes, contrats, produits) deviennent des nœuds, reliés entre eux et aux passages qui les citent. Neo4j porte les deux dans la même base, grâce à ses index vectoriels.
CREATE VECTOR INDEX chunk_embedding IF NOT EXISTS
FOR (c:Chunk) ON c.embedding
OPTIONS {indexConfig: {`vector.dimensions`: 768, `vector.similarity_function`: 'cosine'}};La recherche vectorielle trouve les passages pertinents, puis une requête Cypher suit leurs relations pour rassembler le contexte : l'assistant répond avec des faits reliés et la source de chacun. Les embeddings peuvent venir d'un modèle local servi par Ollama sur le même VPS.
Sauvegarder et mettre à jour
En Community Edition, la sauvegarde se fait base arrêtée, avec neo4j-admin database dump : quelques secondes d'interruption pour un graphe de taille moyenne. Programmez-la la nuit.
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 neo4jCopiez ensuite backups/neo4j.dump hors du VPS. Pour mettre à jour, changez le numéro de version de l'image dans docker-compose.yml, puis docker compose pull && docker compose up -d, juste après une sauvegarde ; lisez les notes de version avant de changer de version majeure.
Installation en un clic sur ServOrbit
Depuis le Marketplace de votre espace client, Neo4j s'installe sur un VPS ServOrbit sans écrire une ligne : Neo4j Community Edition est déployé derrière un petit proxy qui sert Neo4j Browser, l'API HTTP et la connexion Bolt sur un seul port, le mot de passe de l'utilisateur neo4j est généré et affiché dans votre espace client, et l'ensemble est publié en HTTPS sur votre domaine ou sur le sous-domaine gratuit du VPS. Le port Bolt reste disponible en local, sur bolt://127.0.0.1:7687, pour vos applications.
servorbit.com/ma-fr/blog/self-host-neo4j-vps