دليل عملي

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

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

‏OpenUI أداة مفتوحة المصدر طوّرتها ‎Wandb‎، تُولّد مكوّنات واجهات الويب انطلاقًا من وصف نصي بسيط، ثم تُصيّرها مباشرةً في المتصفح. لا تخلط بينها وبين ‎Open WebUI‎ (واجهة محادثة لـ‎Ollama‎/‎LLM‎): فـ‎OpenUI‎ مولّد كود واجهة مستخدم. مستضافةً ذاتيًا على خادم ‎VPS‎، تُصبح ورشةً خاصة لصناعة نماذج واجهات المستخدم الأولية يستطيع فريقك بأكمله استخدامها دون الاعتماد على خدمة طرف ثالث. إليك كيفية نشرها مع ‎Docker‎ وربطها بنموذج وتأمينها خلف وكيل عكسي وإعدادها للاستخدام في بيئة الإنتاج.

8 دقائق للقراءةعدد الخطوات: 6
المحتويات· لماذا تستضيف ‎OpenUI‎ ذاتيًا على خادم ‎VPS‎1/10
  1. 01لماذا تستضيف ‎OpenUI‎ ذاتيًا على خادم ‎VPS‎
  2. 02الفوائد الملموسة للاستضافة الذاتية
  3. 03المتطلبات العتادية والبرمجية
  4. 04النشر خطوة بخطوة
  5. 05إعداد ‎nginx‎ و‎TLS‎
  6. 06‏‎OpenUI‎ مقابل ‎Open WebUI‎: أداتان لا تُخلطان
  7. 07‏‎OpenUI‎ مقابل ‎Open WebUI‎: أيّ أداة لأيّ حالة استخدام؟
  8. 08الإعداد المتقدم مع ‎docker-compose‎
  9. 09متغيّرات البيئة والمصادقة في الإنتاج
  10. 10استكشاف الأخطاء وإصلاحها: أشيع الأخطاء

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

‏يتوجّه ‎OpenUI‎ إلى مطوّري الواجهات الأمامية والمصمّمين الراغبين في تحويل فكرة ("نموذج تسجيل دخول بزرّ أزرق وخيار لنسيان كلمة المرور") إلى كود ‎HTML/Tailwind/React‎ عامل يُصيَّر فوريًا في المتصفح. بدل الاعتماد على خدمة عبر الإنترنت بحدود توليد ومخاطر خصوصية، تمنحك استضافته على خادم ‎VPS‎ الخاص بك نقطة نهاية دائمة قابلة للمشاركة عبر رابط داخلي، يمكن للجميع فيها صناعة النماذج الأولية دون تثبيت محلي. نقطة أساسية: يحتاج ‎OpenUI‎ إلى نموذج ‎LLM‎ لتوليد الكود — وجّهه إما إلى نموذج خارجي عبر مفتاح ‎API‎ (‏‎OpenAI‎ أو ‎Anthropic‎ أو ‎Mistral‎…)، أو إلى ‎Ollama‎ محلي يعمل على خادم ‎VPS‎ نفسه مما يُبقي السلسلة بأكملها داخلية. ويُسرّع التصيير الفوري للمكوّنات دورات التنميط كثيرًا.

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

  • ورشة لصناعة نماذج واجهات المستخدم الأولية مشتركة عبر عنوان ‎URL‎ داخلي بسيط، دون تثبيت على جانب العميل.
  • تصيير مباشر للمكوّنات المُولَّدة (‏‎HTML‎ و‎Tailwind‎ و‎React‎ و‎Svelte‎).
  • اختيار الواجهة الخلفية للنموذج: مفتاح ‎API‎ خارجي أو ‎Ollama‎ محلي بنسبة 100%.
  • لا حدّ لعدد عمليات التوليد تفرضه خدمة طرف ثالث.
  • تصدير كود نظيف، جاهز للنسخ في قاعدة كود مشروعك.
  • سرية موجزات ونماذج العملاء الأولية التي تبقى على خادم ‎VPS‎ الخاص بك.

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

‏‎OpenUI‎ نفسه خفيف: يتّسع التطبيق (واجهة خلفية بـ‎Python‎ + واجهة أمامية) على خادم ‎VPS‎ بنواتَي ‎vCPU‎ و2 إلى 4 غيغابايت من ذاكرة ‎RAM‎ إذا استخدمت مفتاح ‎API‎ خارجيًا للنموذج. في المقابل، إذا أردت إبقاء كل شيء محليًا مع ‎Ollama‎ على الجهاز نفسه، فحدّد الحجم وفق النموذج المستهدف: احسب حينئذٍ 8 إلى 16 غيغابايت إضافية من ذاكرة ‎RAM‎ لنموذج ‎7B‎ مُكمَّم، وحتى 32 غيغابايت لنموذج ‎13B‎. خصّص بضعة غيغابايتات من القرص لصور ‎Docker‎ (وأكثر إذا خزّنت نماذج ‎Ollama‎ — كل نموذج يزن 4 إلى 8 غيغابايت). أما برمجيًا: فيلزم ‎Ubuntu 22.04‎ و‎Docker‎ و‎Docker Compose‎، ومفتاح ‎API‎ لنموذج (أو ‎Ollama‎ مثبّتًا)، و‎git‎، ونطاق فرعي مهيّأ من نوع ‎ui.mynomdedomaine.com‎ يشير إلى خادم ‎VPS‎ الخاص بك.

النشر خطوة بخطوة

  1. الحصول على المشروع

    عبر ‎SSH‎، استنسخ المستودع: ‎git clone https://github.com/wandb/openui‎ ثم انتقل إلى مجلد ‎backend‎. يوفّر ‎OpenUI‎ ملف ‎Dockerfile‎ وتعليمات بناء جاهزة للاستخدام. تحقّق من الفرع الحالي: ‎git log --oneline -3‎ للتأكد من البدء من كوميت مستقر.

  2. اختيار الواجهة الخلفية للنموذج

    لنموذج خارجي، أدخِل مفتاحك في متغيّر بيئة (‎OPENAI_API_KEY‎ أو ما يعادله حسب المزوّد). للبقاء محليًا، ثبّت ‎Ollama‎ (‎curl -fsSL https://ollama.com/install.sh | sh‎)، واسحب نموذجًا موجَّهًا للكود بـ‎ollama pull qwen2.5-coder:7b‎ ووجّه ‎OpenUI‎ إليه عبر ‎OLLAMA_HOST=http://localhost:11434‎.

  3. بناء الحاوية وتشغيلها

    ابنِ الصورة ثم شغّل: ‎docker compose up -d‎. يعرض ‎OpenUI‎ المنفذ ‎7878‎ افتراضيًا. تابع الإقلاع بـ‎docker compose logs -f‎ حتى ترى رسالة جاهزية الخادم. إذا فشل البناء على تبعيات ‎Python‎، تأكد من استخدام ‎Dockerfile‎ الموجود في ‎backend/‎.

  4. التحقق من التصيير

    افتح ‎http://IP_VPS:7878‎، اكتب وصفًا لمكوّن (مثلاً "زرّ رئيسي بأيقونة وحالة معطّلة") وتأكّد من توليد الكود وتصييره مباشرةً في المعاينة. إذا فشل التوليد بخطأ اتصال بالنموذج، تحقّق من السجلات وتأكّد من حقن متغيّر بيئة مفتاح ‎API‎ بشكل صحيح.

  5. التأمين خلف وكيل عكسي

    لا يملك ‎OpenUI‎ مصادقة قوية افتراضيًا: ضع ‎Caddy‎ أو ‎Nginx‎ أمام المنفذ 7878 مع ‎Basic Auth‎، وفعّل ‎SSL‎ التلقائي لـ‎ui.mynomdedomaine.com‎. قيّد الوصول إلى المنفذ الخام عبر جدار الحماية (‎ufw deny 7878‎).

  6. المشاركة مع الفريق

    أبلغ عنوان ‎URL‎ ‎https://ui.mynomdedomaine.com‎ لمطوّريك ومصمّميك. يمكن للجميع صناعة النماذج الأولية من متصفحاتهم دون تثبيت أي شيء، ونسخ الكود المُولَّد مباشرةً في المشروع.

إعداد ‎nginx‎ و‎TLS‎

إليك إعداد ‎nginx‎ أدنى لعرض ‎OpenUI‎ مع ‎Basic Auth‎ و‎HTTPS‎. أنشئ ‎/etc/nginx/sites-available/openui‎ بما يلي: عرّف ‎upstream openui_backend‎ يشير إلى ‎127.0.0.1:7878‎، ثم كتلة ‎server‎ تستمع على المنفذ 443 مع شهادتك (‎Let's Encrypt‎ عبر ‎Certbot‎ أو ‎DNS-01‎). في كتلة ‎location /‎، أضف ‎proxy_pass http://openui_backend‎، و‎proxy_http_version 1.1‎، ورؤوس ‎Upgrade‎ و‎Connection‎ لـ‎WebSocket‎ (يستخدم ‎OpenUI‎ اتصالات مستمرة للتصيير الفوري)، و‎auth_basic‎ مع ملف ‎.htpasswd‎ مُنشأ بـ‎htpasswd -c /etc/nginx/.htpasswd user‎. أضف كتلة ‎server‎ ثانية على المنفذ 80 تُعيد التوجيه بـ301 إلى ‎HTTPS‎. فعّل الموقع بـ‎ln -s‎ في ‎sites-enabled‎ وأعد تحميل ‎nginx‎. تذكّر حجب المنفذ 7878 مباشرةً: ‎ufw deny 7878‎ لمنع أي وصول غير مصادق عليه بتجاوز الوكيل.

‏‎OpenUI‎ مقابل ‎Open WebUI‎: أداتان لا تُخلطان

الخلط شائع في عمليات البحث والنقاشات: ‎OpenUI‎ (من ‎Wandb/W&B‎) و‎Open WebUI‎ مشروعان مستقلان بأغراض مختلفة تمامًا. فـ‎OpenUI‎ يُولّد كود مكوّنات واجهة المستخدم من وصف نصي — وهو أداة نمذجة أولية وتوليد كود واجهة أمامية. أما ‎Open WebUI‎ فهو واجهة محادثة ويب للتفاعل مع نماذج ‎LLM‎ (‏‎Ollama‎، ‎OpenAI‎…) شبيهة بما تقدّمه ‎ChatGPT‎ لكن باستضافة ذاتية. باختصار: إذا أردت إنشاء مكوّنات واجهة مستخدم بالوصف فاستخدم ‎OpenUI‎. وإذا أردت واجهة محادثة لنماذجك المحلية فاستخدم ‎Open WebUI‎. كلاهما يمكن أن يتعايشا على خادم ‎VPS‎ ذاته ويتشاركا خلفية ‎Ollama‎ نفسها — يُكمّل أحدهما الآخر دون تنافس.

‏‎OpenUI‎ مقابل ‎Open WebUI‎: أيّ أداة لأيّ حالة استخدام؟

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

OpenUI (Wandb)Open WebUI
يُولّد مكوّنات ‎HTML/Tailwind/React/Svelte‎واجهة محادثة ويب لنماذج ‎LLM‎ (على غرار ‎ChatGPT‎ باستضافة ذاتية)
تصيير بصري مباشر في المتصفحإدارة متعدد النماذج و‎RAG‎ وسجل المحادثات
تصدير الكود المصدري جاهزًا للتكاملمثالي للمساعدة والبحث والمهام العامة
مثالي لنمذجة واجهات المستخدم وتوليد كود الواجهة الأماميةيتطلب ‎Ollama‎ أو واجهة ‎API‎ متوافقة مع ‎OpenAI‎
يتطلب نموذج ‎LLM‎ (‏‎API‎ خارجي أو ‎Ollama‎ محلي)إدارة مستخدمين وأدوار مدمجة
المنفذ الافتراضي: 7878المنفذ الافتراضي: 3000

الإعداد المتقدم مع ‎docker-compose‎

لسلسلة ذات سيادة كاملة، اجعل ‎OpenUI‎ و‎Ollama‎ يتعايشان في ملف ‎docker-compose.yml‎ ذاته على شبكة ‎Docker‎ داخلية. عرّف خدمتين: ‎ollama‎ (صورة ‎ollama/ollama‎) و‎openui‎ (صورة مبنية من ‎./backend‎). أضف شبكة ‎ai_net‎ مخصصة وارتبط بها الخدمتان. في متغيّرات بيئة ‎OpenUI‎، وجّه الخلفية إلى ‎http://ollama:11434‎ — يحلّ ‎DNS‎ الخاص بـ‎Docker‎ اسم الخدمة تلقائيًا دون تعريض ‎Ollama‎ للإنترنت. لجودة التوليد، نموذج موجَّه للكود (‏‎Qwen2.5-Coder‎، ‎CodeLlama‎) يُعطي مكوّنات ‎Tailwind/React‎ أفضل بكثير من نموذج عام بالحجم ذاته. جرّب عدة نماذج واحتفظ بأوفاها تصييرًا لموجّهاتك. لتفعيل استمرارية الجلسات وتفضيلات المستخدم، اربط حجم ‎Docker‎ بدليل بيانات ‎OpenUI‎ (‏‎/app/.openui‎) للحفاظ على الإعداد بين عمليات إعادة التشغيل.

متغيّرات البيئة والمصادقة في الإنتاج

يتعرّف ‎OpenUI‎ على عدة متغيّرات بيئة مفيدة لنشر آمن. ‎OPENAI_API_KEY‎: مفتاح النماذج المتوافقة مع ‎OpenAI‎ (‏‎OpenAI‎، ‎Mistral‎، ‎Groq‎…). ‎ANTHROPIC_API_KEY‎: لنماذج ‎Claude‎ من ‎Anthropic‎. ‎OLLAMA_HOST‎: عنوان ‎URL‎ لخلفية ‎Ollama‎ (مثلاً ‎http://ollama:11434‎ في ‎Docker Compose‎). ‎HOST‎ و‎PORT‎: عنوان الاستماع الداخلي (اترك ‎0.0.0.0:7878‎ خلف الوكيل). لا تخزّن مفاتيح ‎API‎ أبدًا بنص عادي في ‎docker-compose.yml‎: استخدم ملف ‎.env‎ (مضافًا إلى ‎.gitignore‎) أو مدير أسرار. بما أن مصادقة ‎OpenUI‎ الأصلية محدودة، فضّل ‎Basic Auth‎ لـ‎nginx‎ للوصول المقيّد بالفريق، أو وكيل هوية (‏‎Authelia‎، ‎Authentik‎) إذا احتجت إلى ‎SSO‎ وسجلات وصول لكل مستخدم.

استكشاف الأخطاء وإصلاحها: أشيع الأخطاء

إليك أشيع المشكلات التي تُواجَه عند نشر ‎OpenUI‎ على ‎VPS‎. المنفذ 7878 غير متاح: تحقّق من أن جدار الحماية يسمح بالمنفذ مؤقتًا للاختبار (‎ufw allow 7878‎) أو اختبر من الخادم ‎VPS‎ نفسه بـ‎curl http://localhost:7878‎. خطأ اتصال بالنموذج: تحقّق من حقن متغيّر بيئة مفتاح ‎API‎ (‏‎docker compose exec openui env | grep API‎). إذا كنت تستخدم ‎Ollama‎ المحلي، تحقّق من تشغيله وإمكانية الوصول إليه (‎curl http://localhost:11434/api/tags‎). فشل بناء ‎Docker‎: تأكد من البناء من مجلد ‎backend/‎ لا من جذر المستودع. معاينة فارغة بعد التوليد: يستخدم ‎OpenUI‎ ‎WebSocket‎ للتصيير الفوري — تحقّق من أن إعداد ‎nginx‎ يمرّر رأسَي ‎Upgrade: websocket‎ و‎Connection: Upgrade‎. ذاكرة غير كافية مع ‎Ollama‎: إذا قُتلت الحاوية (‏‎OOMKilled‎)، قلّل حجم النموذج (انتقل إلى 3B أو 7B مُكمَّم ‎Q4‎) أو زد ذاكرة ‎RAM‎ لخادم ‎VPS‎ الخاص بك.

لسلسلة ذات سيادة كاملة، اجعل ‎OpenUI‎ و‎Ollama‎ يتعايشان في ملف ‎docker-compose.yml‎ ذاته على شبكة ‎Docker‎ داخلية: يستدعي ‎OpenUI‎ خدمة ‎Ollama‎ عبر ‎http://ollama:11434‎ دون تعريض نموذج ‎LLM‎ للإنترنت أبدًا. من حيث جودة التوليد، نموذج موجَّه للكود (‏‎CodeLlama‎، ‎Qwen2.5-Coder‎) يُعطي مكوّنات ‎Tailwind/React‎ أفضل بكثير من نموذج عام بالحجم ذاته — جرّب عدة نماذج واحتفظ بأوفاها تصييرًا لموجّهاتك.

صمّم نماذج واجهاتك الأولية على خادم VPS Cloud من ServOrbit

انشر OpenUI (وOllama إن رغبت) على خادم VPS Cloud مع Docker مُهيَّأ مسبقًا. ورشة خاصة لتوليد واجهات المستخدم، قابلة للمشاركة ومتاحة باستمرار.