[{"data":1,"prerenderedAt":187},["ShallowReactive",2],{"seo-verification":3,"blog-استضافة-neo4j-على-vps-قاعدة-بيانات-رسومية-ma-ar":6,"promo-bar-likely":186},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-استضافة-neo4j-على-vps-قاعدة-بيانات-رسومية-ma-ar",{"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,"استضافة-neo4j-على-vps-قاعدة-بيانات-رسومية",{"fr":12,"en":13,"ar":10,"es":14},"self-host-neo4j-vps","self-host-neo4j-vps-graph-database","autoalojar-neo4j-vps-base-de-datos-grafos","Neo4j على خادم VPS: قاعدة بيانات رسومية وCypher وGraphRAG","ثبّت Neo4j على خادم افتراضي باستخدام Docker Compose: استعلامات Cypher وNeo4j Browser وواجهة HTTP خلف nginx عبر HTTPS، ومشغّلات Bolt وفهارس متجهية.",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","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},"قواعد-البيانات","neo4j","بعض البيانات لا تناسبها الجداول: من يعرف من، وأي خدمة تعتمد على أخرى، وأي مستند يستشهد بأي عقد. في SQL، يكلّف كل مستوى من العلاقات عملية ربط إضافية. أما Neo4j، قاعدة البيانات الرسومية الأكثر انتشارًا، فتخزّن العُقد وعلاقاتها مباشرة وتستعلم عنها بلغة Cypher. يثبّت هذا الدليل Neo4j Community Edition على خادم افتراضي باستخدام Docker Compose، وينشر Neo4j Browser واتصال Bolt عبر HTTPS على اسم واحد، ثم يربط تطبيقًا ويضع أسس GraphRAG.",[37,41,51,82,85,98,102,105,108,111,114,117],{"type":38,"title":39,"body":40},"h2","ما الذي يفعله Neo4j","يسجّل Neo4j **عُقدًا** — عميلًا أو منتجًا أو خادمًا — تحمل تسميات (`:Person` و`:Product`) وخصائص، وتربط بينها **علاقات** موجّهة ومسمّاة (`:KNOWS` و`:BOUGHT` و`:DEPENDS_ON`). تُخزَّن العلاقة رابطًا مباشرًا بين عقدتين: لا يتطلب تتبعها أي بحث في فهرس، مهما كبر حجم القاعدة.\n\nويُستعلَم عنه بلغة **Cypher**، وهي لغة ترسم النمط المطلوب: `(a:Person)-[:KNOWS]->(b:Person)`. وتُكتب المسارات متغيرة الطول (`-[:KNOWS*1..3]->`) وأقصر المسارات والتجميعات في سطر واحد، حيث تكدّس SQL عمليات الربط أو الاستعلامات العودية.",{"type":42,"title":43,"items":44},"ul","ما الذي يقدّمه Neo4j",[45,46,47,48,49,50],"**Cypher** — ‏`MATCH` و`MERGE` والمسارات متغيرة الطول وأقصر المسارات، بلغة مقروءة.","**Neo4j Browser** — واجهة ويب تنفّذ الاستعلامات وترسم الرسم البياني الناتج.","**واجهة HTTP** — استعلام Cypher في كل طلب `POST`، والرد بصيغة JSON، من أي لغة برمجة.","**مشغّلات Bolt الرسمية** — Python وJavaScript وJava وGo و‎.NET.","**الفهارس والقيود** — التفرّد والبحث النصي الكامل والفهارس المتجهية للتضمينات.","**معاملات ACID** — رسم بياني متّسق، حتى عندما تكتب فيه عدة تطبيقات.",{"type":52,"title":53,"headers":54,"rows":58},"comparison","Neo4j مقارنة بالخيارات الأخرى",[5,55,56,57],"Neo4j","PostgreSQL","Qdrant",[59,64,69,74,79],[60,61,62,63],"النموذج","عُقد وعلاقات","جداول وعمليات ربط","متجهات وبيانات وصفية",[65,66,67,68],"الاستعلامات","Cypher","SQL","بحث بالتشابه",[70,71,72,73],"نقطة القوة","علاقات على عدة مستويات","المعاملات والبيانات الجدولية","البحث الدلالي",[75,76,77,78],"الدور في RAG","حقائق مترابطة وموثّقة المصدر","بيانات الأعمال","مقاطع قريبة من السؤال",[80,81,81,81],"التكلفة","سعر الخادم الافتراضي",{"type":38,"title":83,"body":84},"المتطلبات المسبقة","خادم افتراضي بنظام Ubuntu 24.04 مع ذاكرة 2 غيغابايت وقرص 20 غيغابايت، وDocker مع إضافة Compose، وnginx وCertbot على المضيف، ونطاق فرعي يشير إلى الخادم، مثل `neo4j.example.com`. يكون Neo4j في أسرع حالاته حين يتسع الرسم البياني في ذاكرة الصفحات المؤقتة: خطّط لذاكرة أكبر لرسم بياني من عشرات ملايين العُقد.",{"type":86,"title":87,"steps":88},"steps","تثبيت Neo4j باستخدام Docker Compose",[89,92,95],{"title":90,"body":91},"تحضير المجلد وكلمة المرور","يحمل الملف `.env` كلمة مرور المستخدم `neo4j`. وسيستقبل المجلد `backups` النسخ الاحتياطية: وهو مملوك للمستخدم 7474، مستخدم الحاوية.\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},"كتابة الملف docker-compose.yml","يُنشر المنفذان على واجهة الحلقة المحلية فقط: 7474 لـ Neo4j Browser وواجهة HTTP، و7687 لـ Bolt. ينشئ `NEO4J_AUTH` المستخدم `neo4j` بكلمة مرورك منذ أول تشغيل، وعنوان Bolt المعلَن هو الذي سينشره nginx عبر 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},"تشغيل Neo4j","يستغرق التشغيل الأول نحو ثلاثين ثانية؛ ثم يجيب الجذر بمستند JSON صغير يذكر الإصدار وعناوين الاتصال.\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","لا تنشر أبدًا المنفذين 7474 و7687 على الإنترنت","أبقِ المنفذين على `127.0.0.1`: قاعدة البيانات التي يمكن الوصول إليها مباشرة من الإنترنت تُفحص خلال ساعات. يتولى nginx بروتوكول HTTPS على المنفذ 443، ويمر اتصال Bolt الخاص بالمتصفح عبر الاسم نفسه بتقنية WebSocket. واحتفظ أيضًا بـ `NEO4J_AUTH`: من دونه يبدأ المستخدم `neo4j` بكلمة مرور المصنع `neo4j` التي يعرفها الجميع.",{"type":38,"title":103,"body":104},"وضع Neo4j خلف nginx عبر HTTPS","يحتاج Neo4j Browser إلى أمرين: واجهة HTTP واتصال Bolt يفتحه المتصفح عبر WebSocket. يوجّه nginx الاثنين على الاسم نفسه: الطلبات العادية إلى 7474، وطلبات WebSocket إلى 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\nافتح بعد ذلك `https:\u002F\u002Fneo4j.example.com`. في Neo4j Browser أدخل `neo4j+s:\u002F\u002Fneo4j.example.com:443` في حقل Connect URL، ثم المستخدم `neo4j` وكلمة مرورك.",{"type":38,"title":106,"body":107},"أولى استعلامات Cypher","في Neo4j Browser، أنشئ قيد تفرّد وبعض العُقد وعلاقاتها، ثم تتبّع مسارًا من مستويين على الأكثر. لا ينشئ `MERGE` عقدة أو علاقة إلا إذا لم تكن موجودة: يمكن إعادة تشغيل الاستعلام دون تكرار.\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\nيرسم الـ Browser النتيجة؛ ويفتح الأمر `:guide` دروسه المدمجة، ويعرض `:sysinfo` حجم القاعدة واستخدام الذاكرة المؤقتة.",{"type":38,"title":109,"body":110},"ربط تطبيق","من أي لغة برمجة، تستقبل **واجهة HTTP** استعلام Cypher بطلب `POST` وتجيب بصيغة JSON، مع مصادقة HTTP الأساسية. أما التطبيق المثبّت على الخادم نفسه فيستخدم **مشغّلًا رسميًا** عبر Bolt على `bolt:\u002F\u002F127.0.0.1:7687`. ومن جهاز التطوير، يجعل نفق SSH المنفذ نفسه متاحًا دون فتحه على الإنترنت.\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\nاستخدم المخطط `bolt:\u002F\u002F` لا `neo4j:\u002F\u002F` للاتصال المحلي: فالثاني يطلب جدول التوجيه الذي يعلن العنوان العام على المنفذ 443.",{"type":38,"title":112,"body":113},"GraphRAG: منح المساعد الذكي حقائق مترابطة","يسترجع RAG التقليدي مقاطع قريبة من السؤال. ويضيف **GraphRAG** العلاقات: تصبح الكيانات المستخرجة من المستندات (أشخاص وعقود ومنتجات) عُقدًا مرتبطة ببعضها وبالمقاطع التي تذكرها. ويحمل Neo4j الأمرين في القاعدة نفسها بفضل فهارسه المتجهية.\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\nيعثر البحث المتجهي على المقاطع ذات الصلة، ثم يتتبع استعلام Cypher علاقاتها لجمع السياق: يجيب المساعد بحقائق مترابطة مع مصدر كل منها. ويمكن أن تأتي التضمينات من نموذج محلي يقدّمه Ollama على الخادم نفسه.",{"type":38,"title":115,"body":116},"النسخ الاحتياطي والتحديث","في Community Edition يُؤخذ النسخ الاحتياطي والقاعدة متوقفة، باستخدام `neo4j-admin database dump`: بضع ثوانٍ من التوقف لرسم بياني متوسط الحجم. جدوِله ليلًا.\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\nانسخ بعد ذلك `backups\u002Fneo4j.dump` خارج الخادم. وللتحديث، غيّر رقم إصدار الصورة في `docker-compose.yml` ثم نفّذ `docker compose pull && docker compose up -d` مباشرة بعد نسخة احتياطية؛ واقرأ ملاحظات الإصدار قبل الانتقال إلى إصدار رئيسي جديد.",{"type":38,"title":118,"body":119},"التثبيت بنقرة واحدة على ServOrbit","من متجر مساحة العميل، يُثبَّت Neo4j على خادم ServOrbit افتراضي دون كتابة سطر واحد: تُنشر Neo4j Community Edition خلف وكيل صغير يقدّم Neo4j Browser وواجهة HTTP واتصال Bolt على منفذ واحد، وتُولَّد كلمة مرور المستخدم `neo4j` وتُعرض في مساحة العميل، ويُنشر الكل عبر HTTPS على نطاقك أو على النطاق الفرعي المجاني للخادم. ويبقى منفذ Bolt متاحًا محليًا على `bolt:\u002F\u002F127.0.0.1:7687` لتطبيقاتك.","قاعدة بياناتك الرسومية على خادم افتراضي","يكفي خادم ServOrbit افتراضي بنظام Ubuntu 24.04 وذاكرة 2 غيغابايت لتشغيل Neo4j. تثبيت بنقرة واحدة من المتجر، وHTTPS على نطاقك أو على النطاق الفرعي المجاني للخادم، وكلمة مرور مولَّدة لك.","تثبيت Neo4j","\u002Fapplications\u002Fقواعد-البيانات\u002Fneo4j",[125,149,168],{"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":144,"featuredImage":29,"bgImage":30,"posterImage":146,"relatedSolution":147},65,"استضافة-qdrant-على-خادم-vps",{"fr":129,"en":130,"ar":127,"es":131},"heberger-qdrant-vps","hosting-qdrant-on-a-vps","alojar-qdrant-en-un-vps","استضافة Qdrant على خادم VPS","استضِف ‎Qdrant‎ على خادمك الـ‎VPS‎: ‎Docker Compose‎ ومفتاح ‎API‎ و‎TLS‎ وضبط ‎HNSW‎ والتكميم وعميل ‎Python v1‎ واللقطات ومراقبة ‎Prometheus‎.",8,1,"2026-04-16T00:00:00+00:00","2026-10-20T23:18:05+00:00",{"id":139,"name":140,"slug":141,"color":142,"icon":143},6,"قواعد البيانات","bases-de-donnees","bg-teal-500\u002F10 text-teal-400","database",[145],{"id":139,"name":140,"slug":141,"color":142,"icon":143},"\u002Fblog\u002Fcovers\u002Fheberger-qdrant-vps-poster.svg",{"categorySlug":33,"appSlug":148},"qdrant",{"id":150,"slug":151,"slugs":152,"title":156,"excerpt":157,"readTime":158,"views":18,"isPinned":19,"noindex":19,"publishedAt":159,"updatedAt":160,"category":161,"categories":162,"featuredImage":29,"bgImage":30,"posterImage":164,"relatedSolution":165},66,"استضافة-weaviate-على-خادم-vps",{"fr":153,"en":154,"ar":151,"es":155},"heberger-weaviate-vps","hosting-weaviate-on-a-vps","alojar-weaviate-en-un-vps","استضافة Weaviate على خادم VPS","Weaviate على خادم VPS: ملف Docker Compose مشروح، مفتاح API، اختيار الـvectorizer، فهرس HNSW والضغط، النسخ الاحتياطي، عميل Python v4 وحل الأعطال.",12,"2026-04-15T00:00:00+00:00","2026-11-04T16:30:25+00:00",{"id":139,"name":140,"slug":141,"color":142,"icon":143},[163],{"id":139,"name":140,"slug":141,"color":142,"icon":143},"\u002Fblog\u002Fcovers\u002Fheberger-weaviate-vps-poster.svg",{"categorySlug":166,"appSlug":167},"الذكاء-الاصطناعي","weaviate",{"id":169,"slug":170,"slugs":171,"title":175,"excerpt":176,"readTime":177,"views":135,"isPinned":19,"noindex":19,"publishedAt":178,"updatedAt":179,"category":180,"categories":181,"featuredImage":29,"bgImage":30,"posterImage":183,"relatedSolution":184},56,"postgresql-على-خادم-vps-قاعدة-بيانات-موثوقة-ومتحكم-بها",{"fr":172,"en":173,"ar":170,"es":174},"heberger-postgresql-vps","postgresql-on-a-vps-a-reliable-and-controlled-database","alojar-postgresql-en-un-vps","‎PostgreSQL على خادم VPS: قاعدة بيانات موثوقة ومتحكَّم بها","‎استضف PostgreSQL على VPS: إعداد الإنتاج، نسخ pgBackRest، HA بالبث، مقارنة RDS\u002FSupabase\u002FNeon واستكشاف أخطاء OOM.",9,"2026-04-25T00:00:00+00:00","2026-10-21T15:21:37+00:00",{"id":139,"name":140,"slug":141,"color":142,"icon":143},[182],{"id":139,"name":140,"slug":141,"color":142,"icon":143},"\u002Fblog\u002Fcovers\u002Fheberger-postgresql-vps-poster.svg",{"categorySlug":33,"appSlug":185},"postgresql-stack",true,1794321938608]