استضافة Dify ذاتيًا على خادم VPS
Dify منصّة تطبيقات LLM مستضافة ذاتيًا تحتفظ بمفاتيح API الخاصة بك وبياناتك. ثبّتها عبر Docker Compose على خادم VPS وحصّنها بالطريقة الصحيحة.
ما هو Dify، وما الذي تلتزم بتشغيله
Dify منصة قابلة للاستضافة الذاتية لبناء تطبيقات فوق النماذج اللغوية الكبيرة. تحصل فيها على واجهة ويب لتصميم تطبيقات الدردشة والوكلاء ومسارات الاسترجاع (retrieval pipelines)، وواجهة API لاستدعائها من الكود الخاص بك، ومكان واحد لإدارة الموجّهات (prompts) ومجموعات البيانات ومفاتيح النماذج. إنه النوع من الأدوات الذي يقيمه فريق صغير ليبني الجميع على قاعدة خاصة مشتركة واحدة، بدلًا من تبعثر مفاتيح API بين السكربتات.
تشغيله بنفسك يعني تشغيل عدة مكوّنات مترابطة. يأتي Dify على شكل مجموعة من حاويات Docker: خادم API، وعامل خلفي (background worker)، وواجهة ويب أمامية، وقاعدة بيانات Postgres، وذاكرة تخزين مؤقت Redis، وقاعدة بيانات متجهية، كلها موصولة معًا عبر Docker Compose. هذا أكثر من مجرد ملف تنفيذي واحد، لكن Compose يتولى الربط بينها، وخادم VPS يملك بضعة غيغابايتات إضافية من ذاكرة RAM يشغّله دون عناء.
بما أن Dify يحتفظ بمفاتيح API الخاصة بنماذجك، وغالبًا بمستندات خاصة حمّلتها لأغراض الاسترجاع، فعامل الخادم الذي يعمل عليه بوصفه حساسًا منذ أول دقيقة. هذا الدليل يثبّته، ثم يحصّنه بالطريقة نفسها التي تحصّن بها أي خدمة تحتفظ بأسرار.
المتطلبات المسبقة
تحتاج إلى خادم VPS يعمل بنظام Ubuntu 24.04 مع تثبيت Docker وإضافة Docker Compose، ومستخدم يملك صلاحية sudo أو عضوية في مجموعة docker. إذا كان Docker جديدًا عليك، فإن أساسيات Docker Compose على خادم VPS تغطي التثبيت والأوامر الأساسية التي يفترضها هذا الدليل مسبقًا. من المفيد أن يكون لديك اسم نطاق يشير إلى الخادم، لأنك ستريد TLS أمام Dify بدلًا من عنوان IP مجرد.
الخطوة 1: احصل على Dify وملفات Compose الخاصة به
يحتفظ Dify بإعداد Docker الخاص به في المستودع الرئيسي. استنسخه وانتقل إلى دليل docker:
git clone https://github.com/langgenius/dify.git
cd dify/docker
cp .env.example .envملف .env هو كل الإعدادات. اقرأه قبل أن تشغّل أي شيء. القيم التي تهم أولًا هي التي تضبط كلمات المرور والأسرار: SECRET_KEY، وكلمة مرور Postgres، وكلمة مرور Redis. يأتي ملف المثال بقيم نائبة (placeholder)، وترك هذه القيم كما وردت هو الطريقة الأكثر شيوعًا التي تنتهي بها نسخة Dify مستضافة ذاتيًا مخترقة. ولّد مفتاحًا سريًا حقيقيًا:
openssl rand -base64 42الصق ذلك في SECRET_KEY، واضبط قيمة قوية وفريدة لكل حقل كلمة مرور في الملف.
الخطوة 2: شغّله
شغّل الحزمة:
docker compose up -dالتشغيل الأول يسحب عدة صور ويهيئ قاعدة البيانات، فأمهله دقيقة. تحقق من أن الحاويات سليمة:
docker compose psينبغي أن تعرض كل خدمة القيمة running. يقدّم Dify واجهته على الويب عبر حاوية nginx مرفقة على المنفذ 80 افتراضيًا. عند زيارتك الأولى لـ http://YOUR_SERVER/install تُنشئ حساب المسؤول. افعل ذلك فورًا، قبل أن يتمكن أي شيء آخر من الوصول إلى المنفذ، لأنه إلى أن يوجد ذلك الحساب، يستطيع أي شخص يفتح الصفحة أن يستولي عليه ويمتلك نسختك.
الخطوة 3: لا تتركه مكشوفًا. ضع TLS وجدار حماية أمامه
هنا تتوقف معظم عمليات التثبيت السريعة، وهنا تبدأ معظم الحوادث. يستمع nginx الخاص بـ Dify على المنفذ 80، بلا تشفير، على كل الواجهات. أنت لا تريد أن ينتقل تسجيل دخول المسؤول ومفاتيح النماذج لديك عبر HTTP عادي غير مشفّر، ولا تريد أن تكون الخدمات الداخلية قابلة للوصول من الخارج.
أحكم إغلاق الخادم بجدار حماية يرفض كل شيء افتراضيًا ولا يسمح إلا بمرور SSH وحركة الويب:
sudo ufw default deny incoming
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enableتذكّر أن جدار حماية يغطي IPv4 فقط قد يترك المنافذ نفسها مفتوحة على IPv6، وهذه هي ثغرة جدار حماية IPv6 التي تصطاد كثيرًا ممن يستضيفون خدماتهم بأنفسهم. تأكد من أن كلا البروتوكولين مُرشَّح فعلًا.
بالنسبة لـ TLS، أنظف مسار هو ربط منفذ Dify على الويب بعنوان الاسترجاع المحلي (loopback) وتشغيل بروكسي عكسي (reverse proxy) بشهادة Let's Encrypt أمامه، بحيث يكون الشيء الوحيد المكشوف على الإنترنت العام هو البروكسي الذي يستخدم HTTPS. يتيح لك ملف .env الخاص بـ Dify تغيير المنفذ المكشوف؛ اضبطه ليرتبط بعنوان 127.0.0.1 ووجّه بروكسيك إلى ذلك العنوان. أفكار تحصين الوكلاء في تشغيل وكيل ذكاء اصطناعي بأمان على خادم VPS تنطبق هنا أيضًا: أبقِ المكوّنات على عنوان الاسترجاع المحلي، ولا تكشف إلا ما يجب أن يكون عامًا، ودع بابًا أماميًا واحدًا محصّنًا يتولى إدارة TLS.
الخطوة 4: حافظ عليه مُصحَّحًا
يتطور Dify بسرعة، وتتضمن التحديثات إصلاحات أمنية. التحديث هو عملية سحب وإعادة تشغيل من دليل docker:
git pull
docker compose pull
docker compose up -dاقرأ ملاحظات الإصدار قبل الانتقال إلى إصدار رئيسي جديد، لأن Dify يغيّر أحيانًا مخطط .env بين الإصدارات، ومتغيّر جديد لم تضبطه قد يمنع حاوية من البدء.
الخطوة 5: انسخ احتياطيًا ما لا يمكنك إعادة توليده
هناك أمران لا يمكن تعويضهما على خادم Dify: قاعدة بيانات Postgres، التي تحتفظ بتطبيقاتك ومستخدميك وإعداداتك، والوحدة التخزينية (volume) التي تحفظ المستندات المرفوعة والفهرس المتجهي. كلتاهما تعيشان داخل وحدات تخزين Docker في دليل docker. خذ لقطات (snapshots) منهما وفق جدول منتظم، وانسخ تلك اللقطات إلى خارج الخادم. يمكن إعادة إصدار مفتاح API لنموذج ما؛ أما التطبيق الذي أمضيت أسبوعًا في بنائه فلا.
لوكيل أكثر استقلالية وقادر على تنفيذ الكود، راجع استضافة Agent Zero ذاتيًا، ويغطي بناء وكيل ذكاء اصطناعي خاص بك على خادم VPS الأسس التي يقوم عليها كل ما سبق.
FAQ
ما متطلبات النظام لاستضافة Dify ذاتيًا؟
يعمل Dify كحزمة Docker Compose من نحو ست حاويات، فخطّط لخادم VPS يملك 2 GB على الأقل من ذاكرة RAM المتاحة، ويُفضَّل 4 GB، إضافة إلى بضع أنوية معالج ومساحة قرص كافية لمستنداتك المرفوعة والفهرس المتجهي. ضغط الذاكرة مصدره قاعدة البيانات ومخزن المتجهات، لا Dify نفسه.
هل من الآمن كشف Dify مباشرة على المنفذ 80؟
لا. خادم الويب المرفق مع Dify يستمع عبر HTTP عادي، وهو يقف أمام تسجيل دخول المسؤول ومفاتيح API لنماذجك. ضع بروكسي عكسي بشهادة Let's Encrypt أمامه، واربط منفذ Dify نفسه بعنوان الاسترجاع المحلي، ولا تدع سوى بروكسي HTTPS يواجه الإنترنت. اقرن ذلك بجدار حماية يرفض كل شيء افتراضيًا ويغطي IPv4 وIPv6 معًا.
كيف أحدّث نسخة Dify المستضافة ذاتيًا؟
من دليل docker، نفّذ git pull، ثم docker compose pull وdocker compose up -d لجلب الصور الجديدة وإعادة التشغيل. اقرأ ملاحظات الإصدار أولًا، لأن Dify يضيف أحيانًا متغيّرات .env جديدة بين الإصدارات، ومتغيّر مفقود قد يمنع حاوية من الإقلاع.
ما أول شيء ينبغي فعله بعد تثبيت Dify؟
زُر /install وأنشئ حساب المسؤول فورًا. فإلى أن يوجد ذلك الحساب، يستطيع أي شخص يصل إلى الصفحة أن يستولي عليه. أنشئه في اللحظة التي تصبح فيها الحاويات سليمة، وقبل أن تفتح جدار الحماية للعالم.