[{"data":1,"prerenderedAt":188},["ShallowReactive",2],{"seo-verification":3,"blog-استضافة-ntfy-على-vps-إشعارات-فورية-من-سكريبتاتك-وcicd-ma-ar":6,"promo-bar-likely":187},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-استضافة-ntfy-على-vps-إشعارات-فورية-من-سكريبتاتك-وcicd-ma-ar",{"id":9,"slug":10,"slugs":11,"title":15,"excerpt":16,"readTime":17,"views":18,"isPinned":19,"noindex":19,"publishedAt":20,"updatedAt":21,"category":22,"categories":28,"featuredImage":30,"bgImage":31,"posterImage":32,"relatedSolution":33,"intro":36,"sections":37,"ctaTitle":124,"ctaBody":125,"ctaButton":126,"ctaUrl":127,"relatedPosts":128},194,"استضافة-ntfy-على-vps-إشعارات-فورية-من-سكريبتاتك-وcicd",{"fr":12,"en":13,"ar":10,"es":14},"self-host-ntfy-vps","self-host-ntfy-on-a-vps-push-notifications-for-scripts-and-cicd","autoalojar-ntfy-en-un-vps","استضافة ntfy على VPS: إشعارات فورية من سكريبتاتك وCI\u002FCD","انشر ntfy على VPS الخاص بك وأرسل إشعارات push من أي سكريبت أو مهمة cron أو خط CI\u002FCD بأمر curl بسيط — بدون SaaS أو API key أو اشتراك.",16,2,false,"2026-07-28T00:00:00+00:00","2026-11-04T16:30:26+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},8,"الأمان والمراقبة","securite-monitoring","bg-rose-500\u002F10 text-rose-400","security",[29],{"id":23,"name":24,"slug":25,"color":26,"icon":27},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Fself-host-ntfy-vps-poster.svg",{"categorySlug":34,"appSlug":35},"المراقبة-وقابلية-الرصد","ntfy","‏Slack يُكلف بالمقعد. رسائل البريد الإلكتروني تضيع في الضوضاء. ‏ntfy (Apache 2.0، ~32 ألف ⭐، v2.30.0 — أكتوبر 2026) يحل المشكلة بطريقة مختلفة: خادم ‏pub\u002Fsub HTTP خفيف الوزن تستضيفه ذاتيًا على ‏VPS، ويرسل إليه أي سكريبت تنبيهًا بـ ‏`curl -d`. يتلقى التطبيق المحمول الإشعار فورًا. حاوية ‏Docker واحدة، أقل من 30 ميغابايت ‏RAM، لا حساب خارجي مطلوب. في هذا المقال: النشر، المصادقة، الإعداد متعدد المستأجرين مع ‏`server.yml`، تكاملات ‏Backrest و‏Uptime Kuma وسكريبتات ‏cron، إشعارات ‏SMTP، والأخطاء الخمسة الحقيقية التي يواجهها كل مدير في الإنتاج.",[38,42,55,58,86,89,92,96,99,102,112,115,118,121],{"type":39,"title":40,"body":41},"h2","المشكلة: أدوات مراقبة كثيرة وقنوات إشعارات متفرقة","‏Uptime Kuma يراقب خدماتك، ‏Beszel يراقب مقاييس ‏VPS، ‏Backrest يدير نسخك الاحتياطية، ومهام ‏cron تصمت ليلًا — إلا حين تفشل. لكل أداة قناة إشعارات خاصة: ‏Slack، بريد إلكتروني، ‏webhook، ‏Telegram. النتيجة: خمس تكاملات مختلفة للصيانة وعدم وجود رؤية موحدة حين يتعطل شيء الساعة 3 صباحًا. يحل ‏ntfy هذه المشكلة بطريقة معكوسة: أنت تستضيف مركز الإشعارات، وكل أداة أو سكريبت يرسل تنبيهاته إليه عبر ‏HTTP بسيط.",{"type":43,"title":44,"items":45},"ul","ما يمنحك إياه ntfy مباشرةً",[46,47,48,49,50,51,52,53,54],"أرسل إشعارًا بأمر curl بسيط — `curl -d \"فشل البناء\" https:\u002F\u002Fntfy.example.com\u002Fتنبيهات-ci` — بدون SDK أو مكتبة.","استقبل الإشعارات على Android وiOS والمتصفح وواجهة ntfy الويب — جميعها تشترك في نفس الموضوع.","إجراءات الإشعارات — أزرار تُطلق استدعاءات HTTP أو تفتح URLs أو تُشغّل أوامر على الجهاز.","إشعارات مجدولة — تسليم مؤجل (`X-Delay: 30min`) لجدولة التذكيرات من السكريبتات.","مستويات الأولوية (دنيا \u002F منخفضة \u002F افتراضية \u002F عالية \u002F عاجلة) مع تجاوز وضع عدم الإزعاج.","مرفقات — صور أو ملفات حتى 15 ميغابايت عبر رأس `X-Attach`.","إشعارات SMTP — يرسل ntfy بريدًا احتياطيًا إذا كان جهازك المحمول غير متصل أو التطبيق غير مثبت.","التحكم في الوصول — مستخدمون وكلمات مرور مشفرة وتوكنات وصول وقوائم تحكم بالوصول لكل موضوع.","أقل من 30 ميغابايت RAM وSQLite وحاوية واحدة — أخف خادم إشعارات push مستضاف ذاتيًا.",{"type":39,"title":56,"body":57},"البنية: pub\u002Fsub HTTP في حاوية واحدة","‏ntfy هو ثنائي ‏Go يعمل في حاوية ‏Docker واحدة. يكشف واجهة ‏HTTP بسيطة: ‏`PUT` أو ‏`POST` على ‏`\u002Fموضوعك` ينشر رسالة؛ أي عميل يستمع لهذا الموضوع يتلقاها فورًا. تُخزَّن الرسائل في ‏SQLite مع استبقاء قابل للتكوين (12 ساعة افتراضيًا). في الإنتاج، يُوضع ‏ntfy خلف ‏nginx مع ‏TLS، ويُعلَّم ‏`behind-proxy: true` في ‏`server.yml` لقراءة عنوان ‏IP الحقيقي. كل الإعداد المتقدم — مصادقة، ‏SMTP، تحكم بالوصول — يعيش في ملف واحد ‏`\u002Fetc\u002Fntfy\u002Fserver.yml`.",{"type":59,"title":60,"steps":61},"steps","نشر ntfy في الإنتاج: 8 خطوات",[62,65,68,71,74,77,80,83],{"title":63,"body":64},"انشر ntfy من متجر ServOrbit","افتح لوحة ServOrbit → السوق → المراقبة → ntfy → نشر. يسحب Docker صورة `binwiederhier\u002Fntfy:v2.30.0` ويبدأ ntfy على المنفذ 8080، وتكون واجهة الويب متاحة في أقل من 5 ثوانٍ مع شهادة Let's Encrypt.",{"title":66,"body":67},"أرسل أول إشعار","من أي طرفية بها curl:\n`curl -d \"مرحبًا من VPS الخاص بي\" https:\u002F\u002Fntfy.example.com\u002Fموضوعي`\nافتح واجهة ntfy الويب، انتقل إلى الموضوع وسترى رسالتك مباشرة.",{"title":69,"body":70},"أنشئ ملف server.yml الكامل","ثبّت ملف الإعداد في الحاوية:\n`base-url: https:\u002F\u002Fntfy.example.com`\n`listen-http: \":8080\"`\n`behind-proxy: true`\n`cache-file: \u002Fvar\u002Flib\u002Fntfy\u002Fcache.db`\n`cache-duration: 12h`\n`auth-file: \u002Fvar\u002Flib\u002Fntfy\u002Fuser.db`\n`auth-default-access: deny-all`\n`smtp-sender-addr: smtp.example.com:587`\n`smtp-sender-user: notifications@example.com`\n`smtp-sender-pass: motdepasseSMTP`\n`smtp-sender-from: notifications@example.com`\nأعد تشغيل الحاوية بعد أي تعديل: `docker restart ntfy`.\nلتصل الإشعارات على iOS أيضًا، أضف ‎‎`upstream-base-url: \"https:\u002F\u002Fntfy.sh\"` إلى هذا الملف: يشرح قسم «iOS» أدناه السبب.",{"title":72,"body":73},"أنشئ مستخدمين وتوكنات وصول","# أنشئ مستخدم مدير\n`docker exec -it ntfy ntfy user add --role=admin admin`\n# أنشئ مستخدم للسكريبتات\n`docker exec -it ntfy ntfy user add scripts`\n# أنشئ توكن وصول\n`docker exec -it ntfy ntfy token add scripts`\n# منح حق القراءة والكتابة على موضوع محدد\n`docker exec -it ntfy ntfy access scripts server-alerts rw`",{"title":75,"body":76},"اشترك على هاتفك مع المصادقة","ثبّت تطبيق ntfy (Android: F-Droid أو Play Store؛ iOS: App Store). اضغط +، أدخل URL الخادم والموضوع، ثم اسم المستخدم وكلمة المرور عند الطلب. في iOS لا يصل الـ push الفوري إلا إذا كان ‎`upstream-base-url` معيَّنًا في خادمك (انظر القسم المخصص أدناه).",{"title":78,"body":79},"أرسل تنبيهات من مهام cron باستخدام التوكن","#!\u002Fbin\u002Fbash\n`NTFY_URL=\"https:\u002F\u002Fntfy.example.com\"`\n`NTFY_TOKEN=\"tk_AbCdEf123456\"`\n`\u002Fusr\u002Flocal\u002Fbin\u002Fbackup.sh; STATUS=$?`\n`if [ $STATUS -eq 0 ]; then`\n`curl -s -H \"Authorization: Bearer $NTFY_TOKEN\"        -H \"Title: نسخ احتياطي ليلي\" -H \"Priority: default\"        -d \"اكتمل في $(date)\" \"$NTFY_URL\u002Fcron-jobs\"`\n`else`\n`curl -s -H \"Authorization: Bearer $NTFY_TOKEN\"        -H \"Title: فشل النسخ الاحتياطي\" -H \"Priority: urgent\"        -d \"فشل — كود $STATUS\" \"$NTFY_URL\u002Fcron-jobs\"`\n`fi`",{"title":81,"body":82},"اربط Backrest وUptime Kuma","‏Backrest: واجهة Backrest → الخطط → هوكات → أضف هوك → نوع `Webhook (ntfy)` → أدخل URL الموضوع والتوكن. Uptime Kuma: الإعدادات → الإشعارات → ntfy → أدخل URL الخادم والموضوع. Grafana: نقطة اتصال من نوع webhook مع رأس Authorization.",{"title":84,"body":85},"فعّل إشعارات البريد الاحتياطية (SMTP)","أضف رأس `X-Email` لإرسال إشعار push + بريد في آنٍ واحد:\n`curl -H \"Authorization: Bearer $NTFY_TOKEN\"      -H \"Title: تنبيه حرج\"      -H \"X-Email: you@example.com\"      -d \"القرص ممتلئ 95%\"      https:\u002F\u002Fntfy.example.com\u002Fserver-alerts`",{"type":39,"title":87,"body":88},"المصادقة وتوكنات الوصول: لا تعرّض موضوعًا عامًا أبدًا","بدون إعداد، يبدأ ‏ntfy بلا تحكم في الوصول (تذكر الوثائق أن ‎`auth-default-access` هو ‎`read-write`) — أي شخص يعرف الرابط يستطيع القراءة والكتابة. في الإنتاج: ‏`auth-default-access: deny-all` يغلق الخادم، ثم مستخدمون بكلمات مرور مشفرة ‏bcrypt في ‏`user.db`، ثم توكنات وصول مرتبطة بمستخدم محدد وقابلة للإلغاء مستقلًا. التوكن المخترق يُلغى دون تغيير كلمة المرور.",{"type":39,"title":90,"body":91},"الإعداد متعدد المستأجرين: خادم واحد، فرق متعددة","ينشئ ‏ntfy مستخدمًا لكل خدمة أو فريق مع منح حق الوصول فقط لمواضيعه. المستخدم ذو دور ‏`admin` يرى كل شيء؛ المستخدمون العاديون محصورون بقوائم تحكم الوصول. للفرق التي تحتاج عزلًا تامًا، انشر حاويتين ‏ntfy على نطاقين فرعيين مستقلين.",{"type":93,"title":94,"body":95},"tip","نصيحة: أسماء المواضيع كفضاءات أسماء واستراتيجية الكتم الليلي","‏`ci-builds` لـ GitHub Actions، ‏`server-alerts` لـ Uptime Kuma\u002FBeszel، ‏`cron-jobs` للسكريبتات، ‏`backups` لـ Backrest. يتيح تطبيق ntfy كتم بعض المواضيع ليلًا مع إبقاء ‏`server-alerts` على أعلى أولوية.",{"type":39,"title":97,"body":98},"استكشاف الأخطاء: 5 أخطاء حقيقية في الإنتاج","**1.‏ `HTTP 403 Forbidden` عند الإرسال أو الاشتراك**\nالرسالة: `{\"code\":40301,\"http\":403,\"error\":\"Unauthorized\"}`\nالسبب: التوكن مفقود أو منتهي الصلاحية. أعد توليد التوكن بـ ‏`ntfy token add \u003Cuser>`.\n\n**2. إشعار مرسل لكنه لم يصل على الهاتف**\nعلى Android تحقق أولًا أن التطبيق مشترك في نسختك لا في الخادم العام ‎‎`ntfy.sh` (العنوان في إعدادات التطبيق). وعلى iOS فالسبب الأرجح غياب ‎‎`upstream-base-url: \"https:\u002F\u002Fntfy.sh\"` من ‎`server.yml`: بدون هذا الوسيط تحذّر الوثائق من أن التسليم قد يستغرق ساعات. عيّنه ثم راجع قائمة التحقق في قسم iOS أدناه. يجب تعيين ‎`base-url` أيضًا، لكن الوثائق تربطه بعناوين المرفقات وتذييل البريد لا بوصول الـ push.\n\n**3. روابط خاطئة في رسائل البريد الصادرة**\nبدون ‏`base-url` يُبنى تذييل البريد (رابط الإشعار) دون العنوان العام فلا ينفع من الخارج. الحل: تعيين ‏`base-url` وإعادة التشغيل.\n\n**4. انقطاعات WebSocket المتكررة (إعادة اتصال كل 30 ث)**\nالسبب: مهلة ‏nginx أقل من فترة نبضات قلب ‏ntfy (‎`keepalive-interval: \"45s\"` في إعداد المثال بالوثائق). أضف ‏`proxy_read_timeout 60;` و‏`proxy_send_timeout 60;` في كتلة ‏`location`.\n\n**5. نفاد الذاكرة على موضوع بحجم مرور عالٍ**\nخفِّض ‏`cache-duration` إلى ‏`1h` ورشِّح السكريبتات لإرسال الأحداث الهامة فقط. يمكن لـ ‏ntfy استخدام ‏PostgreSQL بدل ‏SQLite لتخزينه (انظر وثائق الإعداد).",{"type":39,"title":100,"body":101},"iOS: لماذا يمر ntfy المستضاف ذاتيًا عبر ‎ntfy.sh لإرسال الـ push","في iOS لا يستطيع التطبيق إبقاء اتصال مفتوح في الخلفية، وتشرح وثائق ntfy أن هذا القيد يجعل الإشعار الفوري مستحيلًا دون خادم مركزي. لذلك يرسل خادمك المستضاف ذاتيًا عن كل رسالة طلب «poll» إلى خادم upstream هو ‎‎`ntfy.sh` افتراضيًا، فيتولى إيقاظ التطبيق. الإعداد هو ‎‎`upstream-base-url: \"https:\u002F\u002Fntfy.sh\"`. هذا الطلب لا يحمل إلا معرّف الرسالة (الترويسة ‎`X-Poll-ID`) وبصمة SHA-256 لعنوان الموضوع، ولا يحمل النص أبدًا: الخادم المستضاف ذاتيًا يرسل حرفيًا «New message»، ثم يجلب التطبيق المحتوى الحقيقي من خادمك. بدون ‎`upstream-base-url` تحذّر الوثائق من أن الإشعارات تصل في النهاية لكن التسليم قد يستغرق ساعات (من 20 إلى 30 دقيقة إذا كان الهاتف قيد الاستخدام). المعامل ‎`upstream-access-token` اختياري: تحصره الوثائق في حالة تجاوز حدود الخادم upstream أو كونه محميًا.",{"type":43,"title":103,"items":104},"قائمة تحقق iOS: سبعة فحوص قبل التعمق أكثر",[105,106,107,108,109,110,111],"**`base-url`** — معيَّن على عنوان HTTPS العام لخادمك، العنوان الذي يستطيع الهاتف الوصول إليه.","**`upstream-base-url`** — موجود في ‎`server.yml` (أو كمتغير بيئة) بالقيمة ‎‎`https:\u002F\u002Fntfy.sh`، مع إعادة تشغيل الحاوية.","**الخادم الافتراضي في التطبيق** — في إعدادات تطبيق iOS يكون عنوان خادمك هو المعلن كخادم افتراضي.","**الاشتراك في الخادم الصحيح** — أُضيف الموضوع باختيار خادمك وليس ‎‎`ntfy.sh`؛ فموضوع بالاسم نفسه على الخادم العام هو موضوع آخر.","**توكن upstream** — ‎`upstream-access-token` لا يفيد إلا عند بلوغ حدود الخادم الوسيط؛ وما دام السبب غير مثبت فلا تضفه بدافع الانعكاس أملًا في حل المشكلة.","**سجلات الخادم** — تحقق أن الرسالة تُنشر ثم تُحوَّل إلى الخادم الوسيط. إن حدث ذلك فجانبك سليم والمشكلة بين الوسيط وApple والهاتف.","**إعدادات الهاتف** — تحديث التطبيق في الخلفية والإشعارات مفعّلان للتطبيق، ولا يوجد حاجب DNS (AdGuard Home أو Pi-hole) يصفّي ‎‎`ntfy.sh`.",{"type":39,"title":113,"body":114},"عندما لا يصل شيء رغم كل ذلك: ما تقوله القضيتان #1305 و#1844 فعلًا","تصف هاتان القضيتان في مستودع ntfy العَرَض الذي تلاحقه: خادم مستضاف ذاتيًا، وإشعار iOS لا يظهر، ورسائل لا تظهر إلا عند تحديث التطبيق يدويًا. قُرئتا في 30 أكتوبر 2026، وكلتاهما مفتوحة ولا تحدد أي منهما سببًا مؤكدًا.\n\n**#1305 «No push notifications on ios?»** (فُتحت في مارس 2025، بوسمَي ios وbug). لا يتلقى صاحب البلاغ أي إشعار، لا مع ntfy.sh ولا مع نسخته الخاصة. تقول بعض التعليقات إن إعادة تثبيت التطبيق أفادت، وتقول أخرى إن المشكلة عادت بعد أشهر. يقترح مساهم أن يعيد التطبيق الاشتراك في موضوعات Firebase عند التشغيل وقد فتح PR مسودة، مبينًا أنه لم يستطع اختبارها. ويسأل مشرف صاحبَ البلاغ هل اشتراك Firebase هو السبب، دون أن يخلص إلى نتيجة.\n\n**#1844 «No iOS Push notification, also with valid subscription»** (فُتحت في يوليو 2026، بوسوم ios وserver وbug). يشغّل صاحب البلاغ ntfy في Docker مع ‎`NTFY_UPSTREAM_BASE_URL` على ‎`https:\u002F\u002Fntfy.sh` و‎`NTFY_UPSTREAM_ACCESS_TOKEN` معبَّأ. يقول إنه بلغ الحد المجاني وهو 250 رسالة يوميًا ثم اشترك باشتراك مدفوع. تُظهر سجلاته الرسالة منشورة ومرسلة إلى الوسيط، ومع ذلك لا يصل أي push. يجيب مساهم بأن أخطاء 429 قد تؤدي إلى حظر عنوان IP لمدة تصل إلى 4 ساعات، ويلاحظ أن اختبار ‎`curl` عند صاحب البلاغ ينجح (فلا حظر)، وأن الحساب أظهر 48 رسالة مرسلة من 2500. ويضيف أن إشعارات iOS متقلبة دون أن يُعرف السبب بدقة. الحل البديل المبلَّغ عنه: إيقاف «تحديث التطبيق في الخلفية» و«الإشعارات» ثم تشغيلهما من جديد في إعدادات iOS. يكتب صاحب البلاغ أنه لا يعرف لماذا ينجح ذلك؛ فقد عادت المشكلة ثم زالت دون سبب معروف، ويؤكد مستخدم آخر هذا الحل في سبتمبر 2026. ويربط بلاغ آخر حالة مشابهة بقوائم حظر DNS.\n\n**ما يمكن استنتاجه وما لا يمكن.** لا حدّ يومي للرسائل ولا حظر 429 مثبتان كسبب في هذين الخيطين: فالـ429 مستبعد لعنوان IP صاحب البلاغ، وحد 250 رسالة رقم ذكره هو لا وثائق الإعداد. وتوكن upstream لا يحل المشكلة هناك. عامل القائمة أعلاه كفحوص لا كإصلاح مضمون.",{"type":93,"title":116,"body":117},"نصيحة: لا تعتمد في تنبيه حرج على push الخاص بـ iOS وحده","ما دامت هاتان القضيتان مفتوحتين، ضاعف التنبيهات المهمة: أضف الترويسة ‎`X-Email` (انظر خطوة SMTP) لتتلقى بريدًا إلكترونيًا أيضًا، أو احتفظ بقناة ثانية على الهاتف. ويقترح المساهمون في القضيتين PWA (إشعارات الويب) بديلًا لتطبيق iOS. واختبر من الطرف إلى الطرف بعد كل تحديث للتطبيق أو لـ iOS، بنبضة watchdog الموصوفة أعلاه.",{"type":39,"title":119,"body":120},"تكاملات متقدمة: Backrest وUptime Kuma وGrafana","‏Backrest يدعم ‏ntfy بشكل أصلي. ‏Uptime Kuma يدعم ‏ntfy في مدير الإشعارات. ‏Grafana يستخدم ‏webhooks عامة مع رأس ‏Authorization. جميعها تصل إلى نفس موضوع ‏ntfy وتُسلِّم الإشعارات على هاتفك فور وقوع الحدث.",{"type":93,"title":122,"body":123},"نصيحة: اختبر سلسلة التسليم بالكامل قبل الاعتماد عليها","أرسل إشعارًا بـ curl، تحقق من ظهوره في واجهة الويب، وصوله على التطبيق المحمول، ووصول البريد الاحتياطي. جدول ‏cron كل 30 دقيقة يرسل نبضة حياة على موضوع ‏`watchdog` — إذا لم تصل النبضة، ‏ntfy نفسه توقف.","مركز إشعاراتك تحت سيطرتك","انشر ntfy على VPS من ServOrbit وأجمع كل تنبيهات المراقبة وCI\u002FCD ومهام cron في مركز إشعارات مستضاف ذاتيًا — بلا SaaS وبلا اشتراك.","نشر ntfy","\u002Fapplications\u002Fالمراقبة-وقابلية-الرصد\u002Fntfy",[129,146,169],{"id":130,"slug":131,"slugs":132,"title":136,"excerpt":137,"readTime":23,"views":18,"isPinned":19,"noindex":19,"publishedAt":138,"updatedAt":139,"category":140,"categories":141,"featuredImage":30,"bgImage":31,"posterImage":143,"relatedSolution":144},133,"استضف-beszel-على-vps-مركز-مراقبة-متعدد-الخوادم",{"fr":133,"en":134,"ar":131,"es":135},"self-host-beszel-vps","self-host-beszel-multi-server-monitoring-hub-on-your-vps","alojar-beszel-hub-monitorizacion-vps","استضف Beszel على VPS: المراقبة والتنبيهات والأمان","انشر Beszel على VPS، راقب كامل أسطولك من مركز واحد، هيّئ تنبيهات Telegram والبريد الإلكتروني، فعّل المصادقة الثنائية وحلّ مشاكل الوكلاء الصامتين وأخطاء TLS والمنافذ المحجوبة.","2026-02-14T00:00:00+00:00","2026-11-04T16:30:25+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},[142],{"id":23,"name":24,"slug":25,"color":26,"icon":27},"\u002Fblog\u002Fcovers\u002Fself-host-beszel-vps-poster.svg",{"categorySlug":34,"appSlug":145},"beszel",{"id":147,"slug":148,"slugs":149,"title":153,"excerpt":154,"readTime":155,"views":18,"isPinned":19,"noindex":19,"publishedAt":156,"updatedAt":157,"category":158,"categories":164,"featuredImage":30,"bgImage":31,"posterImage":166,"relatedSolution":167},167,"استضافة-dozzle-على-vps-عارض-سجلات-docker-لحظيا",{"fr":150,"en":151,"ar":148,"es":152},"self-host-dozzle-vps","how-to-self-host-dozzle-on-a-vps-real-time-docker-log-viewer","alojar-dozzle-en-un-vps","استضافة Dozzle على VPS: عارض سجلّات Docker لحظياً","انشر Dozzle على خادم VPS الخاص بك — عارض سجلّات Docker مفتوح المصدر وعديم الحالة. ابثّ سجلّات جميع حاوياتك وابحث فيها وتابِعها في المتصفح، دون SSH أو تخزين للسجلّات.",4,"2026-07-06T00:00:00+00:00","2026-09-07T11:26:10+00:00",{"id":159,"name":160,"slug":161,"color":162,"icon":163},7,"الاستضافة الذاتية","self-hosting","bg-indigo-500\u002F10 text-indigo-400","cloud",[165],{"id":159,"name":160,"slug":161,"color":162,"icon":163},"\u002Fblog\u002Fcovers\u002Fself-host-dozzle-vps-poster.svg",{"categorySlug":34,"appSlug":168},"dozzle",{"id":170,"slug":171,"slugs":172,"title":176,"excerpt":177,"readTime":178,"views":179,"isPinned":19,"noindex":19,"publishedAt":180,"updatedAt":157,"category":181,"categories":182,"featuredImage":30,"bgImage":31,"posterImage":184,"relatedSolution":185},182,"استضافة-changedetectionio-على-vps-مراقبة-تغييرات-المواقع",{"fr":173,"en":174,"ar":171,"es":175},"self-host-changedetection-vps","self-host-changedetectionio-on-a-vps-monitor-any-website","alojar-changedetection-io-en-un-vps","مراقبة تغييرات المواقع مع Changedetection.io","نشر ‎Changedetection.io‎ على ‎VPS‎: كشف التغييرات مفتوح المصدر، فلاتر ‎CSS\u002FXPath‎، أكثر من 80 قناة إشعار. إصلاح تراجعات الإصدار ‎v0.60.x‎ وإرشادات التحديث الآمن.",9,0,"2026-07-17T00:00:00+00:00",{"id":159,"name":160,"slug":161,"color":162,"icon":163},[183],{"id":159,"name":160,"slug":161,"color":162,"icon":163},"\u002Fblog\u002Fcovers\u002Fself-host-changedetection-vps-poster.svg",{"categorySlug":34,"appSlug":186},"changedetection",true,1794270234710]