لماذا تضع Traefik في واجهة خادم VPS الخاص بك؟
عندما تشغّل عدة تطبيقات محوّلة إلى حاويات على خادم VPS نفسه، تصبح إدارة المضيفات الافتراضية (virtual hosts) في Nginx يدويًا وتجديد كل شهادة أمرًا غير قابل للإدارة بسرعة. يحل Traefik هذه المشكلة بقراءة علامات حاويات Docker الخاصة بك مباشرةً: تعلن عن مسار عند تنفيذ docker run أو في ملف docker-compose.yml، فيهيّئه Traefik أثناء التشغيل، ويولّد شهادة Let's Encrypt، ويعرضه عبر HTTPS. لا ملف تهيئة لتحريره، ولا إعادة تحميل: كل شيء ديناميكي.
ما يقدّمه Traefik عمليًا على خادم VPS
- اكتشاف تلقائي لحاويات Docker عبر مزوّد Docker (تظهر المسارات دون إعادة تشغيل)
- شهادات SSL من Let's Encrypt تُولَّد وتُجدَّد تلقائيًا (HTTP-01 أو DNS-01)
- توجيه حسب النطاق وحسب المسار، يُدار بالكامل عبر علامات Docker
- لوحة تحكم ويب مدمجة لعرض الموجّهات (routers) والخدمات والبرمجيات الوسيطة (middlewares) في الوقت الحقيقي
- برمجيات وسيطة جاهزة للاستخدام: إعادة توجيه HTTPS، والمصادقة الأساسية (basic auth)، وتحديد معدل الطلبات (rate limiting)، وترويسات الأمان
- موازنة أحمال تلقائية عند توسيع خدمة إلى عدة نسخ (replicas)
المتطلبات
Traefik نفسه خفيف جدًا: معالج vCPU واحد و1 غيغابايت من RAM يكفيان بوفرة للوكيل وحده، والتكلفة الإضافية تأتي من تطبيقاتك خلفه. جهّز خادم VPS مع Docker Engine وإضافة Docker Compose v2 مثبَّتة، واسم نطاق تشير سجلّاته A/AAAA إلى عنوان IP الخاص بخادم VPS، والمنفذان 80 و443 مفتوحان في جدار الحماية (UFW). للحصول على شهادات wildcard، ستحتاج أيضًا إلى وصول API إلى مزوّد DNS الخاص بك.
انشر Traefik باستخدام Docker Compose
أنشئ الشبكة والبنية الشجرية
أنشئ شبكة Docker مشتركة سيستخدمها Traefik وتطبيقاتك: docker network create proxy. أنشئ مجلدًا traefik/ يحتوي على ملف acme.json (تخزين الشهادات) بالصلاحيات الصحيحة: touch acme.json && chmod 600 acme.json. دون هذه الصلاحيات المقيَّدة، سيرفض Traefik استخدامه.
هيّئ نقاط الدخول (entrypoints) ومحلّل ACME
في ملف docker-compose.yml، أعلن نقطتَي دخول (web على :80، وwebsecure على :443) وcertificateResolver من Let's Encrypt مع بريدك الإلكتروني وتحدي httpChallenge. اربط مقبس Docker للقراءة فقط (/var/run/docker.sock:/var/run/docker.sock:ro) حتى يكتشف Traefik الحاويات، والحجم acme.json.
افرض إعادة التوجيه من HTTP إلى HTTPS
أضِف برمجية وسيطة عامة لإعادة التوجيه على نقطة الدخول web عبر العلامات: traefik.http.routers.http-catchall.middlewares=redirect-to-https. بهذه الطريقة، تُبدَّل تلقائيًا كل حركة المرور غير المشفّرة إلى HTTPS، وهو السلوك المتوقع في الإنتاج.
أمّن لوحة التحكم
اعرض لوحة التحكم على نطاق فرعي (traefik.yourdomain.com) محميًا ببرمجية وسيطة basicauth. ولّد التجزئة (hash) بـ htpasswd -nb admin motdepasse وضعها في العلامة traefik.http.middlewares.auth.basicauth.users. لا تترك أبدًا الراية --api.insecure=true في الإنتاج.
شغّل Traefik
ابدأ المكدّس: docker compose up -d. تحقق من السجلّات بـ docker compose logs -f traefik لتأكيد الاتصال بـ Let's Encrypt وغياب أخطاء ACME (انتبه إلى حد المعدل (rate limit) في Let's Encrypt أثناء مرحلة الاختبارات، واستخدم خادم staging).
اربط تطبيقًا
لعرض خدمة، اربطها بشبكة proxy وأضِف علاماتها: traefik.enable=true، وtraefik.http.routers.app.rule=Host(\app.yourdomain.com\)، وtraefik.http.routers.app.entrypoints=websecure، وtraefik.http.routers.app.tls.certresolver=letsencrypt. يوجّه Traefik التطبيق ويصدر له شهادة في ثوانٍ.
للحصول على شهادة wildcard (*.yourdomain.com) وتجنّب عرض كل نطاق فرعي، انتقل من httpChallenge إلى dnsChallenge. هيّئ مزوّد DNS (Cloudflare أو OVH، إلخ) عبر متغيرات البيئة (مثل CF_API_EMAIL وCF_DNS_API_TOKEN): يُثبت Traefik ملكية النطاق عبر سجل TXT، وهو ما يعمل حتى للخدمات غير المعروضة علنًا.