دليل النشر

كيفية استضافة PrivateGPT على خادم VPS

انشر على VPS Cloud ←

دليل عملي

الذكاء الاصطناعي

كيفية استضافة PrivateGPT على خادم VPS

يتيح لك PrivateGPT طرح أسئلة على مستنداتك الخاصة (PDF وWord والبريد الإلكتروني) عبر ذكاء اصطناعي، دون أن تغادر أي بيانات بنيتك التحتية. إنه حل RAG مصمّم من أجل سرّية مطلقة. تمنحك استضافته على خادم VPS مساعدًا مستنديًا خاصًا يمكن الوصول إليه عن بُعد.

9 دقائق للقراءةعدد الخطوات: 6
المحتويات· لماذا تستضيف PrivateGPT ذاتيًا على خادم VPS1/9
  1. 01لماذا تستضيف PrivateGPT ذاتيًا على خادم VPS
  2. 02فوائد ملموسة للاستضافة الذاتية
  3. 03PrivateGPT وOllama: دوران متكاملان
  4. 04PrivateGPT مقابل Ollama: من يفعل ماذا
  5. 05المتطلبات المادية والبرمجية
  6. 06قائمة التحقق قبل التثبيت
  7. 07نشر PrivateGPT في الوضع المحلي
  8. 08النسخ الاحتياطي والتحقق من عدم خروج أي بيانات
  9. 09استكشاف الأخطاء: الأعطال الأكثر شيوعًا

لماذا تستضيف PrivateGPT ذاتيًا على خادم VPS

صُمّم PrivateGPT حول RAG (التوليد المعزَّز بالاسترجاع): فهو يستوعب مستنداتك، ويقطّعها إلى أجزاء، ويحسب تضمينات (embeddings) تُخزَّن في قاعدة بيانات متجهية (Qdrant افتراضيًا، في وضع القرص المحلي)، ثم يجيب عن الأسئلة اعتمادًا على هذه المجموعة مع الإشارة إلى المقاطع التي استند إليها. ومنذ الإصدار 1.0 الصادر في يونيو 2026، لم يعد PrivateGPT يشغّل النماذج بنفسه: بل يتصل بخادم استدلال متوافق مع OpenAI (مثل Ollama أو llama.cpp أو vLLM) تثبّته إلى جانبه على الخادم نفسه. وهكذا يبقى نموذج LLM والتضمينات والفهرس على جهازك، ولا يخرج أي طلب نحو مزوّد ذكاء اصطناعي.

على خادم VPS مخصّص، تحصل على مساعد مستندي مؤسسي معزول عن أجهزة الموظفين، مع قاعدة معرفة مركزية يستعلم منها الفريق كله، دون أن تعرّض العقود أو ملفات الموارد البشرية أو المستندات القانونية لخدمة سحابية. وللمسألة جانب قانوني أيضًا: لصق مستند يحتوي على بيانات شخصية في واجهة API لذكاء اصطناعي مستضاف يجعل هذا المزوّد معالجًا للبيانات بالمعنى الوارد في اللائحة العامة لحماية البيانات (RGPD)، ويجب أن تخضع المعالجة لعقد (المادة 28، الفقرة 3). أما المعالجة التي تبقى على خادمك فلا تضيف هذه الحلقة.

فوائد ملموسة للاستضافة الذاتية

  • سرّية تامة: المستندات والتضمينات وفهرس Qdrant لا تغادر الخادم أبدًا
  • إجابات موثّقة المصدر: كل إجابة تستند إلى مقاطع مستخرجة من ملفاتك، لا إلى الذاكرة العامة للنموذج
  • لا تكاليف API عندما يعمل النموذج محليًا عبر Ollama أو llama.cpp
  • استيعاب ملفات PDF وDOCX وPPTX وEPUB وCSV وMarkdown وأرشيفات البريد .mbox، بل والصور والملفات الصوتية، مرتّبةً في مجموعات (collections)
  • واجهة API من نوع Messages (مستوحاة من مواصفات واجهة Anthropic) لربط PrivateGPT بأدواتك الداخلية
  • امتثال أيسر للبيانات الحساسة (RGPD والسرّ المهني): لا معالج ذكاء اصطناعي إضافي

PrivateGPT وOllama: دوران متكاملان

كثيرًا ما يُخلط بين الأداتين، مع أنهما تشغلان طبقتين مختلفتين من البنية. Ollama هو خادم نماذج: ينزّل نماذج LLM ونماذج التضمين، ويحمّلها في الذاكرة، ويعرض واجهة API على المنفذ 11434. ولا يعرف شيئًا عن ملفاتك: فهو يجيب انطلاقًا من السياق الذي يُرسَل إليه.

أما PrivateGPT (المستودع zylon-ai/private-gpt، برخصة Apache-2.0) فهو طبقة تطبيق RAG: يفهرس مستنداتك، ويسترجع المقاطع المناسبة لكل سؤال، ويحقنها في السياق المرسَل إلى Ollama. لذلك لا يعمل الإصدار 1.0 منفردًا أبدًا: فإن لم يجد خادم استدلال متاحًا، يبدأ دون أي نموذج.

PrivateGPT مقابل Ollama: من يفعل ماذا

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

المعيارPrivateGPT 1.0Ollama
الدورتطبيق RAG: استيعاب وبحث وإجابات مع مصادرهاخادم استدلال: يحمّل النماذج ويشغّلها
تشغيل النموذجلا: يفوّضه إلى خادم متوافق مع OpenAIنعم، على CPU أو GPU
قراءة ملفاتكنعم: PDF وDOCX وCSV و`.mbox`… حسب المجموعاتلا: السياق يُقدَّم يدويًا
قاعدة البيانات المتجهيةQdrant (قرص محلي افتراضيًا)لا شيء
الواجهةWorkbench على `/ui` دون أي تحكم في الوصولواجهة REST API دون واجهة ويب على الخادم
المنفذ الافتراضي`8080``11434`، مربوط بالعنوان `127.0.0.1`

المتطلبات المادية والبرمجية

تُحدَّد الذاكرة وفق النموذج الذي يقدّمه Ollama، لا وفق PrivateGPT نفسه. النماذج المقترحة افتراضيًا في التوثيق تستهدف جهازًا مزوّدًا بـ GPU (qwen3.5:35b، نحو 24 غيغابايت للتنزيل)؛ أما على خادم VPS يعمل بالمعالج فقط، فاختر نسخة أخف من العائلة نفسها: qwen3.5:4b (من 3.3 إلى 4 غيغابايت) أو qwen3.5:9b (من 6.6 إلى 7.6 غيغابايت)، مع mxbai-embed-large (نحو 670 ميغابايت) للتضمينات. احسب 8 غيغابايت من الذاكرة للنسخة 4b و16 غيغابايت للنسخة 9b، لتترك مساحة للنظام ولـ Qdrant وللمستندات قيد الاستيعاب، و4 وحدات vCPU على الأقل: فعلى المعالج، عدد الأنوية هو ما يحدّد سرعة التوليد.

خصّص 30 غيغابايت من القرص، ويُفضَّل NVMe، للنماذج وفهرس Qdrant والمستندات المستوعَبة: فاستيعاب ملف PDF كبير يقرأ ويكتب كثيرًا. ومن الناحية البرمجية: Docker (أو Python 3.11 وuv إن ثبّتَّ الحزمة خارج حاوية)، وOllama، ونطاق يشير إلى الخادم لعرض الواجهة خلف وكيل عكسي (reverse proxy).

قائمة التحقق قبل التثبيت

  • خادم VPS بذاكرة 8 غيغابايت على الأقل (16 غيغابايت لنموذج بتسعة مليارات معامل) و4 وحدات vCPU
  • Debian 12 أو Ubuntu 24.04 محدَّث، مع وصول SSH بصلاحيات sudo
  • Docker مثبّت (الأمر docker version يستجيب)، وإلا فـ uv مع Python 3.11
  • 30 غيغابايت متاحة على القرص، ويُفضَّل NVMe، للنماذج والمجلد local_data/
  • نطاق فرعي (مثل docs.your-domain.com) يشير إلى عنوان IP الخاص بالخادم
  • جدار حماية مفعَّل: لا يُفتح إلا SSH و80 و443، ويبقى المنفذان 8080 و11434 مغلقين

نشر PrivateGPT في الوضع المحلي

  1. تثبيت Ollama وتنزيل النماذج

    ثبّت Ollama بالسكربت الرسمي، ثم نزّل نموذج LLM مناسبًا للمعالج ونموذج التضمين الموصى به:

    curl -fsSL https://ollama.com/install.sh | sh
    ollama pull qwen3.5:4b
    ollama pull mxbai-embed-large

    افتراضيًا، لا يستمع Ollama إلا على 127.0.0.1:11434: أبقِه كذلك، فـ PrivateGPT وحده يحتاج إلى الوصول إليه. هذه هي الخطوة الوحيدة التي تحتاج إلى الإنترنت؛ فبعد تنزيل النماذج يجري الاستدلال دون اتصال.

  2. تشغيل PrivateGPT عبر Docker

    تتضمن الصورة الرسمية zylonai/private-gpt الحزمة core. على Linux، يجب أن تشارك الحاوية شبكة المضيف لتصل إلى Ollama على localhost، ويجب أن يحفظ مجلدٌ مركَّب (volume) البيانات، وإلا اختفت المستندات المستوعَبة عند إعادة التشغيل:

    mkdir -p /opt/privategpt/local_data
    docker run -d --name privategpt --restart unless-stopped \
      --network host \
      -e OPENAI_API_BASE=http://localhost:11434/v1 \
      -v /opt/privategpt/local_data:/home/worker/app/local_data \
      zylonai/private-gpt:latest

    عند الإقلاع، يستدعي PrivateGPT المسار GET /v1/models على Ollama ويسجّل النماذج التي يجدها تلقائيًا: لا حاجة إلى أي ملف إعدادات. ولا يلزم المتغير OPENAI_EMBEDDING_API_BASE إلا إذا كانت التضمينات تُقدَّم من مكان آخر.

  3. استيعاب مستنداتك حسب المجموعات

    أرسل ملفاتك إلى واجهة الاستيعاب مع تجميعها في مجموعات، كأن تخصّص مجموعة لكل ملف عميل أو لكل قسم:

    curl -X POST http://localhost:8080/v1/artifacts/ingest \
      -F "file=@/srv/documents/contrat-cession.pdf" \
      -F "collection=legal"
    curl "http://localhost:8080/v1/artifacts/list?collection=legal"

    يقطّع PrivateGPT كل ملف ويحوّله إلى متجهات ويفهرسه في Qdrant. أما الصيغ التي لا قارئ مخصّصًا لها فتُقرأ نصًا عاديًا.

  4. الاستعلام عن المجموعة مع ذكر المصادر

    اختبر أولًا في Workbench (http://localhost:8080/ui)، ثم اربط أدواتك بواجهة Messages. يمرّ البحث في المستندات عبر الأداة المدمجة semantic_search_v1 مقصورةً على مجموعة واحدة:

    curl http://localhost:8080/v1/messages \
      -H "Content-Type: application/json" \
      -d '{"model": "qwen3.5:4b",
           "messages": [{"role": "user", "content": "ما الشروط الواقفة في العقد؟"}],
           "tools": [{"name": "search_docs", "type": "semantic_search_v1",
                      "context": [{"type": "ingested_artifact", "context_filter": {"collection": "legal"}}]}]}'
  5. إعداد الوكيل العكسي وشهادة SSL والمصادقة

    لا يملك Workbench أي تحكم في الوصول: والتوثيق يقصره على الاستخدام المحلي. لا تعرضه إلا خلف Nginx أو Caddy، مع شهادة Let's Encrypt ومصادقة أساسية:

    server {
        listen 443 ssl;
        server_name docs.your-domain.com;
        ssl_certificate     /etc/letsencrypt/live/docs.your-domain.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/docs.your-domain.com/privkey.pem;
        auth_basic           "Restricted access";
        auth_basic_user_file /etc/nginx/.htpasswd;
        location / { proxy_pass http://127.0.0.1:8080; }
    }

    وإن كان مستخدموه شخصين أو ثلاثة فقط، فإن نفق SSH (ssh -L 8080:127.0.0.1:8080 user@your-vps) يغنيك عن أي عرض علني.

  6. إحكام إغلاق الوصول

    يستمع PrivateGPT افتراضيًا على 0.0.0.0، ولذلك تنشر شبكة المضيف المنفذ 8080 على كل الواجهات. أغلقه في جدار الحماية حتى لا يبقى متاحًا سوى الوكيل العكسي:

    ufw default deny incoming
    ufw allow OpenSSH
    ufw allow 80,443/tcp
    ufw enable

    يمرّ مستخدموك عندها عبر https://docs.your-domain.com ويستعلمون عن المستندات بلغة طبيعية.

لا يستطيع Ollama الإعلان عن نافذة السياق لنماذجه، فيكتفي PrivateGPT بتقدير تقريبي لعدد الرموز (tokens): ومع المستندات الطويلة قد تصل الإجابات مبتورة. صرّح بالقيمة context_window صراحةً في ملف تعريف للنموذج (ملف settings-<name>.yaml يُفعَّل عبر PGPT_PROFILES)، بقيمة أدنى بوضوح من الحد الفعلي للنموذج. وثبّت نموذج التضمين منذ البداية: فتغييره لاحقًا يسبّب الخطأ «Embedding dimensions mismatch» ويفرض إعادة فهرسة المجموعة كلها (قيمة embed_dim هي 1024 للنموذج mxbai-embed-large).

النسخ الاحتياطي والتحقق من عدم خروج أي بيانات

ما الذي يجب نسخه احتياطيًا. الحالة الكاملة لـ PrivateGPT موجودة في /opt/privategpt/local_data (فهرس Qdrant في local_data/qdrant والملفات المستوعَبة)، إضافةً إلى مستنداتك الأصلية وملفات التعريف settings-*.yaml إن وُجدت. أما نماذج Ollama فيمكن تنزيلها من جديد، فلا داعي لنسخها. أوقف الحاوية أثناء النسخ (docker stop privategpt)، أو انسخ لقطة من المجلد المركَّب: فالفهرس المنسوخ أثناء الاستيعاب قد يكون غير متّسق. ولعدة نسخ تشغيل أو لفريق كبير، يوصي التوثيق بخادم Qdrant مستقل بدلًا من وضع القرص المحلي.

مراقبة حركة المرور الصادرة. السرّية خاصية في البنية، ويمكن التحقق منها. أثناء سلسلة من الأسئلة، اعرض الاتصالات القائمة: لا ينبغي أن يظهر إلا اتصال PrivateGPT بالعنوان 127.0.0.1:11434، واتصالات الوكيل العكسي، وجلسة SSH الخاصة بك.

ss -tnp state established

وأي اتصال صادر غير متوقع يستحق تفسيرًا قبل أن تأتمن الأداة على مستندات حساسة.

استكشاف الأخطاء: الأعطال الأكثر شيوعًا

يبدأ PrivateGPT دون أي نموذج. لم يكن Ollama يعمل عند إقلاع الحاوية، أو أن OPENAI_API_BASE خاطئ: يجب أن ينتهي العنوان بـ /v1. تحقّق عبر curl http://localhost:11434/v1/models، ثم أعد تشغيل الحاوية (docker restart privategpt).

الخطأ «Connection refused» من داخل الحاوية. في حاوية على شبكة bridge، يشير localhost إلى الحاوية نفسها. على Linux احتفظ بالخيار --network host؛ وعلى macOS أو Windows استهدف host.docker.internal.

الخطأ «Embedding dimensions mismatch» أثناء الاستيعاب. بُني الفهرس بنموذج تضمين آخر. عُد إلى النموذج الأصلي، أو أفرغ مخزن المتجهات (make wipe في المستودع) ثم أعد استيعاب المستندات.

إجابات مبتورة مع المستندات الطويلة. نافذة السياق مقدَّرة تقديرًا خاطئًا: صرّح بالقيمة context_window في ملف تعريف للنموذج (انظر النصيحة أعلاه).

توقّف Ollama في منتصف الإجابة. نفدت ذاكرة النواة (OOM): يؤكد ذلك الأمر dmesg | grep -i oom. انتقل إلى نسخة أصغر من النموذج أو زِد الذاكرة.

الخطأ «Address already in use» عند الإقلاع. المنفذ 8080 مشغول: في Docker عرّف المتغير PORT (مثلًا -e PORT=8090)، وخارج الحاوية استخدم الخيار --port للأمر private-gpt serve، ثم عدّل proxy_pass في Nginx.

ابنِ مساعدك المستندي الخاص

يوفّر خادم VPS Cloud من ServOrbit ذاكرة RAM ومساحة تخزين SSD اللازمة لتشغيل PrivateGPT وقاعدة بياناته المتجهية Qdrant محليًا، مع Docker مُهيّأ مسبقًا لنشر RAG سريع.