[{"data":1,"prerenderedAt":187},["ShallowReactive",2],{"seo-verification":3,"blog-انشر-تطبيقاتك-باستخدام-caddy-على-خادم-vps-ma-ar":6,"promo-bar-likely":186},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-انشر-تطبيقاتك-باستخدام-caddy-على-خادم-vps-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":32,"intro":35,"sections":36,"ctaTitle":128,"ctaBody":129,"ctaButton":130,"ctaUrl":131,"relatedPosts":132},39,"انشر-تطبيقاتك-باستخدام-caddy-على-خادم-vps",{"fr":12,"en":13,"ar":10,"es":14},"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,false,"2026-05-12T00:00:00+00:00","2026-09-25T23:43:04+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\u002Fdeployer-avec-caddy-poster.svg",{"categorySlug":33,"appSlug":34},"نشر-التطبيقات-وdevops","caddy","‏Caddy خادم ويب مكتوب بـ ‎Go‎ يتولى دورة حياة TLS بالكامل — تفاوض ACME، تجديد الشهادات، إعادة توجيه HTTP إلى HTTPS — دون أي سطر إضافي في الإعداد. حيث يحتاج ‎Nginx‎ إلى ‎Certbot‎ وجدولة ‎cron‎ وملف vhost لكل نطاق، يكفي ملف ‎Caddyfile‎ من عشرة أسطر لعرض تطبيقات متعددة على نفس VPS عبر HTTPS. يغطي هذا الدليل التثبيت، والإعداد متعدد التطبيقات، والتصليب، وأبرز الأخطاء الشائعة.",[37,41,51,54,79,82,118,121,125],{"type":38,"title":39,"body":40},"h2","لماذا تختار Caddy كـ reverse proxy على VPS؟","تُفوّض معظم الـ reverse proxies إدارة TLS إلى أداة خارجية — ‎Certbot‎ أو ‎acme.sh‎ أو سكريبت ‎cron‎ مكتوب يدويًا. يدمج ‏Caddy هذه الآلية من الطرف إلى الطرف: حالما يُعلَن عن اسم نطاق في ‎Caddyfile‎، يتواصل مع ‎Let's Encrypt‎، ويحصل على الشهادة، ويجدّدها قبل انتهاء صلاحيتها، دون تدخل يدوي. النتيجة: إعداد يُقرأ في بضعة أسطر ويُنشر بشكل متطابق على جميع VPS دون حالة خارجية للمزامنة.",{"type":42,"title":43,"items":44},"ul","مزايا Caddy في الإنتاج",[45,46,47,48,49,50],"**HTTPS تلقائي**: ‎ACME HTTP-01‎ من ‎Let's Encrypt‎ ينشط فور تعريف اسم النطاق — لا ‎cron‎ ولا إضافات","**صياغة موجزة**: كتلة من خمسة أسطر تحل محل vhost ‎Nginx‎ المكوّن من أربعين سطرًا مع ملف ‎Certbot‎","**إعادة تحميل بلا انقطاع**: `caddy reload` يطبّق `Caddyfile` الجديد دون قطع الاتصالات الجارية","**HTTP\u002F2 و HTTP\u002F3 (QUIC) بشكل افتراضي**: مفعّلان دون أي إعداد إضافي في جميع إصدارات ‎2.x‎","**JSON API**: الإعداد قابل للتعديل مباشرةً عبر واجهة REST API، مفيد للبيئات الديناميكية أو المعتمدة على الحاويات","**صورة Docker رسمية خفيفة**: `caddy:2-alpine` تزن أقل من 20 ميغابايت وتغطي معظم حالات الإنتاج",{"type":38,"title":52,"body":53},"المتطلبات المسبقة","قبل البدء، تحقق من استيفاء VPS للشروط التالية.\n\n**الحد الأدنى من الموارد**: 512 ميغابايت RAM و1 vCPU تكفيان لـ ‏Caddy وحده. خصّص 1 غيغابايت RAM و2 vCPU إذا كنت تستضيف عدة تطبيقات خلفه.\n\n**المنفذان 80 و 443 متاحان**: ‏Caddy يستخدمهما لـ ‎ACME HTTP-01‎ (المنفذ 80) ولحركة HTTPS (المنفذ 443). تحقق من عدم احتلالهما بعملية أخرى:\n```bash\nss -tlnp | grep -E ':80|:443'\n```\n\n**اسم نطاق يشير إلى VPS**: يتحقق ‎Let's Encrypt‎ من ملكية النطاق باستعلام المنفذ 80 على عنوان IP الخاص بك. يجب أن يكون سجل DNS ‎A‎ نشطًا ومُنتشرًا قبل تشغيل ‏Caddy.\n\n**نظام التشغيل**: Debian 11\u002F12 أو Ubuntu 22.04\u002F24.04. الأوامر في هذا الدليل مُختبَرة على هذه التوزيعات.\n\n**Docker (اختياري)**: إذا نشرت ‏Caddy في حاوية، فأنت بحاجة إلى Docker Engine 24‎+‎ وDocker Compose v2.",{"type":55,"title":56,"steps":57},"steps","نشر Caddy كـ reverse proxy",[58,61,64,67,70,73,76],{"title":59,"body":60},"الطريقة 1 — التثبيت عبر مستودع APT الرسمي","يوفر ‏Caddy مستودع APT موقَّعًا. أضفه ثم ثبّت الحزمة:\n```bash\napt install -y debian-keyring debian-archive-keyring apt-transport-https curl\ncurl -1sLf 'https:\u002F\u002Fdl.cloudsmith.io\u002Fpublic\u002Fcaddy\u002Fstable\u002Fgpg.key' \\\n  | gpg --dearmor -o \u002Fusr\u002Fshare\u002Fkeyrings\u002Fcaddy-stable-archive-keyring.gpg\ncurl -1sLf 'https:\u002F\u002Fdl.cloudsmith.io\u002Fpublic\u002Fcaddy\u002Fstable\u002Fdebian.deb.txt' \\\n  | tee \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fcaddy-stable.list\napt update && apt install caddy\n```\nتحقق من الإصدار المثبّت: يجب أن يعرض `caddy version` قيمة ‎`v2.9.x`‎ أو أحدث.",{"title":62,"body":63},"الطريقة 2 — النشر عبر Docker Compose","إذا كانت تطبيقاتك تعمل بالفعل على Docker، فإضافة خدمة ‏Caddy إلى نفس ‎`compose.yml`‎ هي الطريقة الأبسط. أنشئ ملف ‎`compose.yml`‎ في جذر مشروعك:\n```bash\nservices:\n  caddy:\n    image: caddy:2-alpine\n    restart: unless-stopped\n    ports:\n      - \"80:80\"\n      - \"443:443\"\n      - \"443:443\u002Fudp\"\n    volumes:\n      - .\u002FCaddyfile:\u002Fetc\u002Fcaddy\u002FCaddyfile\n      - caddy_data:\u002Fdata\n      - caddy_config:\u002Fconfig\n    networks:\n      - proxy\n\nvolumes:\n  caddy_data:\n  caddy_config:\n\nnetworks:\n  proxy:\n    external: true\n```\nأنشئ الشبكة المشتركة مرة واحدة: `docker network create proxy`. تنضم خدماتك الأخرى إلى هذه الشبكة لتصبح متاحة لـ ‏Caddy.",{"title":65,"body":66},"إنشاء Caddyfile الأساسي","‎`Caddyfile`‎ هو ملف الإعداد المركزي. للتثبيت عبر APT يوجد في ‎`\u002Fetc\u002Fcaddy\u002FCaddyfile`‎. لـ Docker ضعه بجانب ‎`compose.yml`‎.\n\nمثال بسيط لعرض تطبيق على المنفذ 3000:\n```bash\nmyapp.com {\n    reverse_proxy localhost:3000\n}\n```\nهذا كل شيء. يكتشف ‏Caddy أن ‎`myapp.com`‎ اسم نطاق، يتواصل مع ‎Let's Encrypt‎ عبر ‎ACME HTTP-01‎، يحصل على شهادة، ويعيد توجيه كل حركة HTTP إلى HTTPS تلقائيًا. تُخزَّن الشهادات في ‎`~\u002F.local\u002Fshare\u002Fcaddy\u002F`‎ (APT) أو في المجلد المنطقي ‎`caddy_data`‎ (Docker).",{"title":68,"body":69},"إعداد تطبيقات متعددة (multi-vhost)","استضافة عدة تطبيقات على نفس VPS لا تتطلب سوى كتل إضافية في نفس الملف:\n```bash\napp1.yourdomain.com {\n    reverse_proxy localhost:3000\n}\n\napp2.yourdomain.com {\n    reverse_proxy localhost:4000\n}\n\nblog.yourdomain.com {\n    reverse_proxy localhost:8080\n}\n```\nتحصل كل كتلة على شهادة ‎Let's Encrypt‎ خاصة بها. يُدير ‏Caddy التجديدات بشكل مستقل لكل نطاق، بالتوازي، دون انقطاع في الخدمة.",{"title":71,"body":72},"تطبيق Caddyfile دون انقطاع","لـ APT، أعد تحميل الإعداد دون قطع الاتصالات:\n```bash\nsystemctl reload caddy\n# أو إذا عدّلت الملف خارج \u002Fetc\u002Fcaddy\u002F:\ncaddy reload --config \u002Fpath\u002Fto\u002FCaddyfile\n```\nلـ Docker:\n```bash\ndocker compose exec caddy caddy reload --config \u002Fetc\u002Fcaddy\u002FCaddyfile\n```\nتحقق من صحة الصياغة قبل إعادة التحميل: `caddy validate --config \u002Fetc\u002Fcaddy\u002FCaddyfile`.",{"title":74,"body":75},"إضافة رؤوس الأمان وتحديد معدل الطلبات","يدعم ‏Caddy رؤوس الأمان بشكل أصيل عبر التوجيه ‎`header`‎. إليك كتلة مُصلَّبة لتطبيق إنتاجي:\n```bash\nmyapp.com {\n    reverse_proxy localhost:3000\n\n    header {\n        Strict-Transport-Security \"max-age=31536000; includeSubDomains; preload\"\n        X-Content-Type-Options \"nosniff\"\n        X-Frame-Options \"SAMEORIGIN\"\n        Referrer-Policy \"strict-origin-when-cross-origin\"\n        -Server\n    }\n\n    log {\n        output file \u002Fvar\u002Flog\u002Fcaddy\u002Fmyapp.log {\n            roll_size 10mb\n            roll_keep 5\n        }\n    }\n}\n```\nلتحديد معدل الطلبات، يُثبَّت الوحدة ‎`caddy-ratelimit`‎ عبر ‎`xcaddy build`‎ وتُستخدم بالتوجيه ‎`rate_limit`‎. الصورة الرسمية على Docker لا تتضمنها — ابنِ صورتك الخاصة أو استخدم جدار حماية تطبيقي من طبقة أعلى إن كانت الحاجة ماسّة.",{"title":77,"body":78},"تفعيل خدمة systemd والتحقق منها (APT)","بعد التثبيت عبر APT، تُفعَّل الخدمة تلقائيًا. تحقق من حالتها والسجلات:\n```bash\nsystemctl status caddy\njournalctl -u caddy -f\n```\nللتأكد من التشغيل عند إعادة الإقلاع: `systemctl enable caddy` (منجز بالفعل من الحزمة). اختبر نجاح إصدار شهادة ‎Let's Encrypt‎:\n```bash\ncurl -sv https:\u002F\u002Fmyapp.com 2>&1 | grep -E 'subject|issuer|expire'\n```",{"type":38,"title":80,"body":81},"كيف يعمل HTTPS التلقائي في Caddy","ينفّذ ‏Caddy بروتوكول ACME (Automated Certificate Management Environment) بشكل أصيل. حالما تحتوي كتلة ‎`Caddyfile`‎ على اسم نطاق مؤهّل، يُشغّل ‏Caddy تلقائيًا تحدّي **‎ACME HTTP-01‎**: يضع ‎Let's Encrypt‎ رمزًا للتحقق في ‎`http:\u002F\u002Fyourdomain.com\u002F.well-known\u002Facme-challenge\u002F`‎، يستجيب ‏Caddy لهذا الطلب مثبتًا سيطرته على الخادم، فيُصدر ‎Let's Encrypt‎ شهادة صالحة لمدة 90 يومًا.\n\nيجدد ‏Caddy الشهادة مسبقًا (ابتداءً من 30 يومًا قبل انتهائها) ويعيد تحميل الإعداد دون انقطاع. تُخزَّن الشهادات وبيانات ACME محليًا — في ‎`~\u002F.local\u002Fshare\u002Fcaddy\u002F`‎ لتثبيت APT، وفي المجلد المنطقي ‎`caddy_data`‎ لـ Docker. **لا تحذف هذا المجلد**: يخزّن ‏Caddy فيه أيضًا حالة ACME، وكثرة الطلبات إلى ‎Let's Encrypt‎ تُشغّل حدود الاستخدام وقد تحجب إصدار شهادات جديدة لساعات.\n\nلـ **شهادات wildcard** (‎`*.yourdomain.com`‎)، لا يعمل ‎ACME HTTP-01‎: يستلزم الأمر تحدّي **‎DNS-01‎** الذي يحتاج إلى وصول API مزود DNS الخاص بك. يدعم ‏Caddy عدة مزودين بشكل أصيل عبر وحدات (‎`caddy-dns\u002Fcloudflare`‎، ‎`caddy-dns\u002Fovh`‎…) تُجمَّع مع ‎`xcaddy`‎.",{"type":83,"title":84,"headers":85,"rows":89},"comparison","‏Caddy مقابل Nginx: متى تختار أيًا منهما",[86,87,88],"المعيار","Caddy","Nginx",[90,94,98,102,106,110,114],[91,92,93],"إعداد TLS","تلقائي، لا إعداد يدوي","يدوي (Certbot أو acme.sh مطلوب)",[95,96,97],"منحنى التعلم","منخفض — صياغة مقروءة وتوجيهات محدودة","معتدل — صياغة مطوّلة وسياقات متعددة",[99,100,101],"الأداء الخام (طلبات\u002Fثانية)","ممتاز لمعظم الأحمال","أعلى قليلًا تحت الأحمال الثقيلة جدًا",[103,104,105],"الوحدات والنظام البيئي","متنامٍ، xcaddy لتجميع الوحدات","ضخم جدًا، وحدات طرف ثالث ناضجة وكثيرة",[107,108,109],"إعادة التحميل دون انقطاع","أصيل (`caddy reload`)","أصيل (`nginx -s reload`)، مشابه",[111,112,113],"حالة الاستخدام المثالية","VPS شخصي، مشاريع الفرق، microservices على Docker","منصات كبيرة، CDN أمامي، حالات متقدمة (GeoIP، Lua…)",[115,116,117],"دعم HTTP\u002F3 (QUIC)","مُفعَّل افتراضيًا منذ Caddy 2.6","تجريبي، يستلزم تجميعًا مع quiche أو ngx_http_v3",{"type":38,"title":119,"body":120},"حل المشكلات: الأخطاء الشائعة","**المنفذ 80 مشغول.** يحتاج ‏Caddy إلى المنفذ 80 لـ ‎ACME HTTP-01‎. إذا كان Apache أو Nginx يعمل بالفعل، أوقفه قبل تشغيل ‏Caddy: `systemctl stop apache2` أو `systemctl stop nginx`. تحقق بعدها: `ss -tlnp | grep :80`.\n\n**فشل ACME \u002F لم تُصدر الشهادة.** ‎Let's Encrypt‎ لا يستطيع الوصول إلى خادمك. تحقق: (1) سجل DNS ‎A‎ يشير إلى IP الـ VPS — يجب أن يُرجع `dig +short your-domain.com` عنوان IP الصحيح؛ (2) المنفذ 80 متاح من الخارج — جدران الحماية في VPS (iptables، ufw) تحجب هذا المنفذ أحيانًا. راجع سجلات ‏Caddy بـ `journalctl -u caddy` لقراءة رسالة خطأ ACME الدقيقة.\n\n**`permission denied` على المنفذين 80\u002F443.** المنافذ أقل من 1024 محجوزة في Linux. لتثبيت APT، تُعدّ الحزمة الإمكانية ‎`CAP_NET_BIND_SERVICE`‎ تلقائيًا. إذا جمّعت ‏Caddy يدويًا، طبّقها: `setcap cap_net_bind_service=+ep $(which caddy)`.\n\n**DNS غير محلول \u002F ‎`no such host`‎.** يحلّ ‏Caddy أسماء الـ backends المعلَنة في ‎`reverse_proxy`‎. إذا كان تطبيقك يُسمّى ‎`app`‎ في Docker Compose، تأكد من أن ‏Caddy والتطبيق يشتركان في نفس شبكة Docker. تحقق بـ: `docker compose exec caddy nslookup app`.\n\n**حذف المجلد المنطقي ‎`caddy_data`‎ عن طريق الخطأ.** يجب على ‏Caddy إعادة التفاوض على جميع الشهادات من الصفر. يفرض ‎Let's Encrypt‎ حدًا قدره 5 شهادات لكل نطاق خلال 7 أيام. إذا بلغت هذا الحد، استخدم بيئة التدريج ACME (‎`acme_ca https:\u002F\u002Facme-staging-v02.api.letsencrypt.org\u002Fdirectory`‎ في ‎`Caddyfile`‎) للاختبار، ثم عُد إلى الإنتاج بعد انتهاء النافزة الزمنية.",{"type":122,"title":123,"body":124},"tip","لاستضافة تطبيقات متعددة على نفس VPS","أنشئ شبكة Docker مشتركة (`docker network create proxy`) وصل كل خدمة بهذه الشبكة. يُشير ‎`Caddyfile`‎ حينئذٍ إلى الخدمات باسم الحاوية بدلًا من ‎`localhost:PORT`‎ — الإعداد لا يتغير عند إضافة تطبيقات أو حذفها. مثال: ‎`reverse_proxy my-service:3000`‎ بدلًا من ‎`reverse_proxy localhost:3000`‎.",{"type":122,"title":126,"body":127},"التوثيق الرسمي","المرجع الكامل للتوجيهات والوحدات وJSON API متاح على ‎`\u003Ca href=\"https:\u002F\u002Fcaddyserver.com\u002Fdocs\u002F\">caddyserver.com\u002Fdocs\u003C\u002Fa>`‎. منتدى المجتمع (‎`\u003Ca href=\"https:\u002F\u002Fcaddy.community\">caddy.community\u003C\u002Fa>`‎) هو أفضل مورد للأسئلة المتقدمة — يرد عليه المطوّرون الأساسيون مباشرةً.","VPS جاهز لـ Caddy","انشر ‏Caddy على VPS من ServOrbit واستفد من بيئة Debian 12، المنفذين 80 و443 مفتوحَين، والوصول الفوري عبر SSH.","عرض خطط VPS","\u002Fvps-cloud",[133,149,169],{"id":134,"slug":135,"slugs":136,"title":140,"excerpt":141,"readTime":142,"views":23,"isPinned":19,"noindex":19,"publishedAt":143,"updatedAt":144,"category":145,"categories":146,"featuredImage":29,"bgImage":30,"posterImage":148,"relatedSolution":29},38,"انشر-تطبيقاتك-باستخدام-traefik-على-خادم-vps",{"fr":137,"en":138,"ar":135,"es":139},"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},[147],{"id":23,"name":24,"slug":25,"color":26,"icon":25},"\u002Fblog\u002Fcovers\u002Fdeployer-avec-traefik-poster.svg",{"id":150,"slug":151,"slugs":152,"title":156,"excerpt":157,"readTime":17,"views":158,"isPinned":19,"noindex":19,"publishedAt":159,"updatedAt":160,"category":161,"categories":166,"featuredImage":29,"bgImage":30,"posterImage":168,"relatedSolution":29},116,"شهادات-ssl-مجانية-باستخدام-lets-encrypt-على-خادم-vps",{"fr":153,"en":154,"ar":151,"es":155},"certificats-ssl-lets-encrypt-vps","free-ssl-certificates-with-lets-encrypt-on-a-vps","certificados-ssl-gratis-con-lets-encrypt-en-un-vps","شهادات SSL مجانية باستخدام Let's Encrypt على خادم VPS","دليل شامل لـ Let's Encrypt على VPS: certbot nginx، wildcard عبر DNS-01، تجديد systemd، تصليب TLS، استكشاف أخطاء rate-limits ومقارنة certbot مقابل acme.sh مقابل Caddy.",0,"2026-02-24T00:00:00+00:00","2026-09-30T11:20:34+00:00",{"id":17,"name":162,"slug":163,"color":164,"icon":165},"الأمان والمراقبة","securite-monitoring","bg-rose-500\u002F10 text-rose-400","security",[167],{"id":17,"name":162,"slug":163,"color":164,"icon":165},"\u002Fblog\u002Fcovers\u002Fcertificats-ssl-lets-encrypt-vps-poster.svg",{"id":170,"slug":171,"slugs":172,"title":176,"excerpt":177,"readTime":178,"views":179,"isPinned":19,"noindex":19,"publishedAt":180,"updatedAt":181,"category":182,"categories":183,"featuredImage":29,"bgImage":30,"posterImage":185,"relatedSolution":29},229,"docker-compose-في-الإنتاج-قائمة-التحقق-من-10-نقاط",{"fr":173,"en":174,"ar":171,"es":175},"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,"2026-08-06T00:00:00+00:00","2026-10-23T13:27:09+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":25},[184],{"id":23,"name":24,"slug":25,"color":26,"icon":25},"\u002Fblog\u002Fcovers\u002Fdocker-compose-production-checklist-poster.svg",true,1794270257168]