لماذا تجمع هذه البيئة بدلاً من استخدام كل أداة منفردةً
تُستشهد بـ Ollama وOpen WebUI وn8n معاً بانتظام على r/selfhosted بوصفها المزيج الأكثر طلباً لإنشاء مسار ذكاء اصطناعي كامل باستضافة ذاتية. السبب بسيط: كل أداة بمفردها تحل ثلث المشكلة فحسب. يعرض Ollama واجهة API محلية متوافقة مع OpenAI — لكن دون واجهة للمستخدمين. يوفّر Open WebUI هذه الواجهة — لكن دون أتمتة. ينسّق n8n مسارات العمل — لكن دون محرّك لغوي مدمج يضطر إلى استدعاء API خارجية مدفوعة. الأدوات الثلاثة معاً تُشكّل مساراً مستقلاً: الاستدلال يبقى على جهازك، والدردشة متاحة من المتصفح، ومساراتك الآلية تستهلك مباشرةً واجهة Ollama المحلية عبر عقدة HTTP Request الأصيلة في n8n، دون مكوّن إضافي ودون رسوم بالرمز. تبقى جميع البيانات — الطلبات والمستندات وسجلات المحادثات — في مجلدات Docker الخاصة بك.
ما تقدّمه هذه البيئة على أرض الواقع
- استدلال خاص — يعمل Mistral 7B وLlama 3 وPhi-3 أو أي نموذج GGUF محلياً؛ لا يغادر أي طلب خادمك أبداً.
- واجهة دردشة متعددة المستخدمين — يعرض Open WebUI حسابات منفصلة وسجلات محادثات معزولة ونقطة نهاية متوافقة مع API OpenAI الخاصة بـ Ollama.
- أتمتة دون مكوّنات إضافية — يستهلك n8n عنوان
http://ollama:11434 عبر عقدة HTTP Request الأصيلة؛ توثيق n8n.io/integrations يؤكد عدم الحاجة إلى أي تبعية إضافية. - تكلفة يمكن التنبؤ بها — سعر VPS شهري واحد يحل محل رسوم الرمز من API سحابية؛ تكفي ذاكرة 8 غيغابايت لـ Mistral 7B وOpen WebUI وn8n في وضع الطابور.
- التحكم في الإصدارات — تتحدث كل أداة باستقلالية؛ لا هجرة قسرية يفرضها مزوّد SaaS.
- قابلية نقل كاملة — يكفي
docker compose down && docker compose upلنقل البيئة إلى VPS أقوى؛ مجلدات Docker تحمل كل الحالة. - صور Docker رسمية موثّقة — يصونها كل مشروع:
docker.io/ollama/ollama وghcr.io/open-webui/open-webui وdocker.io/n8nio/n8n. - شبكة داخلية آمنة — تتواصل الخدمات الثلاث عبر شبكة Docker خاصة؛ لا يُعرض أي منفذ لـ LLM علناً.
المتطلبات: الذاكرة والمعالج والنطاق
الذاكرة العشوائية هي عامل التقييد. يستهلك Ollama مع Mistral 7B بين 5 و6 غيغابايت وفق التكميم المختار (موثّق في مستودع Ollama). يحتاج Open WebUI نحو 256 ميغابايت إضافية، ويضيف n8n في وضع الطابور نحو 512 ميغابايت. يبلغ المجموع إذن نحو 7 غيغابايت في ظل الحمل الخفيف، ما يعني أن خادم VPS بذاكرة 8 غيغابايت يستوعب البيئة الكاملة دون تبادل الذاكرة النشط — الملف الشخصي المرجعي هو {{vps.business.name}} بـ 8 vCPU و16 GB من الذاكرة. للنماذج الأكبر (13 مليار معامل وما فوق)، خطّط لـ 16 غيغابايت. خصص على الأقل 20 غيغابايت للتخزين لطبقات Docker والنماذج. ستحتاج إلى نطاق فرعي لكل خدمة مكشوفة، مع Docker وDocker Compose مثبّتَين، والمنفذ 443 مفتوحاً في جدار الحماية.
نشر البيئة باستخدام Docker Compose
إعداد خادم VPS
تواصل عبر SSH وثبّت Docker إن لم يكن مثبّتاً:
curl -fsSL https://get.docker.com | sh. تحقق من توفر Docker Compose بالأمر docker compose version. أنشئ مجلد عمل: mkdir -p /opt/ia-stack && cd /opt/ia-stack.كتابة ملف docker-compose.yml
أعلن الخدمات الثلاث في ملف
docker-compose.ymlواحد على شبكة داخلية مشتركة:services: ollama: image: docker.io/ollama/ollama volumes: - ollama_data:/root/.ollama networks: - ia restart: unless-stopped open-webui: image: ghcr.io/open-webui/open-webui:main environment: - OLLAMA_BASE_URL=http://ollama:11434 volumes: - webui_data:/app/backend/data networks: - ia restart: unless-stopped n8n: image: docker.io/n8nio/n8n environment: - N8N_BASIC_AUTH_ACTIVE=true - N8N_BASIC_AUTH_USER=admin - N8N_BASIC_AUTH_PASSWORD=غيّر-هذه-الكلمة - WEBHOOK_URL=https://n8n.your-domain.com volumes: - n8n_data:/home/node/.n8n networks: - ia restart: unless-stopped networks: ia: driver: bridge volumes: ollama_data: webui_data: n8n_data:لا يُعرض أي منفذ على المضيف: سيكون الوكيل العكسي البوابة الوحيدة للدخول.
تشغيل الحاويات
شغّل البيئة:
docker compose up -d. تحقق من تشغيل الحاويات الثلاث بـ docker compose ps. لعرض سجلات خدمة: docker compose logs -f ollama. في هذه المرحلة، لا يمكن الوصول إلى أي خدمة من الخارج.تنزيل نموذج إلى Ollama
ادخل إلى حاوية Ollama لتنزيل نموذج:
docker compose exec ollama ollama pull mistral. يُنزّل الأمر النموذج ويضغطه في مجلد ollama_data. تحقق من قائمة النماذج المتاحة بـ docker compose exec ollama ollama list. يكتشف Open WebUI النماذج الموجودة في Ollama تلقائياً عند بدء التشغيل.ضبط الوكيل العكسي
ثبّت Caddy أو Nginx على المضيف لعرض Open WebUI وn8n عبر HTTPS. مع Caddy، يكفي كتلتان في ملف Caddyfile:
chat.your-domain.com { reverse_proxy open-webui:8080 } n8n.your-domain.com { reverse_proxy n8n:5678 }يحصل Caddy على شهادات Let's Encrypt ويجدّدها تلقائياً. لا يُكشف Ollama مباشرةً — يبقى متاحاً فقط للحاويات الأخرى عبر شبكة
ia.إنشاء حساب مدير Open WebUI
افتح
https://chat.your-domain.com في متصفحك. عند أول وصول، يدعوك Open WebUI لإنشاء حساب مدير (بريد إلكتروني + كلمة مرور). هذا الحساب محلي تماماً — لا تنتقل أي بيانات إلى خدمة خارجية. يمكنك بعدها إنشاء حسابات إضافية من واجهة الإدارة واختيار نموذج افتراضي من النماذج التي يُدرجها Ollama.ربط n8n بواجهة API الخاصة بـ Ollama
في n8n (
https://n8n.your-domain.com)، أنشئ مساراً وأضف عقدة HTTP Request. اضبطها كالآتي: الطريقة POST، الرابط http://ollama:11434/api/generate، جسم JSON {"model": "mistral", "prompt": "{{ $json.prompt }}", "stream": false}. يتواصل n8n مع Ollama عبر الشبكة الداخلية لـ Docker — لا مفتاح API، ولا حصة خارجية. هذه العقدة أصيلة في n8n وموثّقة على n8n.io/integrations.
ذاكرة محدودة: تحميل النموذج عند الطلب
يحتفظ Ollama افتراضياً بالنموذج في الذاكرة 5 دقائق بعد آخر طلب ثم يُخرجه. يمكن ضبط هذا السلوك عبر المتغير OLLAMA_KEEP_ALIVE. على VPS بذاكرة 8 غيغابايت، يُحرّر تعيين OLLAMA_KEEP_ALIVE=0 الذاكرة بين استدعاءات n8n المجدولة — مفيد إذا لم يعملا معاً بحمل كامل في وقت واحد. في المقابل، تُبقي OLLAMA_KEEP_ALIVE=-1 النموذج في الذاكرة دائماً لردود دون تأخير تحميل.
تأمين البيئة قبل كشفها
تتعامل بيئة الذكاء الاصطناعي باستضافة ذاتية مع بيانات حساسة: طلبات، مفاتيح مسارات عمل، سجلات محادثات. قبل أي كشف عام، تحقق من ثلاثة أمور. أولاً، أغلق منفذ 11434 الخاص بـ Ollama على المضيف (ufw deny 11434) — يجب أن يكون متاحاً فقط من الشبكة الداخلية لـ Docker؛ إذ يعرض منفذ LLM المفتوح واجهة التوليد دون أي مصادقة. ثانياً، غيّر كلمة مرور المصادقة في n8n ضمن متغيرات البيئة؛ المصادقة الأساسية HTTP مفعّلة افتراضياً في الإعداد أعلاه، لكن استخدم كلمة مرور طويلة وعشوائية. ثالثاً، فعّل المصادقة في Open WebUI: افتراضياً يمكن لأي شخص يصل إلى الرابط إنشاء حساب — قيّد التسجيل بتعطيل ENABLE_SIGNUP بعد إنشاء حساباتك. يجب تضمين مجلدات Docker (ollama_data وwebui_data وn8n_data) في نسخك الاحتياطية المنتظمة؛ إذ تحتوي على الحالة الكاملة للبيئة.
ملفات VPS الشخصية للبيئة
مرّر الجدول أفقيًا
| الملف الشخصي | الذاكرة | حالة الاستخدام الموصى بها |
|---|---|---|
| VPS Start | 4 GB | الاختبار والتطوير — نماذج خفيفة (Phi-3 Mini، Gemma 2B) |
| VPS Power | 8 GB | الاستخدام المعتدل — Mistral 7B، مستخدم أو مستخدمان في آنٍ واحد |
| VPS Business | 16 GB | البيئة الكاملة — Mistral 7B أو Llama 3 8B، فريق عمل، مسارات n8n مجدولة |
حالة استخدام: أتمتة مسار تلخيص مع n8n
توضّح حالة استخدام عملية قيمة البيئة المجمّعة. تخيّل مساراً في n8n يُشغَّل بواسطة Webhook: يستقبل رابط مقالة، يجلب النص عبر عقدة HTTP، ثم يرسله إلى Ollama للتلخيص. تشير عقدة HTTP Request إلى http://ollama:11434/api/generate مع نموذج mistral وطلب من نحو: لخّص هذا النص في 3 نقاط رئيسية: {{$json.text}}. يُحلَّل الرد ويُرسل إلى Slack أو بالبريد أو يُودَع في قاعدة بيانات — حسب العقد التالية في المسار. هذا النوع من المسارات — جلب بيانات ← نموذج لغوي ← إجراء — لا يتطلب مفتاح API خارجياً، ويعمل باستمرار على VPS الخاص بك، ولا يُكلّف أي رسوم بالرمز. ومن المسارات الشائعة الأخرى: تصنيف تذاكر الدعم الواردة، وتوليد أوصاف المنتجات من جداول المواصفات، واستخراج الكيانات من المستندات التعاقدية — وفي كل هذه الحالات تبقى البيانات داخل بنيتك التحتية. للمسارات الأكثر تعقيداً المتضمنة مستندات PDF أو قواعد متجهات، يمكنك إضافة Flowise أو LangFlow على الشبكة نفسها لـ Docker، مستخدماً Ollama كمزوّد استدلال مشترك.
التوثيق الرسمي
لكل أداة توثيق مرجعي للإعداد المتقدم: Ollama على GitHub، وتوثيق Open WebUI، وتوثيق n8n. يغطّي هذا الدليل التجميع على VPS؛ ويبقى توثيق كل مطوّر المرجع للإعدادات الدقيقة والتحديثات الكبرى وحالات الاستخدام الخاصة بكل أداة.