[{"data":1,"prerenderedAt":186},["ShallowReactive",2],{"seo-verification":3,"blog-self-host-neo4j-vps-ma-fr":6,"promo-bar-likely":185},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-self-host-neo4j-vps-ma-fr",{"id":9,"slug":10,"slugs":11,"title":15,"excerpt":16,"readTime":17,"views":18,"isPinned":19,"noindex":19,"publishedAt":20,"updatedAt":21,"category":22,"categories":27,"featuredImage":29,"bgImage":30,"posterImage":31,"relatedSolution":32,"intro":35,"sections":36,"ctaTitle":120,"ctaBody":121,"ctaButton":122,"ctaUrl":123,"relatedPosts":124},574,"self-host-neo4j-vps",{"fr":10,"en":12,"ar":13,"es":14},"self-host-neo4j-vps-graph-database","استضافة-neo4j-على-vps-قاعدة-بيانات-رسومية","autoalojar-neo4j-vps-base-de-datos-grafos","Neo4j sur VPS : base de données graphe, Cypher et GraphRAG","Installez Neo4j sur un VPS avec Docker Compose : requêtes Cypher, Neo4j Browser et API HTTP derrière nginx en HTTPS, pilotes en Bolt et index vectoriels.",7,0,false,"2026-11-10T00:00:00+00:00","2026-11-10T14:39:01+00:00",{"id":17,"name":23,"slug":24,"color":25,"icon":26},"Self-hosting","self-hosting","bg-indigo-500\u002F10 text-indigo-400","cloud",[28],{"id":17,"name":23,"slug":24,"color":25,"icon":26},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Fself-host-neo4j-vps-poster.svg",{"categorySlug":33,"appSlug":34},"bases-de-donnees","neo4j","Certaines données ne tiennent pas bien dans des tables : qui connaît qui, quel service dépend de quel autre, quel document cite quel contrat. En SQL, chaque niveau de relation coûte une jointure. Neo4j, la base de données orientée graphe la plus répandue, stocke directement les nœuds et leurs relations et les interroge en Cypher. Ce guide installe Neo4j Community Edition sur un VPS avec Docker Compose, publie Neo4j Browser et la connexion Bolt en HTTPS sur un seul nom, puis connecte une application et pose les bases d'un GraphRAG.",[37,41,51,82,85,98,102,105,108,111,114,117],{"type":38,"title":39,"body":40},"h2","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.\n\nOn 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.",{"type":42,"title":43,"items":44},"ul","Ce que Neo4j apporte",[45,46,47,48,49,50],"**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.",{"type":52,"title":53,"headers":54,"rows":58},"comparison","Neo4j face aux autres options",[5,55,56,57],"Neo4j","PostgreSQL","Qdrant",[59,64,69,74,79],[60,61,62,63],"Modèle","Nœuds et relations","Tables et jointures","Vecteurs et métadonnées",[65,66,67,68],"Requêtes","Cypher","SQL","Recherche par similarité",[70,71,72,73],"Point fort","Relations sur plusieurs niveaux","Transactions et données en tables","Recherche sémantique",[75,76,77,78],"Rôle dans un RAG","Faits reliés et sourcés","Données métier","Passages proches de la question",[80,81,81,81],"Coût","Prix du VPS",{"type":38,"title":83,"body":84},"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.",{"type":86,"title":87,"steps":88},"steps","Installer Neo4j avec Docker Compose",[89,92,95],{"title":90,"body":91},"Préparer le répertoire et le mot de passe","Le fichier `.env` porte le mot de passe de l'utilisateur `neo4j`. Le dossier `backups` recevra les sauvegardes : il appartient à l'utilisateur 7474, celui du conteneur.\n```bash\nmkdir -p \u002Fopt\u002Fneo4j\u002Fbackups && cd \u002Fopt\u002Fneo4j\necho \"NEO4J_PASSWORD=$(openssl rand -hex 16)\" > .env\nchmod 600 .env\nchown 7474:7474 backups\n```",{"title":93,"body":94},"É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_AUTH` crée l'utilisateur `neo4j` avec votre mot de passe dès le premier démarrage, et l'adresse Bolt annoncée est celle que nginx publiera en HTTPS.\n```yaml\nservices:\n  neo4j:\n    image: neo4j:2026.10.2-community\n    restart: unless-stopped\n    ports:\n      - \"127.0.0.1:7474:7474\"\n      - \"127.0.0.1:7687:7687\"\n    environment:\n      NEO4J_AUTH: neo4j\u002F${NEO4J_PASSWORD}\n      NEO4J_server_bolt_advertised__address: neo4j.example.com:443\n      NEO4J_server_memory_heap_initial__size: 512m\n      NEO4J_server_memory_heap_max__size: 512m\n      NEO4J_server_memory_pagecache_size: 512m\n    volumes:\n      - neo4j-data:\u002Fdata\n      - neo4j-logs:\u002Flogs\nvolumes:\n  neo4j-data: {}\n  neo4j-logs: {}\n```",{"title":96,"body":97},"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.\n```bash\ndocker compose up -d\ndocker compose ps\ncurl -s http:\u002F\u002F127.0.0.1:7474\u002F\n```",{"type":99,"title":100,"body":101},"tip","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.",{"type":38,"title":103,"body":104},"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.\n\n```nginx\nmap $http_upgrade $neo4j_backend {\n    default   127.0.0.1:7474;\n    websocket 127.0.0.1:7687;\n}\nserver {\n    listen 80;\n    server_name neo4j.example.com;\n    location \u002F {\n        proxy_pass http:\u002F\u002F$neo4j_backend;\n        proxy_http_version 1.1;\n        proxy_set_header Upgrade $http_upgrade;\n        proxy_set_header Connection $http_connection;\n        proxy_set_header Host $host;\n        proxy_set_header X-Forwarded-Proto $scheme;\n        proxy_read_timeout 3600s;\n    }\n}\n```\n\n```bash\ncertbot --nginx -d neo4j.example.com\n```\n\nOuvrez ensuite `https:\u002F\u002Fneo4j.example.com`. Dans Neo4j Browser, saisissez `neo4j+s:\u002F\u002Fneo4j.example.com:443` comme Connect URL, l'utilisateur `neo4j` et votre mot de passe.",{"type":38,"title":106,"body":107},"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.\n\n```cypher\nCREATE CONSTRAINT person_name IF NOT EXISTS FOR (p:Person) REQUIRE p.name IS UNIQUE;\nMERGE (sara:Person {name: 'Sara'})\nMERGE (yassine:Person {name: 'Yassine'})\nMERGE (casa:City {name: 'Casablanca'})\nMERGE (sara)-[:KNOWS]->(yassine)\nMERGE (yassine)-[:LIVES_IN]->(casa);\nMATCH (p:Person {name: 'Sara'})-[:KNOWS*1..2]->(f)-[:LIVES_IN]->(c:City)\nRETURN f.name, c.name;\n```\n\nLe 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.",{"type":38,"title":109,"body":110},"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:\u002F\u002F127.0.0.1:7687`. Depuis votre poste de développement, un tunnel SSH rend le même port accessible sans l'ouvrir sur Internet.\n\n```bash\ncurl -s -u neo4j:$NEO4J_PASSWORD \\\n  -H 'Content-Type: application\u002Fjson' \\\n  -d '{\"statement\": \"MATCH (p:Person) RETURN p.name LIMIT 5\"}' \\\n  https:\u002F\u002Fneo4j.example.com\u002Fdb\u002Fneo4j\u002Fquery\u002Fv2\n```\n\n```python\nfrom neo4j import GraphDatabase\n\ndriver = GraphDatabase.driver(\"bolt:\u002F\u002F127.0.0.1:7687\", auth=(\"neo4j\", \"\u003Cmot-de-passe>\"))\nrecords, _, _ = driver.execute_query(\"MATCH (p:Person) RETURN p.name AS name\")\nprint([r[\"name\"] for r in records])\n```\n\n```bash\nssh -L 7687:127.0.0.1:7687 root@203.0.113.10\n```\n\nUtilisez le schéma `bolt:\u002F\u002F` et non `neo4j:\u002F\u002F` pour une connexion locale : le second demande la table de routage, qui annonce l'adresse publique sur le port 443.",{"type":38,"title":112,"body":113},"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.\n\n```cypher\nCREATE VECTOR INDEX chunk_embedding IF NOT EXISTS\nFOR (c:Chunk) ON c.embedding\nOPTIONS {indexConfig: {`vector.dimensions`: 768, `vector.similarity_function`: 'cosine'}};\n```\n\nLa 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.",{"type":38,"title":115,"body":116},"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.\n\n```bash\ncd \u002Fopt\u002Fneo4j\ndocker compose stop neo4j\ndocker compose run --rm -v \u002Fopt\u002Fneo4j\u002Fbackups:\u002Fbackups neo4j \\\n  neo4j-admin database dump neo4j --to-path=\u002Fbackups --overwrite-destination=true\ndocker compose start neo4j\n```\n\nCopiez ensuite `backups\u002Fneo4j.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.",{"type":38,"title":118,"body":119},"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:\u002F\u002F127.0.0.1:7687`, pour vos applications.","Votre base de données graphe sur un VPS","Un VPS ServOrbit Ubuntu 24.04 avec 2 Go de RAM suffit pour démarrer Neo4j. Installation en un clic depuis le Marketplace, HTTPS sur votre domaine ou sur le sous-domaine gratuit du VPS, mot de passe généré pour vous.","Installer Neo4j","\u002Fapplications\u002Fbases-de-donnees\u002Fneo4j",[125,148,167],{"id":126,"slug":127,"slugs":128,"title":132,"excerpt":133,"readTime":134,"views":135,"isPinned":19,"noindex":19,"publishedAt":136,"updatedAt":137,"category":138,"categories":143,"featuredImage":29,"bgImage":30,"posterImage":145,"relatedSolution":146},65,"heberger-qdrant-vps",{"fr":127,"en":129,"ar":130,"es":131},"hosting-qdrant-on-a-vps","استضافة-qdrant-على-خادم-vps","alojar-qdrant-en-un-vps","Héberger Qdrant sur un VPS","Hébergez Qdrant sur votre VPS : Docker Compose, clé API, TLS, tuning HNSW, quantization, client Python v1, snapshots et monitoring Prometheus.",8,1,"2026-04-16T00:00:00+00:00","2026-10-20T23:18:05+00:00",{"id":139,"name":140,"slug":33,"color":141,"icon":142},6,"Bases de données","bg-teal-500\u002F10 text-teal-400","database",[144],{"id":139,"name":140,"slug":33,"color":141,"icon":142},"\u002Fblog\u002Fcovers\u002Fheberger-qdrant-vps-poster.svg",{"categorySlug":33,"appSlug":147},"qdrant",{"id":149,"slug":150,"slugs":151,"title":155,"excerpt":156,"readTime":157,"views":18,"isPinned":19,"noindex":19,"publishedAt":158,"updatedAt":159,"category":160,"categories":161,"featuredImage":29,"bgImage":30,"posterImage":163,"relatedSolution":164},66,"heberger-weaviate-vps",{"fr":150,"en":152,"ar":153,"es":154},"hosting-weaviate-on-a-vps","استضافة-weaviate-على-خادم-vps","alojar-weaviate-en-un-vps","Héberger Weaviate sur un VPS","Weaviate sur VPS : Docker Compose annoté, clé API, choix du vectorizer, HNSW et quantization, sauvegardes, client Python v4 et dépannage.",12,"2026-04-15T00:00:00+00:00","2026-11-04T16:30:25+00:00",{"id":139,"name":140,"slug":33,"color":141,"icon":142},[162],{"id":139,"name":140,"slug":33,"color":141,"icon":142},"\u002Fblog\u002Fcovers\u002Fheberger-weaviate-vps-poster.svg",{"categorySlug":165,"appSlug":166},"ia","weaviate",{"id":168,"slug":169,"slugs":170,"title":174,"excerpt":175,"readTime":176,"views":135,"isPinned":19,"noindex":19,"publishedAt":177,"updatedAt":178,"category":179,"categories":180,"featuredImage":29,"bgImage":30,"posterImage":182,"relatedSolution":183},56,"heberger-postgresql-vps",{"fr":169,"en":171,"ar":172,"es":173},"postgresql-on-a-vps-a-reliable-and-controlled-database","postgresql-على-خادم-vps-قاعدة-بيانات-موثوقة-ومتحكم-بها","alojar-postgresql-en-un-vps","PostgreSQL sur VPS : base fiable et contrôlée","Hébergez PostgreSQL sur VPS : configuration prod, sauvegardes pgBackRest, haute disponibilité streaming, comparatif RDS\u002FSupabase\u002FNeon et dépannage OOM.",9,"2026-04-25T00:00:00+00:00","2026-10-21T15:21:37+00:00",{"id":139,"name":140,"slug":33,"color":141,"icon":142},[181],{"id":139,"name":140,"slug":33,"color":141,"icon":142},"\u002Fblog\u002Fcovers\u002Fheberger-postgresql-vps-poster.svg",{"categorySlug":33,"appSlug":184},"postgresql-stack",true,1794322453429]