لماذا تستضيف 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 الخاص بك.
النشر خطوة بخطوة
الحصول على المشروع
عبر SSH، استنسخ المستودع:
git clone https://github.com/wandb/openui ثم انتقل إلى مجلد backend. يوفّر OpenUI ملف Dockerfile وتعليمات بناء جاهزة للاستخدام. تحقّق من الفرع الحالي: git log --oneline -3 للتأكد من البدء من كوميت مستقر.اختيار الواجهة الخلفية للنموذج
لنموذج خارجي، أدخِل مفتاحك في متغيّر بيئة (
OPENAI_API_KEY أو ما يعادله حسب المزوّد). للبقاء محليًا، ثبّت Ollama (curl -fsSL https://ollama.com/install.sh | sh)، واسحب نموذجًا موجَّهًا للكود بـollama pull qwen2.5-coder:7b ووجّه OpenUI إليه عبر OLLAMA_HOST=http://localhost:11434.بناء الحاوية وتشغيلها
ابنِ الصورة ثم شغّل:
docker compose up -d. يعرض OpenUI المنفذ 7878 افتراضيًا. تابع الإقلاع بـdocker compose logs -f حتى ترى رسالة جاهزية الخادم. إذا فشل البناء على تبعيات Python، تأكد من استخدام Dockerfile الموجود في backend/.التحقق من التصيير
افتح
http://IP_VPS:7878، اكتب وصفًا لمكوّن (مثلاً "زرّ رئيسي بأيقونة وحالة معطّلة") وتأكّد من توليد الكود وتصييره مباشرةً في المعاينة. إذا فشل التوليد بخطأ اتصال بالنموذج، تحقّق من السجلات وتأكّد من حقن متغيّر بيئة مفتاح API بشكل صحيح.التأمين خلف وكيل عكسي
لا يملك OpenUI مصادقة قوية افتراضيًا: ضع Caddy أو Nginx أمام المنفذ 7878 مع Basic Auth، وفعّل SSL التلقائي لـ
ui.mynomdedomaine.com. قيّد الوصول إلى المنفذ الخام عبر جدار الحماية (ufw deny 7878).المشاركة مع الفريق
أبلغ عنوان 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 أفضل بكثير من نموذج عام بالحجم ذاته — جرّب عدة نماذج واحتفظ بأوفاها تصييرًا لموجّهاتك.