[{"data":1,"prerenderedAt":186},["ShallowReactive",2],{"seo-verification":3,"blog-استضافة-mlflow-على-vps-تتبع-تجارب-تعلم-الآلة-ar":6},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-استضافة-mlflow-على-vps-تتبع-تجارب-تعلم-الآلة-ar",{"id":9,"slug":10,"slugs":11,"title":15,"excerpt":16,"readTime":17,"views":18,"isPinned":19,"publishedAt":20,"updatedAt":21,"category":22,"categories":28,"featuredImage":30,"bgImage":31,"posterImage":32,"relatedSolution":33,"intro":36,"sections":37,"ctaTitle":120,"ctaBody":121,"ctaButton":122,"ctaUrl":123,"relatedPosts":124},567,"استضافة-mlflow-على-vps-تتبع-تجارب-تعلم-الآلة",{"fr":12,"en":13,"ar":10,"es":14},"self-host-mlflow-vps","self-host-mlflow-vps-experiment-tracking","autoalojar-mlflow-vps-seguimiento-experimentos","MLflow على VPS: تتبّع تجارب تعلّم الآلة وسجلّ النماذج","ثبّت MLflow على خادم VPS: تتبّع تجارب تعلّم الآلة وسجلّ النماذج وتتبّع تطبيقات LLM، بحماية كلمة مرور وعبر HTTPS.",6,0,false,"2026-11-05T00:00:00+00:00","2026-11-06T16:13:06+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},1,"الذكاء الاصطناعي","intelligence-artificielle","bg-purple-500\u002F10 text-purple-400","ia",[29],{"id":23,"name":24,"slug":25,"color":26,"icon":27},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Fself-host-mlflow-vps-poster.svg",{"categorySlug":34,"appSlug":35},"الذكاء-الاصطناعي","mlflow","ينتج مشروع تعلّم الآلة سريعًا عشرات التجارب: معدّل تعلّم تغيّر هنا، ومجموعة بيانات نُظّفت هناك، ومقياس دُوّن في زاوية دفتر. بعد ثلاثة أسابيع لا يعرف أحد أي نموذج كان الأدق، ولا بأي شيفرة. MLflow منصة مفتوحة المصدر (برخصة Apache-2.0) تحفظ كل ذلك على خادم مركزي: معاملات كل تشغيل ومقاييسه وملفاته، ونماذج بإصدارات، وتتبّعات تطبيقات LLM. يثبّته هذا الدليل على خادم VPS باستخدام Docker Compose، ويحميه بكلمة مرور، ويربط به شيفرة Python، ثم يضبط الحسابات والنسخ الاحتياطي والتحديثات.",[38,42,52,79,82,98,102,105,108,111,114,117],{"type":39,"title":40,"body":41},"h2","لماذا خادم MLflow","عند تشغيله محليًا، يكتب MLflow نتائجه في مجلد `mlruns` على جهازك: لا يراها أحد غيرك، وتختفي مع الجهاز. خادم التتبّع يغيّر ذلك. يرسل كل دفتر وكل سكربت تدريب وكل عضو في الفريق عمليات تشغيله إلى المكان نفسه، وتقارنها الواجهة جنبًا إلى جنب.\n\nويحمل الخادم نفسه سجلّ النماذج — قائمة النماذج المعتمدة ذات الإصدارات، مع اسم مستعار للنموذج الموجود في الإنتاج — وبالنسبة للذكاء الاصطناعي التوليدي، تتبّعات استدعاءاتك للنماذج اللغوية.",{"type":43,"title":44,"items":45},"ul","ما يقدّمه MLflow",[46,47,48,49,50,51],"**تتبّع التجارب** — معاملات ومقاييس وملفات كل تشغيل، تُصفّى وتُقارن في الواجهة.","**سجلّ النماذج** — الإصدارات والأسماء المستعارة والتاريخ، لتعرف بالضبط ما يعمل في الإنتاج.","**تتبّع LLM** — مدخلات ومخرجات وزمن استجابة وخطوات كل طلب في تطبيقات الذكاء الاصطناعي التوليدي.","**ملفات يقدّمها الخادم** — ملفات ورسوم ونماذج تُرفع عبر HTTPS، دون تخزين S3 يحتاج إلى إعداد.","**تسجيل تلقائي** — `autolog()` لـ scikit-learn وPyTorch وTransformers وXGBoost وOpenAI وLangChain.","**الحسابات والصلاحيات** — حساب لكل شخص، وصلاحيات تُمنح تجربةً تجربةً.",{"type":53,"title":54,"headers":55,"rows":58},"comparison","MLflow مقابل التتبّع اليدوي",[5,56,57],"خادم MLflow","دفاتر وجدول بيانات",[59,63,67,71,75],[60,61,62],"سجلّ التجارب","كل تشغيل يُسجَّل تلقائيًا","ما تذكّر أحدهم تدوينه",[64,65,66],"مقارنة نموذجين","شاشة واحدة ومقاييس متجاورة","نسخ الأرقام يدويًا",[68,69,70],"الملفات الناتجة","محفوظة مع التشغيل الذي أنشأها","مبعثرة على الحواسيب",[72,73,74],"النموذج في الإنتاج","إصدار واسم مستعار في السجلّ","ملف باسم «final_v3»",[76,77,78],"العمل الجماعي","خادم مشترك وحسابات","تبادل الملفات",{"type":39,"title":80,"body":81},"المتطلبات","يكفي خادم VPS بنظام Ubuntu 24.04 وذاكرة **2 غيغابايت** للبدء؛ وخطّط لـ 4 غيغابايت ومساحة قرص أكبر إذا كنت تخزّن نماذج كثيرة، لأن الملفات الناتجة هي التي تشغل المساحة. تحتاج إلى Docker مع إضافة Compose، وإلى **اسم نطاق** يشير إلى الخادم، مع nginx وشهادة HTTPS: ستتصل به سكربتاتك وفريقك.",{"type":83,"title":84,"steps":85},"steps","تثبيت MLflow باستخدام Docker Compose",[86,89,92,95],{"title":87,"body":88},"جهّز المجلد والأسرار","أنشئ مجلد التطبيق وملف `.env` يحمل كلمة مرور الحساب `admin` ومفتاح الجلسة ونطاقك.\n```bash\nmkdir -p \u002Fopt\u002Fmlflow && cd \u002Fopt\u002Fmlflow\ncat > .env \u003C\u003CEOF\nADMIN_PASSWORD=$(openssl rand -hex 16)\nSECRET_KEY=$(openssl rand -hex 24)\nDOMAIN=mlflow.example.ma\nEOF\nchmod 600 .env\n```",{"title":90,"body":91},"اكتب ملف docker-compose.yml","الصورة `-full` هي النسخة الرسمية التي تتضمّن وحدة المصادقة. عند التشغيل يكتب الأمر الملف `basic_auth.ini` الذي يعرّف الحساب `admin`، ولا يقبل `--allowed-hosts` إلا نطاقك والواجهة المحلية. لا يُنشر المنفذ إلا على الواجهة المحلية: وحده nginx يصل إليه. ويوقف `MLFLOW_SERVER_ENABLE_JOB_EXECUTION=false` منفّذ المهام الخلفية، المستهلك للذاكرة وغير الضروري للتتبّع.\n```yaml\nservices:\n  mlflow:\n    image: ghcr.io\u002Fmlflow\u002Fmlflow:v3.18.0-full\n    restart: unless-stopped\n    ports:\n      - \"127.0.0.1:5000:5000\"\n    environment:\n      ADMIN_PASSWORD: ${ADMIN_PASSWORD}\n      DOMAIN: ${DOMAIN}\n      MLFLOW_FLASK_SERVER_SECRET_KEY: ${SECRET_KEY}\n      MLFLOW_AUTH_CONFIG_PATH: \u002Fmlflow\u002Fbasic_auth.ini\n      MLFLOW_SERVER_ENABLE_JOB_EXECUTION: \"false\"\n    entrypoint: [\"\u002Fbin\u002Fsh\", \"-c\"]\n    command:\n      - >-\n        mkdir -p \u002Fmlflow\u002Fartifacts &&\n        printf '[mlflow]\\ndefault_permission = NO_PERMISSIONS\\ndatabase_uri = sqlite:\u002F\u002F\u002F\u002Fmlflow\u002Fbasic_auth.db\\nadmin_username = admin\\nadmin_password = %s\\nauthorization_function = mlflow.server.auth:authenticate_request_basic_auth\\n' \"$$ADMIN_PASSWORD\" > \u002Fmlflow\u002Fbasic_auth.ini &&\n        exec mlflow server --app-name basic-auth --host 0.0.0.0 --port 5000 --workers 2\n        --backend-store-uri sqlite:\u002F\u002F\u002F\u002Fmlflow\u002Fmlflow.db --artifacts-destination \u002Fmlflow\u002Fartifacts\n        --allowed-hosts \"$$DOMAIN,localhost:*,127.0.0.1:*\"\n    volumes:\n      - mlflow-data:\u002Fmlflow\n\nvolumes:\n  mlflow-data: {}\n```",{"title":93,"body":94},"شغّل وتحقّق","يستغرق التشغيل نحو خمس عشرة ثانية. يجيب `\u002Fhealth` دون مصادقة، أما الواجهة البرمجية فتعيد 401 دون بيانات دخول.\n```bash\ndocker compose up -d\ncurl -fsS http:\u002F\u002F127.0.0.1:5000\u002Fhealth\ncurl -s -o \u002Fdev\u002Fnull -w '%{http_code}\\n' http:\u002F\u002F127.0.0.1:5000\u002Fapi\u002F2.0\u002Fmlflow\u002Fexperiments\u002Fsearch\n```",{"title":96,"body":97},"انشر عبر HTTPS باستخدام nginx","في ملف vhost الخاص بنطاقك (بشهادة من certbot)، وجّه الطلبات إلى المنفذ المحلي مع تمرير الترويسة `Host`. ارفع قيمة `client_max_body_size`: يتجاوز نموذج مرفوع كملف الحدَّ الافتراضي بسرعة.\n```nginx\nlocation \u002F {\n    proxy_pass http:\u002F\u002F127.0.0.1:5000;\n    proxy_set_header Host $host;\n    proxy_set_header X-Forwarded-Proto $scheme;\n    client_max_body_size 512m;\n}\n```",{"type":99,"title":100,"body":101},"tip","دون --app-name basic-auth يبقى الخادم مفتوحًا","افتراضيًا لا يملك `mlflow server` أي مصادقة: يستطيع كل من يصل إلى العنوان قراءة تجاربك وتنزيل نماذجك وحذف كل شيء. أبقِ `--app-name basic-auth`، ولا تنشر المنفذ 5000 على عنوان IP العام أبدًا، واترك `--allowed-hosts` على نطاقك وحده: إنها حماية MLflow من هجمات DNS rebinding.",{"type":39,"title":103,"body":104},"أرسل تجاربك من Python","ثبّت العميل (`pip install mlflow`) على جهاز التدريب، ثم وجّهه إلى خادمك. تُمرَّر بيانات الدخول عبر متغيّرات البيئة:\n```python\nimport os\nimport mlflow\n\nos.environ[\"MLFLOW_TRACKING_USERNAME\"] = \"admin\"\nos.environ[\"MLFLOW_TRACKING_PASSWORD\"] = \"YOUR_PASSWORD\"\nmlflow.set_tracking_uri(\"https:\u002F\u002Fmlflow.example.ma\")\nmlflow.set_experiment(\"churn-model\")\n\nwith mlflow.start_run():\n    mlflow.log_param(\"learning_rate\", 0.01)\n    mlflow.log_metric(\"accuracy\", 0.93)\n    mlflow.log_artifact(\"confusion_matrix.png\")\n```\nيظهر التشغيل في الواجهة فورًا، بمعاملاته ومقاييسه والملف المرفوع. ويسجّل `mlflow.sklearn.autolog()` أو `mlflow.pytorch.autolog()` كل ذلك دون سطر إضافي.",{"type":39,"title":106,"body":107},"تتبّع تطبيق LLM","بالنسبة لمساعد أو وكيل، يسجّل التتبّع كل طلب مع استدعاءاته للنموذج وخطواته ومدّتها. فعّل التسجيل التلقائي لمكتبتك، أو زيّن دوالك الخاصة:\n```python\nimport mlflow\n\nmlflow.set_experiment(\"support-assistant\")\nmlflow.openai.autolog()   # every OpenAI client call becomes a trace\n\n@mlflow.trace\ndef answer(question: str) -> str:\n    ...\n```\nتظهر التتبّعات في تبويب التجربة: ترى أي استدعاء كان بطيئًا، وأي سياق أُرسل، وبماذا أجاب النموذج.",{"type":39,"title":109,"body":110},"سجلّ النماذج","عندما تعتمد تجربة، سجّل نموذجها: يحصل على رقم إصدار، ويمكنك إعطاؤه اسمًا مستعارًا مثل `production`.\n```python\nmlflow.register_model(f\"runs:\u002F{run_id}\u002Fmodel\", \"churn-model\")\n```\nتحمّل خدمة الاستدلال عندها `models:\u002Fchurn-model@production`: تغيير النموذج يعني نقل الاسم المستعار، دون لمس الشيفرة.",{"type":39,"title":112,"body":113},"الحسابات والصلاحيات","ينشئ الحساب `admin` الحسابات الأخرى عبر الواجهة البرمجية:\n```bash\ncurl -u admin:YOUR_PASSWORD -X POST https:\u002F\u002Fmlflow.example.ma\u002Fapi\u002F2.0\u002Fmlflow\u002Fusers\u002Fcreate \\\n  -H 'Content-Type: application\u002Fjson' \\\n  -d '{\"username\": \"sara\", \"password\": \"A_LONG_PASSWORD\"}'\n```\nلا يرى الحساب الجديد **أي** تجربة حتى تُشارَك معه: تُمنح الصلاحيات (قراءة، تعديل، إدارة) تجربةً تجربةً ونموذجًا نموذجًا. غيّر كلمة مرور `admin` عبر الواجهة البرمجية `users\u002Fupdate-password` (مع تمرير القديمة في `current_password`)، وتبقى الجديدة محفوظة بعد إعادة التشغيل.",{"type":39,"title":115,"body":116},"النسخ الاحتياطي والتحديث","تقع حالة MLflow كاملة في وحدة التخزين `mlflow-data`: قاعدة التجارب وقاعدة الحسابات ومجلد الملفات. انسخها احتياطيًا والحاوية متوقّفة، ثم انقل الأرشيف خارج الخادم:\n```bash\ncd \u002Fopt\u002Fmlflow\ndocker compose stop\ndocker run --rm -v mlflow_mlflow-data:\u002Fdata -v \"$PWD\":\u002Fbackup alpine \\\n  tar czf \u002Fbackup\u002Fmlflow-$(date +%F).tar.gz -C \u002Fdata .\ndocker compose start\n```\nللتحديث، اقرأ ملاحظات الإصدار أولًا — قد يرحّل التحديث مخطّط القاعدة —، وغيّر وسم الصورة في `docker-compose.yml`، ثم:\n```bash\ncd \u002Fopt\u002Fmlflow\ndocker compose pull && docker compose up -d\ndocker compose logs --tail 20\n```",{"type":39,"title":118,"body":119},"التثبيت بنقرة واحدة مع ServOrbit","تثبّت «تطبيقات بنقرة واحدة» من ServOrbit تطبيق MLflow على خادمك دون سطر أوامر: ينشر الحاوية الرسمية، ويولّد كلمة مرور الحساب `admin` ومفتاح الجلسة، ويفعّل المصادقة على الواجهة والواجهة البرمجية، ويحصر أسماء المضيف المقبولة في عنوانك، وينشر الخادم عبر HTTPS على نطاق فرعي من نطاقك أو على النطاق الفرعي المجاني للخادم (mlflow.{dns_slug}‎.servorbit-dns.com). تظهر كلمة المرور في مساحة العميل، ولا يبقى إلا ربط دفاترك.","تجارب تعلّم الآلة على خادمك الخاص","يكفي خادم VPS من ServOrbit بنظام Ubuntu 24.04 وذاكرة 2 غيغابايت لتشغيل MLflow. تثبيت بنقرة واحدة من مساحة العميل، وHTTPS على نطاقك أو على النطاق الفرعي المجاني للخادم، وكلمة مرور مولَّدة لك.","تثبيت MLflow","\u002Fapplications\u002Fالذكاء-الاصطناعي\u002Fmlflow",[125,144,168],{"id":126,"slug":127,"slugs":128,"title":132,"excerpt":133,"readTime":134,"views":135,"isPinned":19,"publishedAt":136,"updatedAt":137,"category":138,"categories":139,"featuredImage":30,"bgImage":31,"posterImage":141,"relatedSolution":142},177,"استضافة-langfuse-على-vps-مراقبة-llm-بلا-فاتورة-saas",{"fr":129,"en":130,"ar":127,"es":131},"self-host-langfuse-vps","self-host-langfuse-on-a-vps-llm-observability-no-saas-bill","alojar-langfuse-en-un-vps","استضافة ‫Langfuse‬ على ‫VPS‬: مراقبة ‫LLM‬ بلا فاتورة ‫SaaS‬","استضف ‫Langfuse‬ ذاتيًا على خادم ‫VPS‬ — تتبّع كل استدعاء ذكاء اصطناعي، قيّم جودة الـ ‫prompts‬، وراقب التكاليف. دليل كامل: تثبيت، ‫nginx‬، ‫TLS‬، ‫SDK‬ وحل المشكلات.",11,2,"2026-07-12T00:00:00+00:00","2026-11-04T16:30:26+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},[140],{"id":23,"name":24,"slug":25,"color":26,"icon":27},"\u002Fblog\u002Fcovers\u002Fself-host-langfuse-vps-poster.svg",{"categorySlug":34,"appSlug":143},"langfuse",{"id":145,"slug":146,"slugs":147,"title":151,"excerpt":152,"readTime":153,"views":18,"isPinned":19,"publishedAt":154,"updatedAt":155,"category":156,"categories":162,"featuredImage":30,"bgImage":31,"posterImage":164,"relatedSolution":165},552,"استضافة-marimo-على-vps-دفاتر-python",{"fr":148,"en":149,"ar":146,"es":150},"self-host-marimo-vps","self-host-marimo-vps-python-notebooks","autoalojar-marimo-vps-notebooks-python","marimo على VPS: دفاتر Python تفاعلية مستضافة ذاتيًا","ثبّت marimo على خادم افتراضي: دفاتر Python تفاعلية محفوظة كملفات ‎.py، ومحرّر ويب محمي بكلمة مرور، مع pandas وpolars مضمّنة.",8,"2026-11-01T00:00:00+00:00","2026-11-04T16:30:29+00:00",{"id":157,"name":158,"slug":159,"color":160,"icon":161},7,"الاستضافة الذاتية","self-hosting","bg-indigo-500\u002F10 text-indigo-400","cloud",[163],{"id":157,"name":158,"slug":159,"color":160,"icon":161},"\u002Fblog\u002Fcovers\u002Fself-host-marimo-vps-poster.svg",{"categorySlug":166,"appSlug":167},"التطوير","marimo",{"id":134,"slug":169,"slugs":170,"title":174,"excerpt":175,"readTime":176,"views":177,"isPinned":19,"publishedAt":178,"updatedAt":179,"category":180,"categories":181,"featuredImage":30,"bgImage":31,"posterImage":183,"relatedSolution":184},"كيفية-استضافة-ollama-على-خادم-vps",{"fr":171,"en":172,"ar":169,"es":173},"heberger-ollama-vps","how-to-host-ollama-on-a-vps","como-alojar-ollama-en-un-vps","استضافة Ollama على خادم VPS: دليل التشغيل المتقدم","إعداد Ollama المتقدم على VPS: إدارة النماذج، وكيل عكسي nginx، أمان الواجهة البرمجية، تكميم Q4_K_M\u002FQ8، ثغرة CVE-2026-45672 في Open WebUI والتكامل الآمن.",9,3,"2026-06-09T00:00:00+00:00","2026-11-04T16:30:24+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},[182],{"id":23,"name":24,"slug":25,"color":26,"icon":27},"\u002Fblog\u002Fcovers\u002Fheberger-ollama-vps-poster.svg",{"categorySlug":34,"appSlug":185},"ollama",1793981892950]