SSD Nodes Learn 🎉 VPS من $4.99/شهر
الأدلة Matt Connorبقلم Matt Connor · آخر تحديث في 2026-08-07

أفضل بدائل Open WebUI لـ VPS بعنوان IP عام

قارن Open WebUI وLibreChat وHollama وOrionChat على VPS: اعرف استهلاك RAM المتبقي للنموذج، وتسجيل الدخول، والوصول إلى Ollama عن بُعد، ومتطلبات الصيانة.

ما البديل المناسب لـ Open WebUI على VPS

تُقارَن بدائل Open WebUI في الغالب على حاسوب محمول، حيث تكون ذاكرة RAM رخيصة ولا تستمع أي خدمة على عنوان عام. يغيّر VPS كلا الأمرين، ولذلك يتغيّر ترتيب البدائل. يظل Open WebUI الخيار الافتراضي المناسب بمجرد تسجيل شخص ثانٍ، لأنه يوفّر حسابات مستخدمين فعلية ولوحة إدارة. تتفوّق المشاريع الأخف عندما تنافس الواجهة النموذج على آخر جيجابايت من RAM. لكن ثمن ذلك هو المصادقة: فهي غير متوفرة فيها.

يستند كل ما يلي إلى وثائق كل مشروع نفسه، بعد الاطلاع عليها في August 2026. والمحاور الأربعة هي العوامل التي لا تظهر إلا بعد أن يصبح الخادم قابلاً للوصول من الإنترنت.

أربعة محاور لا تهم إلا عند استخدام عنوان IP عام

  • الذاكرة إلى جانب النموذج. خادم النموذج هو العملية الأعلى استهلاكاً للموارد على الخادم. كل ميغابايت تحتفظ به الواجهة هو ميغابايت لا يستطيع النموذج استخدامه.
  • المصادقة. تتضمن بعض هذه المشاريع حسابات للمستخدمين وأدواراً. بينما تفترض مشاريع أخرى أنها التطبيق الوحيد الذي يعمل على حاسوبك المحمول، ولا تتضمن تسجيل دخول إطلاقاً.
  • الاستدلال عن بُعد. الواجهة التي لا تستطيع الوصول إلا إلى 127.0.0.1:11434 تفرض تشغيل النموذج على الخادم نفسه الذي يستضيف الواجهة.
  • الصيانة. تشغيل حاوية واحدة مع ملف SQLite يختلف عن تشغيل ست حاويات تعتمد عليها MongoDB وقاعدة بيانات متجهات.

ما مقدار ذاكرة RAM التي يتركها النموذج للواجهة

الواجهة ليست أكبر مكوّن على الخادم. النموذج هو الأكبر. تعطي أحجام التنزيل المنشورة الحد الأدنى، لأن الأوزان يجب أن تبقى في الذاكرة أثناء استجابة النموذج، كما أن الاستخدام الفعلي للذاكرة يكون أكبر من حجم التنزيل بعد تخصيص ذاكرة التخزين المؤقت للسياق.

ChartPublished download size of common Ollama models, August 2026
The data behind this chart
[
  {
    "label": "llama3.2:3b",
    "download_gb": "2.0"
  },
  {
    "label": "qwen3:4b",
    "download_gb": "2.5"
  },
  {
    "label": "gemma3:4b",
    "download_gb": "3.3"
  },
  {
    "label": "qwen3:8b",
    "download_gb": "5.2"
  }
]

هذه هي الأرقام التي عرضتها صفحات مكتبة Ollama في أغسطس 2026. إنها أحجام منشورة وليست قياسات فعلية. على VPS بسعة 4 GB، يستهلك qwen3:4b بحجم 2.5 GB معظم الذاكرة، فلا يتبقى أقل من 1.5 GB لنظام التشغيل وكل شيء آخر، كما تستهلك ذاكرة التخزين المؤقت للسياق مزيداً منها مع نمو المحادثة. أما qwen3:8b بحجم 5.2 GB فلا يعمل على ذلك الخادم إطلاقاً. هذه هي الحالة التي لا تغطيها مقارنات الحواسيب المحمولة، وهي الحالة التي تحدد فيها واجهة محادثة تستهلك بضع مئات من الميغابايت ما إذا كان النموذج سيعمل.

قِس بدلاً من الوثوق بأي رقم في إحدى المقارنات، بما في ذلك هذه المقارنة. شغّل docker stats --no-stream بعد مرور ساعة على الاستخدام الفعلي، وليس بعد دقيقة واحدة من بدء الحاوية، لأن الذاكرة المهمة تُخصَّص عند أول استخدام.

Open WebUI: ما يزال الإعداد الافتراضي لأكثر من مستخدم

يعمل Open WebUI من صورة واحدة، ويحتفظ ببياناته في volume واحد.

docker run -d -p 127.0.0.1:3000:8080 -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:main

ينشر الأمر الوارد في README الخاص بالمشروع -p 3000:8080، الذي يستمع على كل الواجهات. وتُبقي البادئة 127.0.0.1: الخدمة على loopback. على VPS، تكون هذه البادئة أهم من أي جزء آخر في السطر، لأن Docker يكتب قواعد iptables الخاصة به، والمنفذ المنشور يتجاهل قواعد الرفض في ufw.

افتح الصفحة عبر tunnel أو proxy، وكلاهما موضح أدناه، ثم أنشئ الحساب الأول. يصبح هذا الحساب حساب administrator. تُنشأ الحسابات اللاحقة بالدور pending، وهو الإعداد الافتراضي الموثق DEFAULT_USER_ROLE، لذلك لا يستطيع شخص غريب يصل إلى الصفحة استخدام النموذج قبل موافقة administrator عليه.

يستهلك Open WebUI ذاكرة أكبر من المشاريع أدناه لأنه ينفذ مهام أكثر، وتسمّي صفحة الأداء الخاصة به المكونات المسؤولة عن هذا الاستهلاك. يحمّل محرك embedding الافتراضي نموذج sentence-transformers داخل الحاوية، وتوثّق الصفحة أن حجمه يقارب 500 MB لكل worker process. يؤدي ضبط RAG_EMBEDDING_ENGINE=ollama إلى إسناد هذه المهمة إلى model server الذي تشغّله مسبقاً. ويمنع AUDIO_STT_ENGINE=webapi تحميل نموذج محلي لتحويل الكلام إلى نص. عند استخدام SQLite مع عدم ضبط DATABASE_POOL_SIZE، يعود pool إلى حجم داخلي كبير، وتنشئ كل وصلة page cache وmemory map خاصين بها. لذلك، اضبط DATABASE_POOL_SIZE=8 وDATABASE_SQLITE_PRAGMA_MMAP_SIZE=0 على جهاز صغير. ويمنع ENABLE_AUTOCOMPLETE_GENERATION=False الواجهة من طلب completion من النموذج بينما لا يزال المستخدم يكتب.

LibreChat: متعدد المستخدمين، مع حزمة خدمات خلفه

git clone https://github.com/danny-avila/LibreChat.git
cd LibreChat
cp .env.example .env
docker compose up -d

تستجيب الواجهة على المنفذ 3080. يكون LibreChat الخيار المناسب عندما تحتاج إلى نظام لإدارة الهويات بدلاً من مربع تسجيل دخول. فهو يوثّق عمليات تسجيل الدخول عبر LDAP وOAuth2، ويوفّر لوحة إدارة للمستخدمين والأدوار. تأتي هذه الإمكانات ضمن حزمة خدمات.

ChartContainers a default install adds, not counting the model server
The data behind this chart
[
  {
    "label": "OrionChat",
    "containers": 0,
    "notes": "static files, served by a web server you already run"
  },
  {
    "label": "Hollama",
    "containers": 1,
    "notes": "one container serving a browser app"
  },
  {
    "label": "Open WebUI",
    "containers": 1,
    "notes": "application and SQLite in one image"
  },
  {
    "label": "LibreChat",
    "containers": 6,
    "notes": "api, admin panel, MongoDB, Meilisearch, pgvector, RAG API"
  }
]

يبدأ ملف compose الافتراضي 6 من الخدمات: api, admin panel, MongoDB, Meilisearch, pgvector, RAG API. لا تمثل أيٌّ منها النموذج. يحتاج كل من MongoDB وpgvector إلى ذاكرة خاصة به، وعلى خادم بسعة 4 GB تكون هذه الذاكرة على حساب الذاكرة التي يحتاج إليها النموذج.

تتم الترقيات عبر عملية git، وهنا تحدث الأخطاء غالباً.

docker compose down
git pull
docker compose pull
docker compose up -d

git pull يتوقف بسبب تعارض إذا عدّلت docker-compose.yml المتتبَّع، ثم تصبح الترقية مطبَّقة جزئياً. ضع تعديلاتك في docker-compose.override.yml، الذي يوفّره المشروع لهذا الغرض، واحتفظ بالأسرار في .env. كلا الملفين غير متتبَّع، لذلك يتركهما git pull دون تغيير.

وجّه LibreChat إلى خادم النموذج الخاص بك باستخدام نقطة نهاية مخصّصة في librechat.yaml.

endpoints:
  custom:
    - name: "Ollama"
      apiKey: "ollama"
      baseURL: "http://model-host:11434/v1/"
      models:
        default: ["llama3.2"]
        fetch: true
      titleConvo: true
      titleModel: "current_model"
      modelDisplayLabel: "Ollama"

استبدل model-host بعنوان الخادم الذي يشغّل Ollama. يجب أن يكون الحقل apiKey موجوداً، حتى مع تجاهل Ollama لقيمته، لذلك تكفي قيمة نائبة. إذا كان LibreChat يعمل داخل Docker وكان Ollama يعمل على الجهاز نفسه، فإن localhost داخل الحاوية يشير إلى الحاوية نفسها، لذا استخدم host.docker.internal هناك بدلاً منه.

Hollama وOrionChat: المتصفح ينفّذ العمل

يقدّم Hollama تطبيقاً للمتصفح من حاوية صغيرة واحدة. تُخزَّن المحادثات في مساحة تخزين المتصفح، لا على الخادم.

docker run -d --restart unless-stopped -p 127.0.0.1:4173:4173 --name hollama ghcr.io/fmaclen/hollama:latest

يستخدم إصدار README من هذا الأمر --rm، ما يحذف الحاوية عند توقفها. لذلك لا تعود الواجهة بعد إعادة التشغيل. عند استخدام Reverse Proxy، أضف -e VITE_ALLOWED_HOSTS='chat.example.com'، لأن الصورة تسمح فقط باسم المضيف localhost. وتردّ على طلب يستخدم أي اسم مضيف آخر بخطأ مضيف محظور بدلاً من عرض التطبيق.

يذهب OrionChat إلى أبعد من ذلك، إذ لا يحتوي على مكوّن خادم إطلاقاً. استنسخ المستودع وقدّم المجلد باستخدام خادم الويب الذي تشغّله بالفعل، أو افتح index.html من القرص. تُخزَّن مفاتيح API في localStorage الخاص بالمتصفح، وتبقى محفوظات المحادثات في المتصفح، ويحذف التطبيق أقدم المحادثات عندما يتجاوز العدد 512.

لا يوفّر أي من المشروعين تسجيل دخول، لأنه لا يملك خادماً يمكنه التحقق منه. هذا مقبول على حاسوب محمول. أما على VPS، فيعني ذلك أنه يجب ألا تُنشر الصفحة أبداً على 0.0.0.0. كما يعني أمراً يسهل إغفاله: المتصفح هو الذي يستدعي النموذج، لا الخادم.

تحدد هذه الحقيقة وحدها الحالات التي يمكن فيها استخدام المشروعين. يجب أن يتمكن متصفحك من الوصول إلى Ollama مباشرة، لذلك يجب أن يستمع Ollama على عنوان يتجاوز loopback. ولا يوفّر Ollama أي نوع من المصادقة. وتترتب على ذلك قاعدتان في المتصفح. لا يمكن لصفحة مقدَّمة عبر HTTPS استدعاء نقطة نهاية HTTP عادية. كما تطبع وحدة التحكم Mixed Content: The page at 'https://chat.example.com/' was loaded over HTTPS, but requested an insecure resource 'http://203.0.113.10:11434/api/tags'. This request has been blocked.. ويُرفض أي استدعاء إلى origin آخر مع has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource إلى أن تسمح بذلك صراحةً.

الطريقة الموثقة في Ollama لتغيير أي من الإعدادين هي استخدام override في systemd.

sudo systemctl edit ollama.service
[Service]
Environment="OLLAMA_HOST=0.0.0.0:11434"
Environment="OLLAMA_ORIGINS=https://chat.example.com"
sudo systemctl daemon-reload
sudo systemctl restart ollama
sudo ss -lntp | grep 11434

يجب أن يطبع ss الآن 0.0.0.0:11434 بدلاً من 127.0.0.1:11434 الذي كان يطبعه سابقاً. لا تُجرِ هذا التغيير إلا عندما يتحكم جدار ناري أو Reverse Proxy يوفّر المصادقة مسبقاً في الجهات التي يمكنها الوصول إلى المنفذ. فالمنفذ 11434 المفتوح يعني خادم نموذج مفتوحاً، وتصل أدوات المسح الجماعي إلى المنفذ العام الجديد بسرعة. يتجنب نفق SSH أدناه هذه المسألة بالكامل: تعمل الصفحة حينها على origin من نوع localhost، وهو ما يسمح به Ollama افتراضياً، ولا يغادر المنفذ الخادم.

هل يمكن لكل واحد منها استخدام نقطة نهاية Ollama أو vLLM بعيدة

يمكن لـOpen WebUI ذلك، ويُنشأ الاتصال من جانب الخادم. يوجّه OLLAMA_BASE_URL=http://model-host:11434 الطلبات إلى Ollama. بالنسبة إلى vLLM أو أي خادم آخر متوافق مع OpenAI، اضبط OPENAI_API_BASE_URL=http://model-host:8000/v1 مع قيمة غير فارغة لـOPENAI_API_KEY، وأبقِ اللاحقة /v1، فهي مطلوبة. يقبل OPENAI_API_BASE_URLS عدة خلفيات مفصولة بفواصل منقوطة.

يمكن لـLibreChat ذلك من خلال baseURL لنقطة النهاية المخصصة الموضحة أعلاه. يغادر هذا الطلب الخادم أيضاً، لذلك لا تنطبق عليه أي قاعدة خاصة بالمتصفح.

يمكن لـHollama وOrionChat استخدام أي نقطة نهاية تُدخلها في إعداداتهما، لكن الطلب يغادر متصفحك. ينطبق عليهما كل ما ورد في القسم أعلاه، ولا ينطبق على أي شيء آخر هنا.

يُعد فصل الواجهة عن النموذج أهم فائدة توفرها نقطة النهاية البعيدة. ضع الواجهة على جهاز صغير، وضع النموذج حيث تتوفر الذاكرة. هذا هو الوقت المناسب أيضاً لتحديد ما إذا كان ينبغي لـOllama أو vLLM معالجة الطلبات، لأن سلوكهما يختلف كثيراً عندما يتحدث عدة أشخاص إلى النموذج في الوقت نفسه. إذا لم يكن خادم النموذج موجوداً بعد، فابدأ بـتشغيل Ollama على VPS، وعلى جهاز يعمل بالمعالج فقط، اقرأ مقارنة Ollama مع llama.cpp قبل اختيار المشغّل.

لا تنشر واجهة دردشة بلا تسجيل دخول على 0.0.0.0

توضح صفحة تقوية Open WebUI أن المشروع «مصمم للشبكات الخاصة والموثوقة، مثل بنى الاستضافة الذاتية الأخرى كقواعد البيانات وسجلات الحاويات وخوادم CI»، وتطلب منك وضعه خلف VPN أو خلف Reverse Proxy مع مصادقة. المشروع الذي لا يوفّر تسجيل دخول إطلاقاً يستحق المعالجة نفسها على الأقل.

تحقق مما يستمع قبل أن تثق بأي شيء.

sudo ss -lntp | grep -E ':(3000|3080|4173|11434)'

السطر الذي يقرأ 127.0.0.1:3000 هو ما تريده. أما السطر الذي يقرأ 0.0.0.0:3000 فيعني أن واجهة الدردشة لديك موجودة على الإنترنت العام. ومن جهازك، فإن استجابة curl -sI http://YOUR.VPS.IP:3000 على HTTP/1.1 200 OK تقول الشيء نفسه بوضوح أكبر.

يؤدي تعطيل تسجيل الدخول في Open WebUI باستخدام WEBUI_AUTH=False إلى إعداد لمستخدم واحد على جهاز لا يستطيع أي شخص آخر الوصول إليه. كما يرفض تطبيقه على تثبيت لديه حسابات موجودة مسبقاً، مع عرض الرسالة You can't turn off authentication because there are existing users.

النمط الأول: الربط بواجهة loopback والوصول عبر SSH. انشر كل منفذ على 127.0.0.1، ثم نفّذ إعادة توجيه لما تحتاج إليه: ssh -N -L 3000:127.0.0.1:3000 you@vps.example.com، وافتح http://localhost:3000 على حاسوبك المحمول. لا شيء منشور، ولذلك لا يمكن فحص أي شيء. بالنسبة إلى Hollama أو OrionChat، نفّذ إعادة توجيه لمنفذ النموذج في الأمر نفسه باستخدام -L 11434:127.0.0.1:11434، واترك Ollama مربوطاً بواجهة loopback. يعتمد هذا النمط بقدر كبير على إعداد SSH لديك، لذلك اجمعه مع SSH يقتصر على المفاتيح وsshd مقوّى.

النمط الثاني: Reverse Proxy يصادق قبل أن يرى التطبيق الطلب. أبقِ التطبيق على واجهة loopback، ودَع الـproxy يتولى المنفذ 443، وضع تسجيل الدخول الموحّد أمامه. يوفّر Traefik الذي تديره تسميات Docker Compose مع Authentik بوصفه موفّر الهوية تسجيل دخول واحداً وشهادة واحدة لكل تطبيق على الخادم. عند تشغيل Open WebUI خلف TLS (أمن طبقة النقل)، اضبط WEBUI_SESSION_COOKIE_SECURE=true وWEBUI_SESSION_COOKIE_SAME_SITE=strict. قصّر JWT_EXPIRES_IN عن قيمته الافتراضية البالغة أربعة أسابيع أيضاً، لأن Open WebUI يوضح أن تسجيل الخروج، من دون Redis، لا يبطل الرمز: يظل قابلاً للاستخدام حتى تنتهي صلاحيته تلقائياً.

لا ينقذ النمط الثاني المشاريع التي تعمل من المتصفح فقط. لا يحمي الـproxy الموضوع أمام الصفحة نقطة نهاية النموذج، كما أن طلب fetch من الصفحة إلى اسم مضيف مختلف لا يحمل ملف تعريف الارتباط الخاص بجلسة المستخدم. لذلك يجيب الـproxy الذي يصادق أمام Ollama بإعادة توجيه إلى نموذج تسجيل دخول، وتفشل الدردشة. إما أن توجّه نقطة نهاية النموذج عبر اسم المضيف نفسه المستخدم للصفحة، أو استخدم النمط الأول.

ما الخيار المناسب؟

إذا كان سيستخدمه أي شخص غيرك، فشغّل Open WebUI. فهو يوفّر حسابات فعلية، ويضع المستخدمين الجدد في قائمة انتظار للموافقة، وينشر مطوّروه إرشادات لتقوية الأمان يمكنك اتباعها. إذا كنت تحتاج إلى LDAP أو لوحة إدارة، فشغّل LibreChat، وتحقق باستخدام docker stats من أن خدماته الست بالإضافة إلى نموذجك تعمل ضمن الموارد المتاحة قبل الاعتماد عليه. إذا كان المستخدم شخصاً واحداً على خادم صغير استحوذ النموذج فيه بالفعل على معظم ذاكرة RAM، فاعرض Hollama أو OrionChat عبر نفق SSH، واترك للمتصفح الاحتفاظ بالحالة. الخيار الخاطئ على VPS هو نشر أيٍّ منها على 0.0.0.0 من دون تسجيل دخول أمامها.

FAQ

هل من الآمن إتاحة Open WebUI مباشرةً على عنوان IP عام؟

تصفه صفحة التحصين الخاصة به بأنه برنامج مخصص للشبكات الخاصة والموثوقة، ضمن الفئة نفسها التي تنتمي إليها قاعدة البيانات أو خادم CI. وهو يوفّر حسابات فعلية، ويصبح الحساب الأول حساب مسؤول، بينما تبقى الحسابات اللاحقة pending إلى أن تتم الموافقة عليها؛ لذلك فهو أكثر أماناً بكثير من واجهة لا تتطلب تسجيل الدخول. مع ذلك، ضعه خلف reverse proxy مع TLS، واستخدم تسجيل الدخول الأحادي حيثما أمكن. انشر منفذ الحاوية على 127.0.0.1:3000:8080 حتى لا تتمكن قواعد iptables الخاصة بـDocker من فتحه أمام الإنترنت دون علمك.

ما بديل Open WebUI الذي يستخدم أقل قدر من ذاكرة RAM على VPS؟

البدائل التي تعمل عبر المتصفح، Hollama وOrionChat، لأن التطبيق يعمل على جهاز العميل. يرسل الخادم الملفات الثابتة فقط، ولا يحتاج OrionChat إلى حاوية تطبيقات إطلاقاً. يحتفظ Open WebUI بعملية Python وقاعدة بيانات ونموذج تضمين محلي في الذاكرة افتراضياً. وتوثّق الذاكرة المطلوبة للنموذج وحده بنحو 500 MB لكل عامل. تحقّق من الأرقام على خادمك باستخدام docker stats --no-stream، لأنها تتغير وفق الميزات التي تفعّلها.

هل يمكن لواجهات الدردشة هذه استخدام خادم Ollama على مضيف آخر؟

يمكن لـOpen WebUI وLibreChat ذلك، ويتولى خادمهما إنشاء الاتصال؛ لذلك لا تنطبق قاعدة المتصفح. اضبط OLLAMA_BASE_URL في Open WebUI، أو اضبط baseURL في نقطة نهاية مخصصة لـLibreChat. بالنسبة إلى vLLM أو أي خادم آخر متوافق مع OpenAI، استخدم OPENAI_API_BASE_URL مع اللاحقة /v1 ومفتاح API غير فارغ. ويمكن لـHollama وOrionChat أيضاً الاتصال بأي وجهة، لكن الطلب يأتي من متصفحك؛ لذلك يجب أن تكون نقطة النهاية قابلة للوصول من متصفحك أيضاً.

لماذا لا تتمكن واجهة الدردشة في متصفحي من الوصول إلى Ollama؟

يغطي سببان معظم الحالات تقريباً. يستمع Ollama على 127.0.0.1:11434 افتراضياً، لذلك لا يصل إليه متصفح يعمل على جهاز آخر حتى يتغير OLLAMA_HOST. كما يقبل Ollama الطلبات من مصادر localhost فقط، لذلك يرفض الصفحة المقدمة من نطاقك مع No 'Access-Control-Allow-Origin' header is present on the requested resource إلى أن يُدرج ذلك المصدر في OLLAMA_ORIGINS. وإذا كانت الصفحة تستخدم HTTPS ونقطة النهاية تستخدم HTTP، يحظر المتصفح الطلب باعتباره محتوى مختلطاً قبل أن يستلمه Ollama. اضبط المتغيرين معاً في تجاوز systemctl edit ollama.service، أو مرّر المنفذ عبر SSH، وستختفي المشكلة.