[{"data":1,"prerenderedAt":230},["ShallowReactive",2],{"seo-verification":3,"blog-docker-compose-في-الإنتاج-قائمة-التحقق-من-10-نقاط-ma-ar":6,"promo-bar-likely":229},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-docker-compose-في-الإنتاج-قائمة-التحقق-من-10-نقاط-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":27,"featuredImage":29,"bgImage":30,"posterImage":31,"relatedSolution":29,"intro":32,"sections":33,"ctaTitle":170,"ctaBody":171,"ctaButton":172,"ctaUrl":173,"relatedPosts":174},229,"docker-compose-في-الإنتاج-قائمة-التحقق-من-10-نقاط",{"fr":12,"en":13,"ar":10,"es":14},"docker-compose-production-checklist","docker-compose-in-production-10-point-checklist","checklist-docker-compose-en-produccion","Docker Compose في الإنتاج: قائمة التحقق من 10 نقاط","‏قائمة تحقق ‎Docker Compose‎ للإنتاج: 10 إعدادات، فحوصات صحية، أسرار، تراجع، استكشاف الأخطاء، والانتقال من ‎docker-compose v1‎ إلى ‎docker compose‎ على ‎Ubuntu 26.04‎.",12,1,false,"2026-08-06T00:00:00+00:00","2026-10-23T13:27:09+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":25},3,"النشر","deploiement","bg-success\u002F10 text-success",[28],{"id":23,"name":24,"slug":25,"color":26,"icon":25},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Fdocker-compose-production-checklist-poster.svg","‏ملف ‎docker-compose‎‎.yml‎ الذي يعمل على حاسوبك لن ينجو من الإنتاج كما هو. إعادة التشغيل بعد الإقلاع، وحدود الموارد، والأسرار، وتدوير السجلات: كلها إعدادات غائبة افتراضيًا وتسبب أعطالًا صامتة بمجرد كشف الخدمة. تجمع قائمة التحقق هذه المعايير العشرة التي يجب فحصها قبل نشر حزمة ‎Compose‎ على خادم ‎VPS‎، ثم الفحوصات الصحية والأسرار والتراجع واستكشاف الأخطاء. وتغطي أيضًا الانتقال من `docker-compose` إلى `docker compose`، وهو أمر تفرض الترقية إلى ‎Ubuntu 26.04‎ حسمه.",[34,38,52,55,89,136,139,149,152,155,158,161,164,167],{"type":35,"title":36,"body":37},"h2","لماذا قائمة تحقق قبل الإنتاج","‏صُمِّم ‎Docker Compose‎ للتطوير: قيمه الافتراضية تفضِّل البساطة على المتانة. في التطوير لا تشكِّل هذه الإعدادات أي مشكلة. في الإنتاج تتحول إلى حوادث: قرص ممتلئ الساعة الثالثة فجرًا، قاعدة بيانات ضائعة بعد `docker compose down`، خدمة غير متاحة بعد انقطاع الكهرباء. البشرى: تقوية حزمة ‎Compose‎ لا تتطلب إعادة كتابة، بل عشر إضافات مستهدفة فحسب. مرر كل نقطة في هذه القائمة قبل الإطلاق وستصمد خدمتك أمام الأحمال وعمليات إعادة التشغيل بلا مراقبة مستمرة.",{"type":39,"title":40,"items":41},"ul","النقاط العشر بلمحة",[42,43,44,45,46,47,48,49,50,51],"‏**restart: unless-stopped** — تُعاد الحاوية بعد إقلاع المضيف أو انهيارها","‏**healthcheck** — يكتشف ‎Docker‎ حاوية عالقة ويتيح إعادة التشغيل التدريجي","‏**حدود المعالج والذاكرة** — خدمة جامحة لا يمكنها خنق جيرانها","‏**الأسرار عبر ‎.env‎ أو ‎Docker secrets‎** — لا كلمة مرور بنص صريح","‏**وحدات تخزين مُسمَّاة** — تنجو البيانات من `docker compose down`","‏**تدوير السجلات** — `max-size` و`max-file` يمنعان امتلاء القرص","‏**عزل الشبكة** — افصل `frontend` و`backend`","‏**ربط المنافذ** — `127.0.0.1:PORT` خلف وكيل عكسي، لا `0.0.0.0`","‏**وسوم صور مثبَّتة** — نسخة أو بصمة، لا `latest`","‏**depends_on مع شرط** — `service_healthy` يتجنب سباقات الإقلاع",{"type":35,"title":53,"body":54},"المتطلبات المسبقة","‏تحتاج إلى خادم ‎VPS‎ عليه ‎Docker Engine‎ وإضافة ‎Compose v2‎. الأمر هو `docker compose` بلا شرطة: تحقق منه عبر `docker compose version`، لأن صيغة `deploy.resources` خارج ‎Swarm‎ تتطلب ‎Compose v2‎ (أما `docker-compose` القديم فنتناوله أدناه). افحص المحرك أيضًا عبر `docker version`. يصحِّح ‎Docker Engine 29.7.2‎ الثغرة \u003Ca href=\"https:\u002F\u002Fwww.imperva.com\u002Fblog\u002Fcopyescape-docker-vulnerability-cve-2026-17106\u002F\">‎CVE-2026-17106‎\u003C\u002Fa> (‎CopyEscape‎)، وهي حالة تسابق في `docker cp` أُفصح عنها في 10 أغسطس 2026: تستطيع حاوية غير موثوقة عبرها الكتابة فوق ملف على المضيف، بما في ذلك الملف التنفيذي `runc`. على أجهزة العمل، وصل التصحيح في ‎Docker Desktop 4.86.0‎. وإلى أن تُحدِّث، لا تشغِّل `docker cp` من حاوية لا تتحكم في محتواها. ضع المشروع في مجلد مخصص (`\u002Fopt\u002Fmyapp`) مع ملف `.env` بصلاحيات `chmod 600`. خطِّط لوكيل عكسي في المقدمة — ‎Traefik‎ أو ‎Caddy‎ أو ‎Nginx‎ — لأن ربط المنافذ يفترض ألا تصل الحركة العامة إلى حاوياتك مباشرة، واحفظ ملف ‎Compose‎ تحت إدارة الإصدارات.",{"type":56,"title":57,"steps":58},"steps","الخطوات العشر المفصَّلة",[59,62,65,68,71,74,77,80,83,86],{"title":60,"body":61},"1. سياسة إعادة التشغيل","‏أضف `restart: unless-stopped` إلى كل خدمة. تُعاد الحاوية بعد انهيار أو إقلاع المضيف، لكنها تبقى موقوفة إذا أوقفتها بإرادتك. تجنَّب `restart: always` الذي يُعيد تشغيل حتى حاوية أردتَ إيقافها، وفضِّل `unless-stopped` للخدمات التطبيقية و`on-failure` للمهام الوقتية.",{"title":63,"body":64},"2. الفحص الصحي","‏أعلن كتلة `healthcheck:` مع `test` و`interval` (مثلاً `30s`) و`timeout` (مثلاً `10s`) و`retries` (مثلاً `3`). أضف `start_period: 40s` للخدمات البطيئة في الإقلاع حتى لا تُعدَّ `unhealthy` أثناء التهيئة. يُعلِّم ‎Docker‎ الحاوية بـ`healthy` أو `unhealthy` مما يتيح لـ`depends_on: condition: service_healthy` انتظار الجاهزية الفعلية.",{"title":66,"body":67},"3. حدود الموارد","‏تحت `deploy.resources.limits`، حدِّد `cpus` و`memory` (مثلاً `memory: 512M`). بلا حد تستطيع خدمة نازفة استهلاك كل الذاكرة وتُفعِّل قاتل OOM. أضف `reservations` لضمان حد أدنى عند الإقلاع.",{"title":69,"body":70},"4. الأسرار خارج الملف","‏لا تضع أبدًا كلمة مرور بنص صريح في YAML. أرجع إليها عبر `env_file` أو `secrets:` الذي يُحمِّل الأسرار كملفات تحت `\u002Frun\u002Fsecrets\u002F` داخل الحاوية، بعيدًا عن `docker inspect`. أضف `.env` إلى `.gitignore`.",{"title":72,"body":73},"5. وحدات التخزين المُسمَّاة","‏أعلن بياناتك في وحدات تخزين مُسمَّاة بمشغِّل صريح. وحدة التخزين المسمَّاة تنجو من `docker compose down`؛ يمحوها فقط `down -v`. وثِّق كل وحدة تخزين واربطها باستراتيجية استرداد مختبَرة.",{"title":75,"body":76},"6. تدوير السجلات","‏أضف `logging:` مع `driver: json-file` وخياريَّي `max-size` و`max-file`. بلا هذا تملأ سجلات حاوية ثرثارة القرص حتى العطل. طبِّقه على كل خدمة.",{"title":78,"body":79},"7. عزل الشبكة","‏أنشئ شبكات مُسمَّاة `frontend` و`backend` وأرفق كل خدمة فقط بما تحتاجه. أضف `internal: true` على شبكة `backend` لمنع أي وصول من المضيف أو الإنترنت.",{"title":81,"body":82},"8. ربط المنافذ","‏انشر على `127.0.0.1:8080:8080` لا `8080:8080` خلف وكيل عكسي. Docker يعدِّل قواعد iptables مباشرة وقد يتجاوز UFW — ربط `127.0.0.1` هو الضمان الوحيد الموثوق.",{"title":84,"body":85},"9. وسوم الصور المثبَّتة","‏استبدل `latest` بنسخة محددة أو بصمة. استخدم `pull_policy: missing` لسلوك متوقع: لا يسحب Compose صورة جديدة إلا إذا كانت غائبة محليًا.",{"title":87,"body":88},"10. ترتيب الإقلاع","‏استخدم `depends_on` مع `condition: service_healthy`. للخدمات التي لا تدعم فحصًا صحيًا أصليًا، استخدم `condition: service_started` مع سكريبت انتظار مثل `wait-for-it.sh`.",{"type":90,"title":91,"headers":92,"rows":96},"comparison","إعدادات التطوير مقابل الإنتاج",[93,94,95],"الإعداد","افتراضي التطوير","موصى به للإنتاج",[97,101,105,109,113,117,120,124,128,132],[98,99,100],"restart","no","unless-stopped",[102,103,104],"healthcheck","غائب","مُعرَّف بفترة ومحاولات",[106,107,108],"الذاكرة","بلا حد","حد محدد",[110,111,112],"الأسرار","نص صريح ممكن","‎.env أو Docker secrets",[114,115,116],"وحدات التخزين","مجهولة","مُسمَّاة",[118,107,119],"السجلات","max-size + max-file",[121,122,123],"الشبكة","الجسر الافتراضي","frontend \u002F backend",[125,126,127],"المنافذ","0.0.0.0","127.0.0.1 خلف وكيل",[129,130,131],"الصورة","latest","نسخة أو بصمة",[133,134,135],"depends_on","الإطلاق فقط","condition: service_healthy",{"type":35,"title":137,"body":138},"‎docker-compose‎ أم ‎docker compose‎: قطيعة ‎Ubuntu 26.04‎","‏أداتان تحملان الاسم نفسه تقريبًا. `docker-compose` بالشرطة هي ‎Compose v1‎ المكتوبة بلغة ‎Python‎: يعلن مستودعها انتهاء عمرها منذ الإتاحة العامة لـ‎Compose v2‎ التي أعلنتها ‎Docker‎ في 26 أبريل 2022. و`docker compose` بمسافة هي ‎Compose v2‎ المكتوبة بلغة ‎Go‎ والمدمجة في واجهة ‎Docker‎ كإضافة. يُكمل ‎Ubuntu 26.04‎ هذا الانتقال: الحزمة `docker-compose` لم تعد في الأرشيف منذ ‎Ubuntu 25.10‎، والحزمة `docker-compose-v2` لا تثبِّت سوى الإضافة في `\u002Fusr\u002Flibexec\u002Fdocker\u002Fcli-plugins\u002F`. بعد الترقية، يتوقف كل سكربت ما زال يستدعي الاسم القديم عند الرسالة `docker-compose: command not found`. وفي التكامل المستمر، أخرجت ‎GitHub‎ إصدار ‎Compose v1‎ من مشغلاتها المستضافة في 9 يوليو 2024، وتنقل `ubuntu-latest` إلى ‎Ubuntu 26.04‎ بين 19 أكتوبر و19 نوفمبر 2026: سير العمل الذي كان يثبِّت `docker-compose` يدويًا يحتاج إلى مراجعة. هناك فرقان موثَّقان في السلوك. أسماء الحاويات تستعمل الشرطة بدل الشرطة السفلية (`myapp-web-1` مقابل `myapp_web_1`)، إلا مع `--compatibility`. والمفتاح `version:` يُتجاهَل مع التحذير «‎the attribute‎ `version` ‎is obsolete, it will be ignored‎».",{"type":39,"title":140,"items":141},"ترحيل السكربتات وإضافة ‎shim‎",[142,143,144,145,146,147,148],"‏**الجرد** — الأمر `grep -rnE 'docker-compose( |$)' \u002Fopt \u002Fetc\u002Fcron* \u002Fetc\u002Fsystemd ~\u002F.bashrc` يسرد الاستدعاءات التي يجب تصحيحها.","‏**السكربتات و‎Makefile‎** — استبدل الشرطة بمسافة (`docker compose up -d`)؛ الأوامر الفرعية المعتادة لا تتغير.","‏**‎cron‎ و‎systemd‎** — استدعِ `\u002Fusr\u002Fbin\u002Fdocker compose` بمسار مطلق، لأن ‎cron‎ يعمل بمتغير `PATH` مختصر.","‏**‎GitHub Actions‎** — اختبر سير العمل عبر `runs-on: ubuntu-26.04` قبل التحويل، أو ثبِّت `ubuntu-24.04` ريثما تصحِّحه، كما توصي ‎GitHub‎.","‏**‎Shim‎ مؤقت** — ملف تنفيذي `\u002Fusr\u002Flocal\u002Fbin\u002Fdocker-compose` من سطرين، `#!\u002Fbin\u002Fsh` ثم `exec docker compose \"$@\"`، يلتقط الاستدعاءات المنسية. وتصون ‎Docker‎ أيضًا الأداة `compose-switch` التي تترجم صيغة ‎v1‎ إلى ‎v2‎.","‏**أسماء الحاويات** — استبدل `docker exec myapp_web_1` المكتوب يدويًا بـ`docker compose exec web` الذي لا يعتمد على الفاصل.","‏**التحقق** — `docker compose version` يجيب، و`docker compose config` يمر بلا تحذير، و`command -v docker-compose` لا يشير إلا إلى الـ‎shim‎.",{"type":35,"title":150,"body":151},"الفحوصات الصحية المتقدمة: مراقبة الحالة الفعلية للخدمة","‏فحص صحي جيد التهيئة يتجاوز `curl` البسيط: يقيس الحالة الوظيفية للخدمة لا مجرد التوافر الشبكي. لواجهة برمجية HTTP اختبر نقطة نهاية خفيفة (`\u002Fhealth` أو `\u002Fready`) تُعيد 200 فقط إذا كان اتصال قاعدة البيانات قائمًا. لـ‎PostgreSQL‎ استخدم `pg_isready -U postgres`. لـ‎Redis‎ يكفي `redis-cli ping`. تحقق من حالة حاوياتك بـ`docker compose ps`: العمود `STATUS` يعرض `healthy` أو `unhealthy` أو `starting`. حاوية عالقة في `starting` لأطول من `start_period` تشير إلى مشكلة تهيئة — راجع `docker compose logs service` لمعرفة السبب. المعامل `start_period` مستقل عن `interval`: يحدد نافذة سماح لا تُحسب فيها الإخفاقات ضمن `retries`، وهو ضروري للخدمات التي تحتاج وقتًا للترحيل أو التعبئة.",{"type":35,"title":153,"body":154},"‎Docker secrets‎ بدون ‎Swarm‎: تحميل الملفات في ‎\u002Frun\u002Fsecrets\u002F","‏خارج ‎Swarm‎، يقبل ‎Compose‎ الأسرار من نوع الملف. أعلن السر في قسم `secrets:` بمستوى الجذر مشيرًا إلى ملف محلي (`file: .\u002Fsecrets\u002Fdb_password.txt`)، ثم أشر إليه في الخدمة عبر `secrets: [db_password]`. يُحمِّل ‎Docker‎ هذا الملف للقراءة فقط في `\u002Frun\u002Fsecrets\u002Fdb_password`: يقرؤه التطبيق كملف عادي، ولا تظهر قيمته في متغيرات البيئة التي يعرضها `docker inspect` ولا في السجلات. للتدوير، أعطِ السر رقم إصدار: أنشئ `db_password_v2` بجانب `db_password_v1`، واجعل الخدمة تقرأ `v2`، وأعد نشرها وحدها عبر `docker compose up -d --no-deps service`، ثم احذف `v1` بعد التحقق من النشر. يقتصر الانقطاع على إعادة إنشاء هذه الحاوية، ويبقى السر القديم متاحًا للتراجع.",{"type":35,"title":156,"body":157},"التراجع: العودة إلى الوراء بعد نشر فاشل","‏التراجع عن حزمة ‎Compose‎ يُجهَّز قبل النشر لا بعد الحادثة. احتفظ بالصورة السابقة موسومة ومتاحة محليًا: أضف وسمًا صريحًا `myapp:stable` قبل كل تحديث. للتراجع، أعد الوسم القديم في ملف ‎Compose‎ (أو في ملف `.env` إن كان الإصدار متغيرًا)، ثم أعد تشغيل `docker compose up -d`. لا تتأثر وحدات التخزين بتغيير الصورة، مما يجعل التراجع التطبيقي سريعًا؛ أما ترحيل المخطط فيحتاج إلى ترحيل عكسي جاهز قبل النشر. للإصدارات الحرجة، افصل بين `docker-compose.yml` (النسخة المستقرة) و`docker-compose.override.yml` (النسخة المرشحة): الأمر `docker compose -f docker-compose.yml up -d` يتجاهل ملف التجاوز ويعود إلى الحالة المستقرة.",{"type":159,"body":160},"tip","‏اختبر دائمًا حزمتك المقوَّاة محليًا: `docker compose config` للتحقق من البنية، ثم محاكاة الإقلاع بـ`docker compose restart`. تأكد أن الحاويات تعود `healthy` وأن البيانات تستمر بعد `down` يعقبه `up`.",{"type":35,"title":162,"body":163},"استكشاف الأخطاء: 6 أخطاء شائعة وحلولها","‏**`docker: unknown command: docker compose`**: إضافة ‎Compose‎ غير مثبتة. على ‎Ubuntu‎، ثبِّت `docker-compose-v2` من الأرشيف، أو `docker-compose-plugin` إن كان ‎Docker‎ مثبتًا من المستودع الرسمي لـ‎Docker‎، ثم تحقق عبر `docker compose version`. **`network not found`**: بعد `docker compose down` تُحذف الشبكات المسمَّاة. الحل: أعلن الشبكات المشتركة بـ`external: true` أو زامن إعادة تشغيل الحزم التابعة. **`port is already in use`**: عملية أخرى تشغل المنفذ. حدِّدها بـ`ss -tlnp | grep :PORT` ثم أوقفها. **OOM**: النواة تقتل حاوية بلا إنذار — ابحث عن `OOMKilled: true` في `docker inspect container_id`. ارفع حد الذاكرة أو حدِّد التسريب بـ`docker stats`. **`permission denied on volume`**: العملية تعمل بـUID لا يملك صلاحية الوصول. تحقق من UID بـ`docker compose exec service id` ثم عدِّل الأذونات. **حاوية تُعاد في حلقة**: `docker compose logs --tail=50 service` يكشف خطأ الإقلاع. الأسباب الشائعة: متغير بيئة مفقود، ملف إعداد غير موجود، أو تبعية غير جاهزة.",{"type":35,"title":165,"body":166},"نسخ الأحجام احتياطيًا دون تلف","‏نسخ ملفات حجم ‎PostgreSQL‎ أو ‎MySQL‎ أثناء تشغيلها بـ`rsync` أو `tar` ينتج نسخة تالفة. القاعدة: دائمًا `pg_dump` أو `mysqldump` قبل لقطة الحجم. أدوات مثل ‎Restic‎ و‎Offen Docker Backup‎ تُنظِّم هذا تلقائيًا.",{"type":35,"title":168,"body":169},"الخاتمة","‏تحوِّل هذه الإعدادات العشرة ملف ‎Compose‎ تطويريًا إلى حزمة تصمد أمام إعادة التشغيل وذروات الحمل والليالي بلا مراقبة. الفحوصات الصحية، والأسرار المحمَّلة كملفات، والتراجع المجهَّز مسبقًا، والانتقال الكامل إلى `docker compose` تُكمل هذا الأساس. لا يتطلب شيء من ذلك أداة إضافية: كل شيء في ملفات ‎YAML‎ والسكربتات التي لديك بالفعل. راجع القائمة قبل كل إطلاق، مثلًا عبر مراجعة `docker compose config` مدمجة في النشر. يمكنك بعدها إضافة وكيل عكسي مثل ‎Traefik‎ أو ‎Caddy‎، أو طبقة تنسيق مثل ‎Coolify‎.","انشر حزمة Compose الخاصة بك في الإنتاج","‏يمنحك خادم ‎VPS ServOrbit‎ صلاحية الجذر والذاكرة والتحكم بالشبكة اللازمة لتشغيل حزمة ‎Docker Compose‎ مقوّاة.","انشر على VPS ServOrbit","\u002Fvps-cloud",[175,191,211],{"id":176,"slug":177,"slugs":178,"title":182,"excerpt":183,"readTime":184,"views":23,"isPinned":19,"noindex":19,"publishedAt":185,"updatedAt":186,"category":187,"categories":188,"featuredImage":29,"bgImage":30,"posterImage":190,"relatedSolution":29},38,"انشر-تطبيقاتك-باستخدام-traefik-على-خادم-vps",{"fr":179,"en":180,"ar":177,"es":181},"deployer-avec-traefik","deploy-your-applications-with-traefik-on-a-vps","desplegar-con-traefik","انشر تطبيقاتك باستخدام Traefik على خادم VPS","انشر Traefik كوكيل عكسي على خادم VPS الخاص بك: توجيه تلقائي لحاويات Docker، وشهادات SSL من Let's Encrypt، وموازنة أحمال.",11,"2026-05-13T00:00:00+00:00","2026-11-08T01:13:13+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":25},[189],{"id":23,"name":24,"slug":25,"color":26,"icon":25},"\u002Fblog\u002Fcovers\u002Fdeployer-avec-traefik-poster.svg",{"id":192,"slug":193,"slugs":194,"title":198,"excerpt":199,"readTime":200,"views":201,"isPinned":19,"noindex":19,"publishedAt":202,"updatedAt":203,"category":204,"categories":205,"featuredImage":29,"bgImage":30,"posterImage":207,"relatedSolution":208},39,"انشر-تطبيقاتك-باستخدام-caddy-على-خادم-vps",{"fr":195,"en":196,"ar":193,"es":197},"deployer-avec-caddy","deploy-your-applications-with-caddy-on-a-vps","desplegar-con-caddy","Caddy كـ reverse proxy على VPS: دليل شامل","ثبّت Caddy وهيّئه كـ reverse proxy على VPS: HTTPS تلقائي عبر ‎Let's Encrypt‎، تطبيقات متعددة، تأمين الخادم وحل الأخطاء الشائعة.",8,4,"2026-05-12T00:00:00+00:00","2026-09-25T23:43:04+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":25},[206],{"id":23,"name":24,"slug":25,"color":26,"icon":25},"\u002Fblog\u002Fcovers\u002Fdeployer-avec-caddy-poster.svg",{"categorySlug":209,"appSlug":210},"نشر-التطبيقات-وdevops","caddy",{"id":212,"slug":213,"slugs":214,"title":218,"excerpt":219,"readTime":17,"views":220,"isPinned":19,"noindex":19,"publishedAt":221,"updatedAt":222,"category":223,"categories":224,"featuredImage":29,"bgImage":30,"posterImage":226,"relatedSolution":227},41,"نشر-تطبيقاتك-باستخدام-coolify-على-vps",{"fr":215,"en":216,"ar":213,"es":217},"deployer-avec-coolify","deploy-your-applications-with-coolify-on-a-vps","desplegar-aplicaciones-con-coolify-en-un-vps","نشر تطبيقاتك باستخدام ‏Coolify على خادم ‏VPS","دليل شامل لنشر ‏Coolify على خادم ‏VPS: التثبيت، وإعداد ‏HTTPS، وربط ‏Git، ونشر أول تطبيق، وقواعد البيانات، والنسخ الاحتياطية، واستكشاف الأخطاء.",2,"2026-05-10T00:00:00+00:00","2026-10-31T01:54:10+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":25},[225],{"id":23,"name":24,"slug":25,"color":26,"icon":25},"\u002Fblog\u002Fcovers\u002Fdeployer-avec-coolify-poster.svg",{"categorySlug":209,"appSlug":228},"coolify",true,1794270334109]