دليل النشر

Neo4j على خادم VPS: قاعدة بيانات رسومية وCypher وGraphRAG

انشر على VPS Cloud ←

Neo4j على خادم VPS: قاعدة بيانات رسومية وCypher وGraphRAG

بعض البيانات لا تناسبها الجداول: من يعرف من، وأي خدمة تعتمد على أخرى، وأي مستند يستشهد بأي عقد. في SQL، يكلّف كل مستوى من العلاقات عملية ربط إضافية. أما Neo4j، قاعدة البيانات الرسومية الأكثر انتشارًا، فتخزّن العُقد وعلاقاتها مباشرة وتستعلم عنها بلغة Cypher. يثبّت هذا الدليل Neo4j Community Edition على خادم افتراضي باستخدام Docker Compose، وينشر Neo4j Browser واتصال Bolt عبر HTTPS على اسم واحد، ثم يربط تطبيقًا ويضع أسس GraphRAG.

7 دقائق للقراءةعدد الخطوات: 3
المحتويات· ما الذي يفعله Neo4j1/12
  1. 01ما الذي يفعله Neo4j
  2. 02ما الذي يقدّمه Neo4j
  3. 03Neo4j مقارنة بالخيارات الأخرى
  4. 04المتطلبات المسبقة
  5. 05تثبيت Neo4j باستخدام Docker Compose
  6. 06لا تنشر أبدًا المنفذين 7474 و7687 على الإنترنت
  7. 07وضع Neo4j خلف nginx عبر HTTPS
  8. 08أولى استعلامات Cypher
  9. 09ربط تطبيق
  10. 10GraphRAG: منح المساعد الذكي حقائق مترابطة
  11. 11النسخ الاحتياطي والتحديث
  12. 12التثبيت بنقرة واحدة على ServOrbit

ما الذي يفعله Neo4j

يسجّل Neo4j عُقدًا — عميلًا أو منتجًا أو خادمًا — تحمل تسميات (:Person و:Product) وخصائص، وتربط بينها علاقات موجّهة ومسمّاة (:KNOWS و:BOUGHT و:DEPENDS_ON). تُخزَّن العلاقة رابطًا مباشرًا بين عقدتين: لا يتطلب تتبعها أي بحث في فهرس، مهما كبر حجم القاعدة.

ويُستعلَم عنه بلغة Cypher، وهي لغة ترسم النمط المطلوب: (a:Person)-[:KNOWS]->(b:Person). وتُكتب المسارات متغيرة الطول (-[:KNOWS*1..3]->) وأقصر المسارات والتجميعات في سطر واحد، حيث تكدّس SQL عمليات الربط أو الاستعلامات العودية.

ما الذي يقدّمه Neo4j

  • Cypher — ‏MATCH وMERGE والمسارات متغيرة الطول وأقصر المسارات، بلغة مقروءة.
  • Neo4j Browser — واجهة ويب تنفّذ الاستعلامات وترسم الرسم البياني الناتج.
  • واجهة HTTP — استعلام Cypher في كل طلب POST، والرد بصيغة JSON، من أي لغة برمجة.
  • مشغّلات Bolt الرسمية — Python وJavaScript وJava وGo و‎.NET.
  • الفهارس والقيود — التفرّد والبحث النصي الكامل والفهارس المتجهية للتضمينات.
  • معاملات ACID — رسم بياني متّسق، حتى عندما تكتب فيه عدة تطبيقات.

Neo4j مقارنة بالخيارات الأخرى

مرّر الجدول أفقيًا

Neo4jPostgreSQLQdrant
النموذجعُقد وعلاقاتجداول وعمليات ربطمتجهات وبيانات وصفية
الاستعلاماتCypherSQLبحث بالتشابه
نقطة القوةعلاقات على عدة مستوياتالمعاملات والبيانات الجدوليةالبحث الدلالي
الدور في RAGحقائق مترابطة وموثّقة المصدربيانات الأعمالمقاطع قريبة من السؤال
التكلفةسعر الخادم الافتراضيسعر الخادم الافتراضيسعر الخادم الافتراضي

المتطلبات المسبقة

خادم افتراضي بنظام Ubuntu 24.04 مع ذاكرة 2 غيغابايت وقرص 20 غيغابايت، وDocker مع إضافة Compose، وnginx وCertbot على المضيف، ونطاق فرعي يشير إلى الخادم، مثل neo4j.example.com. يكون Neo4j في أسرع حالاته حين يتسع الرسم البياني في ذاكرة الصفحات المؤقتة: خطّط لذاكرة أكبر لرسم بياني من عشرات ملايين العُقد.

تثبيت Neo4j باستخدام Docker Compose

  1. تحضير المجلد وكلمة المرور

    يحمل الملف .env كلمة مرور المستخدم neo4j. وسيستقبل المجلد backups النسخ الاحتياطية: وهو مملوك للمستخدم 7474، مستخدم الحاوية.

    mkdir -p /opt/neo4j/backups && cd /opt/neo4j
    echo "NEO4J_PASSWORD=$(openssl rand -hex 16)" > .env
    chmod 600 .env
    chown 7474:7474 backups
  2. كتابة الملف docker-compose.yml

    يُنشر المنفذان على واجهة الحلقة المحلية فقط: 7474 لـ Neo4j Browser وواجهة HTTP، و7687 لـ Bolt. ينشئ NEO4J_AUTH المستخدم neo4j بكلمة مرورك منذ أول تشغيل، وعنوان Bolt المعلَن هو الذي سينشره nginx عبر 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: {}
  3. تشغيل Neo4j

    يستغرق التشغيل الأول نحو ثلاثين ثانية؛ ثم يجيب الجذر بمستند JSON صغير يذكر الإصدار وعناوين الاتصال.

    docker compose up -d
    docker compose ps
    curl -s http://127.0.0.1:7474/

لا تنشر أبدًا المنفذين 7474 و7687 على الإنترنت

أبقِ المنفذين على 127.0.0.1: قاعدة البيانات التي يمكن الوصول إليها مباشرة من الإنترنت تُفحص خلال ساعات. يتولى nginx بروتوكول HTTPS على المنفذ 443، ويمر اتصال Bolt الخاص بالمتصفح عبر الاسم نفسه بتقنية WebSocket. واحتفظ أيضًا بـ NEO4J_AUTH: من دونه يبدأ المستخدم neo4j بكلمة مرور المصنع neo4j التي يعرفها الجميع.

وضع Neo4j خلف nginx عبر HTTPS

يحتاج Neo4j Browser إلى أمرين: واجهة HTTP واتصال Bolt يفتحه المتصفح عبر WebSocket. يوجّه nginx الاثنين على الاسم نفسه: الطلبات العادية إلى 7474، وطلبات WebSocket إلى 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.com

افتح بعد ذلك https://neo4j.example.com. في Neo4j Browser أدخل neo4j+s://neo4j.example.com:443 في حقل Connect URL، ثم المستخدم neo4j وكلمة مرورك.

أولى استعلامات Cypher

في Neo4j Browser، أنشئ قيد تفرّد وبعض العُقد وعلاقاتها، ثم تتبّع مسارًا من مستويين على الأكثر. لا ينشئ MERGE عقدة أو علاقة إلا إذا لم تكن موجودة: يمكن إعادة تشغيل الاستعلام دون تكرار.

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;

يرسم الـ Browser النتيجة؛ ويفتح الأمر :guide دروسه المدمجة، ويعرض :sysinfo حجم القاعدة واستخدام الذاكرة المؤقتة.

ربط تطبيق

من أي لغة برمجة، تستقبل واجهة HTTP استعلام Cypher بطلب POST وتجيب بصيغة JSON، مع مصادقة HTTP الأساسية. أما التطبيق المثبّت على الخادم نفسه فيستخدم مشغّلًا رسميًا عبر Bolt على bolt://127.0.0.1:7687. ومن جهاز التطوير، يجعل نفق SSH المنفذ نفسه متاحًا دون فتحه على الإنترنت.

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/v2
from 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]

استخدم المخطط bolt:// لا neo4j:// للاتصال المحلي: فالثاني يطلب جدول التوجيه الذي يعلن العنوان العام على المنفذ 443.

GraphRAG: منح المساعد الذكي حقائق مترابطة

يسترجع RAG التقليدي مقاطع قريبة من السؤال. ويضيف GraphRAG العلاقات: تصبح الكيانات المستخرجة من المستندات (أشخاص وعقود ومنتجات) عُقدًا مرتبطة ببعضها وبالمقاطع التي تذكرها. ويحمل Neo4j الأمرين في القاعدة نفسها بفضل فهارسه المتجهية.

CREATE VECTOR INDEX chunk_embedding IF NOT EXISTS
FOR (c:Chunk) ON c.embedding
OPTIONS {indexConfig: {`vector.dimensions`: 768, `vector.similarity_function`: 'cosine'}};

يعثر البحث المتجهي على المقاطع ذات الصلة، ثم يتتبع استعلام Cypher علاقاتها لجمع السياق: يجيب المساعد بحقائق مترابطة مع مصدر كل منها. ويمكن أن تأتي التضمينات من نموذج محلي يقدّمه Ollama على الخادم نفسه.

النسخ الاحتياطي والتحديث

في Community Edition يُؤخذ النسخ الاحتياطي والقاعدة متوقفة، باستخدام neo4j-admin database dump: بضع ثوانٍ من التوقف لرسم بياني متوسط الحجم. جدوِله ليلًا.

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 neo4j

انسخ بعد ذلك backups/neo4j.dump خارج الخادم. وللتحديث، غيّر رقم إصدار الصورة في docker-compose.yml ثم نفّذ docker compose pull && docker compose up -d مباشرة بعد نسخة احتياطية؛ واقرأ ملاحظات الإصدار قبل الانتقال إلى إصدار رئيسي جديد.

التثبيت بنقرة واحدة على ServOrbit

من متجر مساحة العميل، يُثبَّت Neo4j على خادم ServOrbit افتراضي دون كتابة سطر واحد: تُنشر Neo4j Community Edition خلف وكيل صغير يقدّم Neo4j Browser وواجهة HTTP واتصال Bolt على منفذ واحد، وتُولَّد كلمة مرور المستخدم neo4j وتُعرض في مساحة العميل، ويُنشر الكل عبر HTTPS على نطاقك أو على النطاق الفرعي المجاني للخادم. ويبقى منفذ Bolt متاحًا محليًا على bolt://127.0.0.1:7687 لتطبيقاتك.

شارك هذا المقالservorbit.com/ma-ar/المدونة/استضافة-neo4j-على-vps-قاعدة-بيانات-رسومية