لماذا تستضيف AnythingLLM ذاتيًا على خادم VPS
AnythingLLM هو قبل كل شيء محرك RAG متكامل: استيعاب المستندات وتقطيعها وتحويلها إلى متجهات والبحث الدلالي والتوليد، كل ذلك ضمن واجهة متعددة المستخدمين يمكن الوصول إليها من المتصفح. جوهر الموضوع هو البيانات: التقارير المالية والعقود ووثائق المنتج وقاعدة معرفة الدعم. لا ينبغي لهذه الملفات أن تعبر عبر مزوّد استيعاب SaaS طرف ثالث.
على خادم VPS، يبقى مُضمِّن المستندات وقاعدة البيانات المتجهية (LanceDB المدمجة افتراضيًا) وسجل المحادثات ضمن وحدات تخزين Docker الخاصة بك — لا تتضاعف في أي مكان آخر دون موافقتك. أنت تتحكّم في من يصل إلى أي مساحة عمل، وتختار نموذج LLM بحرية (واجهة برمجة تطبيقات سحابية أو نموذج محلي عبر Ollama)، وتتجنّب حصص الاستيعاب في عروض SaaS.
بالنسبة إلى وكالة تدير عدة عملاء، تصبح كل مساحة عمل صومعة محكمة: مستندات مقسّمة وأذونات مبنية على الأدوار ولا تسرّب بين الفرق. بالنسبة إلى الشركات، الامتثال هو الأولوية: تبقى البيانات على بنيتك التحتية، في ولايتك القضائية، وفق سياسة النسخ الاحتياطي الخاصة بك.
الفوائد الملموسة لاستضافة AnythingLLM ذاتيًا
- مستندات سرية مفهرسة محليًا، لا تُرسَل أبدًا إلى خدمة استيعاب خارجية.
- مساحات عمل مقسّمة حسب العميل أو الفريق، مع إدارة دقيقة للأدوار (مسؤول، مدير، افتراضي).
- قاعدة بيانات متجهية حسب اختيارك: LanceDB مدمجة للبدء، أو Chroma أو Qdrant خارجية للمجموعات الكبيرة.
- الاتصال بأكثر من 20 مزوّد LLM، بما في ذلك Ollama محلي من أجل انعدام الاعتماد على السحابة وصفر تكلفة استدلال.
- لا حدود على عدد المستندات أو الصفحات أو مساحات العمل المُستوعَبة.
- نسخ احتياطي بسيط ومحمول: تتّسع الحالة بأكملها في وحدة تخزين
storageواحدة لأرشفتها أو نسخها. - وكلاء ذكاء اصطناعي مدمجون بدون كود: أنشئ خطوط أتمتة دون مغادرة الواجهة.
- واجهة REST API كاملة لدمج AnythingLLM في تطبيقاتك أو سكريبتات الأتمتة الخاصة بك.
المتطلبات العتادية والبرمجية
حاوية AnythingLLM معقولة في استهلاك الموارد، لكن تضمين مجموعة كبيرة من المستندات يستهلك المعالج وذاكرة RAM بشكل ملحوظ. استهدف 2 vCPU / 2 GB من RAM للبدء بمئات المستندات ونموذج LLM عبر واجهة سحابية. ارتفع إلى 4 vCPU / 8 GB إذا كنت تفهرس آلاف المستندات أو تستخدم نموذج تضمين محليًا أو تشغّل Ollama على المضيف نفسه.
خصّص 15 إلى 20 GB من القرص كحدٍّ أدنى: المتجهات وذاكرة التخزين المؤقت للمستندات تنمو بسرعة، خاصةً مع ملفات PDF كثيفة أو مجموعات متعددة اللغات. أضف هامشًا إذا كنت تنشر أيضًا Qdrant أو Ollama على خادم VPS نفسه.
على صعيد البرمجيات، تحتاج إلى:
- Docker وDocker Compose (v2 موصى به)
- اسم نطاق أو نطاق فرعي يشير إلى خادم VPS (مثل chat.your-domain.com)
- المنفذ 443 مفتوحًا للدخل على جدار الحماية
- مفتاح واجهة LLM API (OpenAI أو Anthropic أو Mistral...) إذا لم تستخدم Ollama محليًا
ملاحظة مهمة حول الإصدارات: قبل أي أمر docker pull، اقرأ قسم تثبيت الإصدار أدناه. سحب :latest دون احتياط قد يُتلف embeddings نهائيًا.
تثبيت الإصدار: حرج وغير قابل للتراجع
لا تستخدم أبدًا الوسم :latest في الإنتاج. أمر docker pull mintplexlabs/anythingllm:latest قد يُكتب فوق مفتاح التشفير الداخلي لـ embeddings المخزّنة في وحدة التخزين، مما يجعل جميع مستنداتك المحوّلة إلى متجهات غير قابلة للقراءة بشكل دائم — دون إمكانية استرداد.
هذا السلوك موثّق كتغيير جذري منذ مارس 2026 (مشكلة GitHub #5256).
القاعدة الواجبة: ثبّت دائمًا إصدارًا محددًا في docker-compose.yml:
image: mintplexlabs/anythingllm:v1.8.4قبل التحديث، اقرأ ملاحظات الإصدار لكل إصدار وسيط، وانسخ احتياطيًا وحدة تخزين storage بالكامل، واختبر ترقية الإصدار على نسخة قبل تطبيقها في الإنتاج.
نشر AnythingLLM باستخدام Docker وHTTPS
إنشاء هيكل المجلدات والأذونات
عبر SSH على خادم VPS، أنشئ دليل العمل ووحدة البيانات:
mkdir -p /opt/anythingllm/storage
cd /opt/anythingllm
chmod -R 777 storageتعمل الحاوية بمعرّف UID مخصّص (غير root): أذونات 777 على storage ضرورية لكي تتمكن العملية الداخلية من كتابة قاعدة البيانات المتجهية وتحميلات المستندات.
كتابة docker-compose.yml مع إصدار مثبّت
أنشئ /opt/anythingllm/docker-compose.yml. لاحظ وسم الإصدار الثابت — لا تستخدم :latest:
services:
anythingllm:
image: mintplexlabs/anythingllm:v1.8.4
container_name: anythingllm
restart: unless-stopped
ports:
- "3001:3001"
volumes:
- ./storage:/app/server/storage
env_file:
- .env
cap_add:
- SYS_ADMINثم أنشئ .env في المجلد نفسه بالحد الأدنى:
JWT_SECRET=غيّر-هذا-إلى-سلسلة-عشوائية-طويلة
STORAGE_DIR=/app/server/storage
LLM_PROVIDER=openai
OPEN_AI_KEY=sk-مفتاح-openai-الخاص-بكاستبدل LLM_PROVIDER والمفتاح وفقًا لمزوّدك. للحصول على Ollama المحلي، انظر الخطوة التالية.
تهيئة Ollama إذا اخترت الحل المحلي بالكامل
إذا كان Ollama يعمل على المضيف نفسه الذي تعمل عليه حاوية AnythingLLM، لا تستخدم localhost — من داخل الحاوية، يشير localhost إلى الحاوية نفسها، وليس إلى المضيف.
عنوان URL الصحيح حسب نظام التشغيل:
- Linux: http://172.17.0.1:11434 (عنوان جسر Docker الافتراضي)
- macOS / Windows: http://host.docker.internal:11434
في ملف .env:
LLM_PROVIDER=ollama
OLLAMA_BASE_PATH=http://172.17.0.1:11434
OLLAMA_MODEL_PREF=llama3.2
EMBEDDING_ENGINE=ollama
EMBEDDING_BASE_PATH=http://172.17.0.1:11434
EMBEDDING_MODEL_PREF=nomic-embed-textتحقّق من أن Ollama يستمع على 0.0.0.0 (وليس فقط 127.0.0.1) بالتحقّق من OLLAMA_HOST=0.0.0.0 في وحدة systemd أو متغيّر البيئة.
بدء الحاوية وإنشاء حساب المسؤول
شغّل الخدمة:
docker compose up -d
docker compose logs -fانتظر السطرين [server] Listening on port 3001 و[database] Migration complete. ثم ادخل إلى http://your-ip:3001 من محطة عملك (وصول مؤقت، يُغلق بعد إعداد الوكيل العكسي). يرشدك معالج الإعداد إلى إنشاء حساب المسؤول واختيار نموذج التضمين ونموذج LLM.
إعداد الوكيل العكسي مع HTTPS
باستخدام Nginx أو Caddy، اعرض AnythingLLM خلف نطاقك.
مثال Caddy (الأبسط، Let's Encrypt تلقائي):
chat.your-domain.com {
reverse_proxy localhost:3001
request_body {
max_size 100MB
}
}مثال Nginx (كتلة server):
server {
listen 443 ssl;
server_name chat.your-domain.com;
ssl_certificate /etc/letsencrypt/live/chat.your-domain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/chat.your-domain.com/privkey.pem;
client_max_body_size 100M;
location / {
proxy_pass http://127.0.0.1:3001;
proxy_set_header Host $host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}توجيه client_max_body_size (Nginx) أو max_size (Caddy) ضروري للسماح برفع ملفات PDF الكبيرة أو أرشيفات المستندات.
إنشاء مساحة عمل واستيعاب المستندات والاختبار
في الواجهة، انقر '+ مساحة عمل جديدة'، وأعطها اسمًا، ثم اسحب بعض ملفات PDF إلى منطقة الرفع. شغّل عملية التضمين (زر 'حفظ وتضمين'). بعد الانتهاء، اطرح سؤالاً في المحادثة — يجب أن تستشهد الإجابات بالمصادر المستخرجة من ملفاتك.
إذا لم تظهر الاستشهادات، تحقّق في إعدادات مساحة العمل من أن وضع RAG مفعّل (خيار 'وضع المحادثة' → 'استعلام')، وأن عدد القطع المُعادة أكبر من 0.
تفعيل وضع تعدّد المستخدمين وتأمين الوصول
في الإعدادات → وضع تعدّد المستخدمين، فعّل الوضع متعدد المستخدمين. ادعُ زملاءك بالبريد الإلكتروني وعيّن الأدوار: المسؤول (وصول كامل)، المدير (إدارة مساحات العمل)، الافتراضي (الاستخدام فقط).
قيّد كل مستخدم بمساحات العمل التي تخصّه فقط. من واجهة الإدارة، يمكنك أيضًا تهيئة SSO أو مصادقة خارجية إذا دعم ذلك مزوّد LLM.
استكشاف الأخطاء: الأخطاء الثلاثة الأكثر شيوعًا
تظهر هذه المشكلات الثلاث بانتظام في مجتمع AnythingLLM. معرفتها قبل النشر توفّر عليك ساعات من التصحيح.
الخطأ 1 — :latest يُتلف embeddings (حرج وغير قابل للتراجع)
إذا حدّثت حاويتك بـ docker pull mintplexlabs/anythingllm:latest، قد تكتب نسخة جديدة فوق مفتاح تشفير embeddings المخزّنة في وحدة التخزين. النتيجة: جميع مستنداتك المحوّلة إلى متجهات تصبح غير قابلة للقراءة، دون إمكانية استرداد. هذا التغيير الجذري موثّق منذ مارس 2026 (المشكلة #5256). الحل: ثبّت دائمًا وسم إصدار محدد في docker-compose.yml ولا تقم بـ pull دون نسخ احتياطي مسبق لوحدة التخزين storage.
الخطأ 2 — وكلاء Gemini معطوبون منذ الإصدار v1.16
منذ AnythingLLM v1.16، يُنتج مزوّد Gemini خطأ اتصال أثناء البث يظل مفتوحًا إلى أجل غير مسمى، مما يحجب الوكيل (المشكلة #6153، لا تزال مفتوحة). الحل البديل: عطّل مزوّد Gemini في إعدادات LLM واستخدم بدلاً من ذلك نقطة نهاية متوافقة مع OpenAI أو انتقل إلى Ollama. لا تحاول التصحيح على مستوى الشبكة — المشكلة في معالجة البث داخل AnythingLLM.
الخطأ 3 — Ollama لا يمكن الوصول إليه من داخل الحاوية
إذا كان Ollama مثبّتًا مباشرةً على المضيف (خارج Docker)، فإن تهيئة http://localhost:11434 في AnythingLLM لا تعمل: من داخل الحاوية، يشير localhost إلى الحاوية نفسها، وليس المضيف. استخدم http://172.17.0.1:11434 على Linux (عنوان IP لجسر Docker) أو http://host.docker.internal:11434 على macOS/Windows. تحقّق أيضًا من أن Ollama يستمع على 0.0.0.0 وليس فقط على 127.0.0.1 (المتغيّر OLLAMA_HOST=0.0.0.0 في خدمة systemd).
بالنسبة إلى المجموعات الكبيرة (أكثر من 10,000 قطعة)، لا تبقَ على LanceDB المدمجة: انشر Qdrant في حاوية مجاورة على شبكة Docker نفسها ووجّه AnythingLLM إليها عبر المتغيّرين VECTOR_DB=qdrant وQDRANT_ENDPOINT=http://qdrant:6333. يتعامل Qdrant بشكل أفضل مع ملايين المتجهات، ويوفّر التصفية حسب البيانات الوصفية ويبقى قابلاً للاستعلام بشكل مستقل، ما يسهّل تصحيح عمليات البحث الدلالي. كما يسهل نسخ وحدة تخزين Qdrant احتياطيًا: docker cp بسيط أو لقطة وحدة تخزين تكفي.
AnythingLLM مقابل Open WebUI: أيّ مساحة عمل ذكاء اصطناعي تناسبك؟
| AnythingLLM | Open WebUI | |
|---|---|---|
| التركيز الأساسي | RAG للمستندات + وكلاء ذكاء اصطناعي | واجهة دردشة لنماذج LLM |
| RAG / استيعاب المستندات | مدمج (PDF وWord وURL وNotion وGitHub...) | رفع ملفات أساسي |
| أداة بناء وكلاء الذكاء الاصطناعي | نعم (دون كود) | لا |
| مزوّدو نماذج LLM | أكثر من 20 (Ollama وOpenAI وAnthropic وMistral...) | Ollama + متوافق مع OpenAI |
| أدوار متعددة المستخدمين | مسؤول / مدير / افتراضي | إدارة مستخدمين أساسية |
| واجهة REST API | واجهة كاملة للمستندات والدردشة | محدودة |
| مخزن المتجهات | LanceDB مدمج + قابل للاستبدال (Qdrant وChroma...) | خارجي عبر إعداد RAG |
| ذاكرة RAM (واجهة API فقط، بدون LLM محلي) | نحو 512 MB | نحو 256 MB |
| خطر :latest | حرج — يُتلف embeddings | أقل توثيقًا |
| الرخصة | MIT | MIT |