مقارنات10 دقيقة قراءة

‏Caddy أم Traefik أم Nginx Proxy Manager: أيهما تختار؟

تستضيف عدة تطبيقات ‏Docker على خادم ‏VPS وتحتاج إلى عرض كل منها عبر ‏HTTPS باسم نطاق مستقل. البروكسي العكسي هو القطعة المحورية في هذه البنية: يستقبل كل حركة المرور الواردة على المنفذين 80 و443، ويدير شهادات ‏TLS ويوجّه الطلبات إلى الحاوية المناسبة. ‏Caddy و‏Traefik و‏Nginx Proxy Manager هي الحلول الثلاثة الأكثر شعبية — هذا الدليل يساعدك على اختيار ما يناسب ملفك الشخصي.

لماذا البروكسي العكسي ضروري مع ‏Docker

بشكل افتراضي، تستمع كل حاوية ‏Docker على منفذ عشوائي: ‏Nextcloud على المنفذ 8080، و‏Gitea على المنفذ 3000، و‏Vaultwarden على المنفذ 8200. لا يمكنك عرض عشرة منافذ مباشرةً في بيئة الإنتاج. يحل البروكسي العكسي هذه المشاكل الثلاث دفعةً واحدة: يصبح نقطة الدخول العامة الوحيدة، ويوجّه حركة المرور بناءً على اسم المضيف، ويتولى إنهاء ‏TLS. النتيجة: ‏app1.your-domain.com و‏app2.your-domain.com تشيران كلتاهما إلى المنفذ 443 لخادمك، والبروكسي يعرف إلى أي حاوية يُعيد توجيه كل طلب.

ما يمنحك إياه البروكسي العكسي عملياً

  • إنهاء ‏TLS مركزي — أداة واحدة تحصل على شهادات ‏Let's Encrypt وتجدّدها لجميع نطاقاتك تلقائياً دون أي خطوات يدوية
  • توجيه حسب اسم المضيف — ‏git.your-domain.com يذهب إلى ‏Gitea، و‏cloud.your-domain.com يذهب إلى ‏Nextcloud دون أي تعارض في المنافذ
  • جدار حماية مُبسَّط — المنفذان 80 و443 فقط مفتوحان للعموم، وجميع منافذ ‏Docker الداخلية تبقى غير متاحة من الخارج
  • إعادة توجيه ‏HTTP إلى ‏HTTPS تلقائياً — يُعاد توجيه كل حركة المرور غير المشفرة بـ 301 دون إعداد يدوي داخل كل تطبيق
  • مراقبة مركزية — سجلات الوصول والأخطاء لجميع تطبيقاتك مجمّعة في مكان واحد لتسهيل تشخيص المشكلات

المتطلبات المشتركة للحلول الثلاثة

قبل اختيار أحد هذه البروكسيات الثلاثة وتثبيته، تأكد من أن خادم ‏VPS الخاص بك يستوفي بعض المتطلبات الأساسية. يجب تثبيت ‏Docker و‏Docker Compose. يجب أن تشير سجلات ‏DNS الخاصة بك إلى ‏IP العامة لخادمك قبل طلب الشهادة. يجب أن تكون المنفذان 80 و443 خاليَين: تحقق بـ ‏ss -tlnp | grep -E ':80|:443'. أخيراً، أنشئ شبكة ‏Docker مخصصة للبروكسي — ‏docker network create proxy.

جدول المقارنة: ‏Caddy مقابل ‏Traefik مقابل ‏Nginx Proxy Manager

المعيار‏Caddy‏Traefik‏Nginx Proxy Manager
سهولة الإعداد⭐⭐⭐⭐⭐ بسيط جداً⭐⭐⭐ متوسط⭐⭐⭐⭐⭐ بسيط جداً
‎TLS تلقائي (Let's Encrypt)✅ أصيل، بدون إعداد✅ عبر ‎ACME✅ عبر الواجهة الرسومية
تكامل ‎Dockerيدوي (وسوم أو إعداد)✅ وسوم أصيلة✅ عبر ‎GUI
طريقة الإعدادملف ‎Caddyfile مقروءوسوم ‎Docker + ‎YAMLواجهة رسومية
إعادة التحميل بدون انقطاع✅ تلقائي✅ تلقائي✅ تلقائي
لوحة تحكم/واجهة ويب❌ لا✅ لوحة تحكم مدمجة✅ واجهة كاملة
استهلاك الذاكرة~30 ميغابايت~50 ميغابايت~100 ميغابايت (MariaDB مشمولة)
الأنسب لـمشاريع فردية/فرق صغيرةالخدمات المصغرة، ‎CI/CDالمبتدئون، الفرق المختلطة

‏Caddy: الخيار الافتراضي لمعظم الحالات

رسّخ ‏Caddy نفسه بوصفه الخيار الأبسط للمطورين الذين يستضيفون بين اثنين وعشرة تطبيقات على خادم ‏VPS. فلسفته جذرية: ‏TLS مفعَّل بشكل افتراضي لأي نطاق صالح، دون أي خيار لتفعيله. ملف الإعداد ‏Caddyfile مصمم ليكون مقروءاً، قريباً من اللغة الطبيعية. ‏Caddy مكتوب بـ ‏Go ويضم عميل ‏ACME الخاص به: يتصل بـ ‏Let's Encrypt مباشرةً ويخزّن الشهادات في دليل بياناته ويجدّدها تلقائياً قبل انتهاء صلاحيتها. استهلاك الذاكرة يبقى حوالي 30 ميغابايت في وضع الراحة.

نشر ‏Caddy كبروكسي عكسي لـ ‏Docker

01

إنشاء شبكة ‏Docker المشتركة

أولاً، أنشئ الشبكة التي ستشترك فيها ‏Caddy وتطبيقاتك: ‏docker network create proxy. تتيح هذه الشبكة المعزولة لـ ‏Caddy الوصول إلى حاوياتك بالاسم دون كشف منافذها على المضيف.

02

كتابة ملف ‏Caddyfile

أنشئ ملف ‏Caddyfile في جذر مشروعك. لعرض تطبيق على ‏app.your-domain.com إلى حاوية باسم ‏myapp تستمع على المنفذ 3000: ‏app.your-domain.com { reverse_proxy myapp:3000 }. يحصل ‏Caddy على الشهادة تلقائياً عند أول تشغيل.

03

كتابة ملف ‏docker-compose.yml لـ ‏Caddy

أنشئ ‏docker-compose.yml مع خدمة ‏Caddy: ارفع ‏Caddyfile للقراءة فقط، احفظ بيانات ‏TLS في حجم مسمى، انشر المنفذين 80 و443، وأضف ‏Caddy إلى شبكة ‏proxy المُعلَنة خارجية.

04

ربط تطبيقاتك بشبكة البروكسي

في ملف ‏docker-compose.yml لكل تطبيق، أضف شبكة ‏proxy كشبكة خارجية وتوقف عن كشف المنافذ على المضيف (استخدم ‏expose بدلاً من ‏ports).

05

التشغيل والتحقق

شغّل ‏Caddy بـ ‏docker compose up -d، ثم تابع السجلات بـ ‏docker compose logs -f caddy. يجب أن ترى ‏certificate obtained successfully لكل نطاق. اختبر بـ ‏curl -I https://app.your-domain.com.

06

إضافة تطبيق جديد

لكل تطبيق جديد، أضف كتلة في ‏Caddyfile، أعد تحميل ‏Caddy بدون انقطاع بـ ‏docker exec caddy caddy reload --config /etc/caddy/Caddyfile، وأضف الحاوية الجديدة إلى شبكة ‏proxy.

‏Traefik: متى تختار الاكتشاف التلقائي للخدمات

يتألق ‏Traefik في السياقات التي يتغير فيها عدد الخدمات بشكل متكرر: بيئات ‏CI/CD التي تنشئ الحاويات وتدمرها مع كل نشر، ومعماريات الخدمات المصغرة. آلية الاكتشاف التلقائي عبر تسميات ‏Docker هي ميزته الرئيسية: عند تشغيل حاوية بالتسميات الصحيحة، يكتشفها ‏Traefik فوراً ويُنشئ المسار ويطلب شهادة ‏TLS دون الحاجة للمساس بإعداد ‏Traefik نفسه.

نشر ‏Traefik مع اكتشاف ‏Docker التلقائي

01

إنشاء ملف الإعداد الثابت

أنشئ ‏traefik.yml بنقاط الدخول، فعّل موفر ‏Docker، اضبط محلل ‏ACME بعنوان بريدك لـ ‏Let's Encrypt، وفعّل لوحة التحكم في الوضع الآمن.

02

تشغيل ‏Traefik مع ‏Docker Compose

في ‏docker-compose.yml لـ ‏Traefik، ارفع مقبس ‏Docker للقراءة فقط (‏/var/run/docker.sock:/var/run/docker.sock:ro)، ارفع ‏traefik.yml، احفظ الشهادات في حجم، وانشر المنفذين 80 و443.

03

إضافة التسميات إلى حاوياتك

على كل خدمة تريد عرضها، أضف تسميات ‏Traefik: ‏traefik.enable=true، قاعدة الموجّه، نقطة الدخول، محلل ‏TLS، ومنفذ الخدمة الداخلي.

04

التحقق من لوحة التحكم

ادخل إلى لوحة تحكم ‏Traefik وتحقق من أن موجّهك يظهر باللون الأخضر بحالة ‏Enabled. إن كان الموجّه غائباً، تحقق من وجود التسمية ‏traefik.enable=true.

أمان حرج: لا ترفع مقبس ‏Docker (‏/var/run/docker.sock) بدون قيود في بيئة متعددة المستخدمين — أي شخص يمكنه الكتابة في هذا المقبس يمكنه السيطرة الكاملة على المضيف. في الإنتاج، فضّل ‏Traefik مع المقبس للقراءة فقط (‏ro) أو استخدم بروكسي مقبس مثل ‏docker-socket-proxy.

‏Nginx Proxy Manager: الخيار بدون ملفات إعداد

‏Nginx Proxy Manager (‏NPM) هو الخيار الواضح لمن يشعر بعدم الارتياح تجاه ملفات الإعداد في سطر الأوامر. تتيح واجهته الرسومية إنشاء مضيف بروكسي بنقرات قليلة. في المقابل، يضم ‏NPM قاعدة بيانات ‏MariaDB لتخزين إعداداته، مما يرفع استهلاك الذاكرة إلى حوالي 100 ميغابايت — ما يقارب ثلاثة أضعاف ‏Caddy.

استكشاف الأخطاء: الأخطاء الأكثر شيوعاً

الغالبية العظمى من المشكلات تندرج في أربع فئات. أولاً، حدود معدل ‏Let's Encrypt: استخدم بيئة التدريج للاختبار ثم انتقل للإنتاج. ثانياً، تعارض المنافذ: حدّد العملية بـ ‏ss -tlnp | grep :80 وأوقفها. ثالثاً، أخطاء شبكة ‏Docker: تحقق بـ ‏docker network inspect proxy. رابعاً، لـ ‏Traefik: فعّل سجلات ‏DEBUG بـ ‏--log.level=DEBUG.

ملخص: أي بروكسي لأي ملف شخصي

  • مطور فردي، 2 إلى 5 تطبيقات — ‏Caddy: إعداد بسيط، ‏TLS تلقائي، جاهز في أقل من عشر دقائق
  • فريق ‏DevOps، خدمات مصغرة، ‏CI/CD — ‏Traefik: اكتشاف تلقائي عبر التسميات، لوحة مراقبة
  • مستخدم غير تقني أو فريق مختلط — ‏Nginx Proxy Manager: واجهة رسومية بديهية، لا ملفات للتحرير
  • ‏VPS ذو ذاكرة محدودة — ‏Caddy أو ‏Traefik: تجنب ‏NPM الذي يضم ‏MariaDB
  • انتقال تدريجي من ‏Nginx — ‏Caddy: يمكن تعلم صيغته في ساعة

الخلاصة: ابدأ بـ ‏Caddy وطوّر عند الحاجة

لغالبية العظمى من المضيفين الذاتيين الذين يديرون تطبيقات ‏Docker على خادم ‏VPS، يعد ‏Caddy أفضل نقطة انطلاق: بسيط وخفيف ويتحكم في ‏TLS بشكل أفضل من أي بديل دون إعداد إضافي. إذا نمت بنيتك التحتية إلى أكثر من خمس خدمات مع نشر متكرر وآلي، يصبح ‏Traefik أكثر ملاءمة.

خادمك الافتراضي جاهز لـ ‏Docker في أقل من 5 دقائق

تُسلَّم خوادم ‏ServOrbit الافتراضية مع ‏Docker مثبتاً مسبقاً، و‏IP عامة مخصصة، وشبكة بسرعة 1 جيجابت.

بحاجة إلى مساعدة؟

تصفّح مركز المساعدة والأسئلة الشائعة، أو تواصل مع فريقنا — معاودة اتصال أو WhatsApp أو بريد إلكتروني. الدعم بـ العربية والفرنسية والإنجليزية.