- يعمل Traefik كوكيل عكسي ديناميكي ويقوم بحل شهادات TLS، بينما يوفر Portainer واجهة رسومية لإدارة Docker و Swarm.
- يتيح لك الجمع بين traefik.yml و dynamic.yml و docker-compose.yml تحديد نقاط الدخول، وبرامج الوسيطة الأمنية، وتوجيه HTTP/HTTPS المستند إلى التصنيفات.
- في سيناريوهات Docker المستقلة أو Swarm، ما عليك سوى ربط الخدمات بشبكة الوكيل ووضع علامات عليها حتى يتمكن Traefik من اكتشافها وعرضها بشكل آمن.
- إن استخدام Let's Encrypt والشبكات المخصصة والمصادقة الأساسية على لوحة التحكم يعزز بيئة قوية لنشر تطبيقات متعددة على خادم واحد.
يُعدّ إعداد بنية تقنية حديثة باستخدام Docker وTraefik وPortainer حاليًا من أسهل الطرق لإدارة الحاويات على خادم واحد وعرض خدمات متعددة عبر HTTPS دون الحاجة إلى إعدادات معقدة. تكمن روعة هذه البنية في أن Traefik يعمل كوكيل عكسي ديناميكي، بينما يوفر Portainer واجهة ويب بسيطة لإدارة Docker، وSwarm أيضًا إذا رغبت.
في هذه المقالة سوف ترى كيف تركيب ترايفيك كوكيل عكسي أمام بورتينر في كل من سيناريو Docker "الكلاسيكي" (المستقل) ومجموعة Docker Swarm، كيفية دمج TLS (الموقع ذاتيًا أو Let's Encrypt)، وما هي ملفات التكوين المعنية (traefik.yml, dynamic.yml y docker-compose.yml) وبعض الحيل الشائعة مع البرامج الوسيطة والشبكات ومشاكل الوسم النموذجية في Traefik.
ما هي أدوار Docker و Traefik و Portainer في البنية؟
في هذا النوع من الإعداد، يعتبر Docker الطبقة الأساسية التي تعمل عليها الحاويات، ويعمل Traefik كوكيل عكسي وموازن تحميل يستقبل جميع طلبات HTTP/HTTPS على المنافذ 80 و443 ويرسلها إلى الحاوية المناسبة، ويوفر Portainer واجهة رسومية لإدارة الصور والحاويات ووحدات التخزين والشبكات ومجموعات Docker أو Swarm.
الفكرة هي وجود مضيف واحد مع Docker حيث يقع ترايفيك عند "البوابة".استمع عند نقاط الدخول web (80) Y websecure (443)، يقوم بحل شهادات TLS (عادةً باستخدام Let's Encrypt) وبفضل التكامل مع موفر Docker، يكتشف تلقائيًا الخدمات التي تعرضها عن طريق إضافة تسميات إلى الحاويات.
من ناحية أخرى، يعمل Portainer كأي حاوية أخرى، ولكنه مكشوف من خلال نطاق فرعي محدد، على سبيل المثال portainer.tudominio.comمحمية بواسطة بروتوكول TLS، ويمكن، إذا رغبتم، استخدام وسيط مصادقة إضافي يتجاوز تسجيل دخول Portainer نفسه. يتم تنسيق كل هذا بواسطة عامل ميناء-يؤلف وهذا ما يحدد Traefik و Portainer والشبكة المشتركة من النوع proxy.
تتمثل إحدى المزايا الواضحة لهذا النهج في أنه يمكنك نشر خدمات جديدة ببساطة عن طريق إضافة علامات إلى حاوياتك: يكتشف Traefik التغيير في Docker، وينشئ أجهزة التوجيه والخدمات والبرامج الوسيطة على الفور، وفي غضون ثوانٍ يكون لديك نطاق فرعي أو مسار جديد قيد التشغيل دون الحاجة إلى لمس ملفات التكوين الثابتة يدويًا.
ملف التكوين الثابت لـ Traefik: traefik.yml
عادةً ما يتم تخزين التكوين الثابت لـ Traefik في ملف مثل traefik.ymlوهو مثبت داخل الحاوية. هنا يتم تعريفه لوحة التحكم، ونقاط الدخول، وموفرو الخدمات، ومحلل الشهادات من بين أمور أخرى، شركة Let's Encrypt.
يبدأ تكوين YAML النموذجي بتفعيل واجهة برمجة التطبيقات ولوحة التحكم باستخدام شيء مثل api: dashboard: trueيُتيح هذا الوصول إلى واجهة الويب حيث يمكنك عرض أجهزة التوجيه والخدمات والبرمجيات الوسيطة. هذه اللوحة غير مُفعّلة للمصادقة افتراضيًا، لذا سنرى لاحقًا كيفية تأمينها باستخدام المصادقة الأساسية من خلال الإعدادات الديناميكية.
بعد ذلك، يتم تحديد نقاط الدخول. عادةً، هناك نقطة دخول web في المنفذ 80 وغيرها من websecure في 443. في web عادةً ما يتم تكوين إعادة التوجيه التلقائي لـ websecureبحيث يتم إعادة توجيه أي وصول عبر بروتوكول HTTP إلى بروتوكول HTTPS:
يتضمن المخطط النموذجي قسمًا http.redirections.entryPoint.to: websecure لفرض إعادة التوجيه هذه وتركيز جميع حركة المرور المشفرة عند نقطة الدخول الآمنة.
إلى websecure يُشار إلى ضرورة استخدام بروتوكول TLS، ويتم توفير رابط لذلك. محلل الشهادات (على سبيل المثال letsencrypt(الذي سيكون مسؤولاً عن إدارة الشهادات تلقائيًا). كل هذا مدعوم من قبل ACMEوهو البروتوكول الذي تستخدمه شركة Let's Encrypt لإصدار وتجديد الشهادات.
في الكتلة مقدمي تم تكوين موفر Docker، ويشير إلى المقبس unix:///var/run/docker.sockمع خيار رئيسي واحد: exposedByDefault: falseوبهذا، لا ينشر Traefik جميع الحاويات افتراضيًا؛ بل ينشر فقط تلك التي تحمل الوسم traefik.enable=trueيمكنك أيضًا تهيئة موفر الملفات (file) لتحميل تكوين ديناميكي إضافي من، على سبيل المثال، /configurations/dynamic.yml.
وأخيرًا، يتضمن الملف الثابت عادةً القسم certificatesResolversحيث يتم تعريف مُحلِّل ACME: البريد الإلكتروني للتسجيل، ملف التخزين (عادةً acme.json), نوع المفتاح (على سبيل المثال EC384) وطريقة التحقق (على سبيل المثال httpChallenge عند نقطة الدخول webمن المهم أن أنشئ بريدًا إلكترونيًا حقيقيًا في هذا القسم لأن Let's Encrypt يستخدمه للإشعارات والتجديدات؛ إذا تركت قيمة وهمية أو غير صحيحة فقد تواجه أخطاء عند بدء تشغيل حاوية Traefik.
بالإضافة إلى تكوين YAML هذا، هناك عمليات نشر تستخدم تنسيق TOML (traefik.toml)لكن المنطق واحد: فهم يقسمون شهادات محلل البيانات (على سبيل المثال) [certificatesResolvers.main.acme])، تحديد التحديات (مثل dnsChallenge مع provider = "route53") وإضافة خيارات TLS الافتراضية، مثل forzar minVersion = "VersionTLS13" أو قم بتكوين قائمة من cipherSuites مسموح.
التكوين الديناميكي: البرمجيات الوسيطة، وTLS، والأمان
عادةً ما يتم وضع الجزء الديناميكي من Traefik في ملف مثل dynamic.ymlيتم تحميلها بواسطة موفر الملفات. هنا تقوم بتحديدها البرامج الوسيطة وخيارات TLS والتي يمكن تعديلها دون إعادة تشغيل حاوية Traefik، وهو أمر مفيد للغاية لضبط الأمان أثناء التنقل.
ومن الأمثلة الشائعة على ذلك إنشاء برامج وسيطة للرأس، على سبيل المثال secureHeadersوهذا يضيف سياسات متعلقة ببروتوكول HSTS والاستخدام الإلزامي لبروتوكول HTTPS. قد تجد في ملف YAML معلمات مثل sslRedirect: true, forceSTSHeader: true, stsIncludeSubdomains: true, stsPreload: true وعلى stsSeconds عالية (على سبيل المثال، سنة بالثواني). هذا يعزز أمان حركة البيانات من جانب المتصفح.
ومن البرامج الوسيطة الشائعة الأخرى برنامج المصادقة الأساسية، على سبيل المثال user-auth نوع basicAuthحيث يتم الإعلان عن قائمة المستخدمين بالتنسيق التالي: usuario:hashيتم عادةً إنشاء التجزئة باستخدام htpasswd وهي مضمنة في الملف. عادةً ما ترتبط هذه البرمجية الوسيطة بموجه لوحة تحكم Traefik، لذا فهي تتطلب، بالإضافة إلى الوصول عبر HTTPS، اسم مستخدم وكلمة مرور.
ضمن نفس التكوين الديناميكي، من الشائع رؤية كتلة tls.options مع ملف تعريف افتراضي (default) حيث يتم تحديد التشفيرات المدعومة والحد الأدنى لإصدار TLS، على سبيل المثال VersionTLS12في بعض عمليات النشر، يتم تحديد عدة خيارات (على سبيل المثال، ملف تعريف يسمى tls12 وغيرها من default) لتكييف مستوى الأمان مع الخدمات المختلفة إذا لزم الأمر.
في البيئات التي يُرغب في استخدامها بروتوكول TLS داخليًا أيضًا بين Traefik وخدمات الواجهة الخلفية (مثل Portainer)، قد تنشأ مشكلة عندما لا تمتلك هذه الخدمات شهادة معترف بها من قبل جهة إصدار شهادات عامة. وهنا يأتي دور الخيار. insecureSkipVerify، والتي تم تكوينها تحت providers.http.tls أو في خيارات TLS المناسبة، يسمح ذلك لـ Traefik بتجاوز التحقق من صحة الشهادة الخلفية. يُعد هذا مفيدًا لبيئات المختبرات أو الشهادات الداخلية الموقعة ذاتيًا، ولكن يجب استخدامه بحذر لأنه يُخفف من إجراءات التحقق.
تفصيل عملي: الملف dynamic.yml يمكن تعديله أثناء التشغيل.يقوم Traefik بإعادة تحميل التكوين الديناميكي دون الحاجة إلى إعادة التشغيل، لذا يمكنك إضافة أو إزالة البرامج الوسيطة، أو تغيير رؤوس الأمان، أو تعديل المصادقة الأساسية دون التأثير على توفر الوكيل.
docker-compose مع Traefik و Portainer في Docker standalone
في سيناريو Docker الأساسي، بدون Swarm، فإن أكثر ما يتم فعله هو التشغيل ترايفيك وبورتينر مع واحد docker-compose.yml والذي يحدد كلاً من الخدمات وشبكة مشتركة من نوع الجسر تسمى، على سبيل المثال، proxy.
الخدمة ترافيك وهي تستخدم عادةً الصورة الرسمية، على سبيل المثال traefik:latest أو إصدار محدد مثل traefik:v3.4تم تحديد مواقع المنافذ. 80 443 و لحركة مرور الويب، وفي بعض الأمثلة، المنفذ 8080 لعرض لوحة التحكم داخليًا. بالإضافة إلى ذلك، تمت إضافة الخيار restart: unless-stopped ويتم تعزيز الأمن بـ security_opt: - no-new-privileges:true لتقليل مخاطر تصعيد الامتيازات داخل الحاوية.
فيما يتعلق بوحدات التخزين، يحتاج Traefik إلى تثبيت مقبس Docker للقراءة فقط (/var/run/docker.sock:/var/run/docker.sock:ro) لاكتشاف الحاويات، الملف الثابت traefik.yml والمجلد الذي سيتم فيه حفظ التكوين الديناميكي (./traefik-data/configurations:/configurationsالملف مثبت أيضاً. acme.jsonهنا يخزن Traefik الشهادات الصادرة عن Let's Encrypt. يتم إنشاء هذا الملف على المضيف ومنحه الصلاحيات اللازمة. 600 بحيث لا يتمكن من قراءته وكتابته إلا المستخدم المناسب؛ إذا تركته مع 644، فعادةً ما يعترض Traefik.
يكمن سر نجاح ترافيك في... ملصقات الخدمةستجد من بين أمور أخرى ما يلي: traefik.enable=true (بحيث يقوم موفر Docker بعرض هذه الخدمة)، traefik.docker.network=proxy (يشير إلى الشبكة التي يجب أن يستخدمها Traefik للتواصل مع الحاوية)، وجهاز توجيه مثل traefik.http.routers.traefik-secure، مع تسميات تحدد نقطة دخولها (websecure) قاعدة المضيف (على سبيل المثال Host(`traefik.tudominio.com`)) والخدمة المرتبطة بها (api@internal) وبرمجيات المصادقة الوسيطة (user-auth@file).
خدمة حمال في نفس docker-compose.yml يستخدم بشكل عام portainer/portainer-ce:latest (أو إصدار المؤسسات إذا كان لديك ترخيص). يتم تركيب وحدات تخزين مماثلة: مقبس Docker، ومجلد البيانات (./portainer-data:/data) وغالباً ما يكون أيضاً /etc/localtime بحيث يرث المنطقة الزمنية للمضيف.
تقوم ملصقات بورتينر بتسجيلها لدى ترايفيك: traefik.enable=true, traefik.docker.network=proxyجهاز توجيه من النوع traefik.http.routers.portainer-secure مع نقطة الدخول websecure وقاعدة مضيف مثل Host(`portainer.tudominio.com`)بالإضافة إلى ذلك، يتم تحديد الخدمة التي يجب أن يستخدمها Traefik، مع الإشارة إلى المنفذ الداخلي لـ Portainer، على سبيل المثال مع traefik.http.services.portainer.loadbalancer.server.port=9000.
مع كل هذا الجاري، بعد الإطلاق docker compose up -d في دليل المكدس، يقوم Traefik بتنزيل الصور وإنشاء الشبكة. proxy إذا تم تعريفها على أنها خارجية وتُظهر كلا اللوحتين في النطاقات الفرعية المُكوّنة، مع بروتوكول HTTPS تلقائي بفضل Let's Encryptمن تلك النقطة فصاعدًا، فإن إضافة خدمات جديدة هي مسألة استنساخ مشروعك، وإضافة بعض علامات Traefik، وربطها بالشبكة. proxy.
سيناريو Docker Swarm: Portainer و Traefik في مجموعة
عند تفعيل Docker Swarm، تتغير الأمور قليلاً، حيث تُنشر الخدمات على شكل مجموعات، وتعتمد الشبكات عادةً على بنية تراكبية. مع ذلك، يبقى المنطق الأساسي لـ Traefik و Portainer متشابهًا جدًا: يستمر Traefik في العمل كوكيل عكسي ومكتشف خدمات ديناميكي، ويمكن لـ Portainer العمل في كلٍ من الوضع المستقل ووضع Portainer + وكيل لإدارة العُقد البعيدة داخل المجموعة.
في عملية نشر نموذجية لـ Swarm، يتم إنشاء المكدس قبل تطبيق المكدس. شبكات ثنائية الطبقات والتي سيستخدمها Traefik لتوجيه حركة البيانات بين العُقد. بالإضافة إلى ذلك، يتم إنشاء وحدة تخزين لحفظ بيانات Portainer (على سبيل المثال). portainer_dataوإذا احتجت إليه، فواحد لـ acme.json أو الدليل الذي يخزن فيه Traefik الشهادات والتكوين.
El docker-compose.yml (والتي تتكشف بعد ذلك مع docker stack deploy باستخدام، على سبيل المثال، -c portainer.yml) عادةً ما تحدد خدمتين: وكيل بورتينر، والذي يعمل في الوضع global على جميع عقد لينكس، وخدمة بورتينر الرئيسية (CE أو EE)، والتي عادة ما تبقى في وضع النسخ المتماثل مع قيد التشغيل فقط على المديرين.
يقوم وكيل Portainer بتثبيت مقبس Docker ودليل وحدة التخزين (/var/lib/docker/volumes) ليكون قادراً على فحص الموارد. ويتصل بشبكة التراكب التي سيشاركها مع Traefik، على سبيل المثال traefik_publicيمكن تهيئة خدمة Portainer الرئيسية للتواصل مع الوكيل عبر بروتوكول TCP (tcp://tasks.agent:9001وفي الواقع، في بعض الأمثلة يظهر هذا الأمر مع --tlsskipverify تم التعليق، لتجاوز التحقق من TLS إذا لزم الأمر.
سواءً على نفس المكدس أو غيره، يبدأ Traefik العمل مع موفر Docker في وضع Swarm (swarmMode = true في TOML أو الخيار المكافئ في flags)، مع مراعاة الخدمات الموسومة. يتضمن تكوينه ما يلي: certificatesResolvers.main.acme لـ Let's Encrypt، dnsChallenge مع مورد مثل Route53 إذا كنت ترغب في التحقق من صحة الشهادات عبر نظام أسماء النطاقات (DNS)، ومجموعة من tls.options حيث يتم إجباره، على سبيل المثال minVersion = "VersionTLS13" بالنسبة للملف الشخصي الافتراضي، يتم تحديد قائمة صريحة من cipherSuites لملف تعريف TLS 1.2.
تتبع ملصقات بورتينر في سوارم نفس الفلسفة: traefik.enable=trueجهاز توجيه مثل traefik.http.routers.portainer مع Host(`portainer.midominio.com`), traefik.http.routers.portainer.entrypoints=https (o websecure (وفقًا للتسمية)، و traefik.http.routers.portainer.tls=true لتمكين بروتوكول TLS على هذا الموجه. بالإضافة إلى ذلك، يمكنك تحديد محلل الشهادات مع traefik.http.routers.portainer.tls.certresolver=main ومخطط الواجهة الخلفية إذا كانت الخدمة تستخدم بروتوكول HTTPS داخليًا مع traefik.http.services.portainer.loadbalancer.server.scheme=https.
ستجد في سجلات تصحيح أخطاء Traefik في Swarm التكوين المُنشأ: أجهزة التوجيه مثل api y portainerالخدمات المكتشفة (على سبيل المثال) portainer en http://10.0.1.12:9000 وخدمة traefik (مشيرًا إلى المنفذ 8080 للوحة التحكم)، وإذا كانت هناك مشكلة في التسميات غير الواضحة، فستظهر رسائل مثل "تعذر تحديد اسم الخدمة لجهاز التوجيه: عدد الخدمات كبير جدًا"وهذا يشير عادةً إلى وجود تعارض أو تكرار للخدمات المرتبطة بجهاز التوجيه.
مثال بسيط: whoami، والمسارات، وTLS مع Traefik
قبل إدخال Portainer في المعادلة، من العملي جدًا تجربة Traefik مع واجهة خلفية بسيطة للغاية، مثل الصورة. traefik/whoamiوالذي يُعيد معلومات حول الطلب. يساعدك هذا على التحقق من أن Traefik مُهيأ بشكل صحيح وأن قواعد التوجيه تعمل.
Un docker-compose.yml قد تشمل الخدمة الأساسية traefik مع الصورة traefik:v3.4، وتركيب مقبس Docker وتحديد علامات التمهيد على النحو التالي --providers.docker=true, --providers.docker.exposedbydefault=false, --providers.docker.network=proxy ونقطة الدخول --entryPoints.web.address=:80يتم الإعلان عن المنفذين 80 و 8080 على المضيف، ويتم إنشاء شبكة. proxy والتي ستستخدم الحاوية أيضًا whoami.
الخدمة whoami يبدأ على نفس الشبكة ويتم تمييزه بـ traefik.enable=trueثم يتم تعريف جهاز التوجيه باستخدام التسمية traefik.http.routers.whoami.rule=Host(`whoami.docker.localhost`) ويُشار إلى أن نقطة دخولك هي webإذا قدمت طلبًا مع curl -H "Host: whoami.docker.localhost" http://localhost/سترى استجابة تحتوي على اسم المضيف وعناوين IP والعناوين وما إلى ذلك، مما يؤكد أن Traefik يقوم بالتوجيه بشكل صحيح.
ومن ثم، يصبح الأمر بسيطاً. أضف التوجيه حسب المساراتعلى سبيل المثال، يمكنك إنشاء خدمة أخرى. whoami-api بنفس الصورة، على نفس الشبكة، وقم بتصنيفها بقاعدة من النوع Host(`whoami.docker.localhost`) && PathPrefix(`/api`)وبالتالي، الجذر / اذهب إلى whoami الأصل والطلبات إلى /api سوف يخدمهم whoami-apiيمكنك التحقق من ذلك عن طريق تقديم طلبات إلى / يا /api مع نفس المضيف.
لتفعيل TLS في هذه البيئة المحلية، يتمثل أحد الخيارات في إنشاء شهادة موقعة ذاتيًا للنطاق. *.docker.localhost مع opensslتقوم بإنشاء دليل certs، أنت تولد local.key y local.crtثم تضيف ملفًا ديناميكيًا (على سبيل المثال dynamic/tls.yml) مع القسم tls: والطرق certFile y keyFile يشير إلى تلك الملفات.
بعد ذلك، تقوم بتحديث تعريف خدمة Traefik في docker-compose.yml لتركيب المجلد ./certs والمجلد ./dynamic داخل الحاوية، يمكنك تفعيل واجهة برمجة التطبيقات الآمنة باستخدام --api.dashboard=true، تقوم بإنشاء نقطة الدخول websecure (--entryPoints.websecure.address=:443) وقم بتمكين بروتوكول TLS هناك باستخدام --entryPoints.websecure.http.tls=trueكما تقوم بتسمية جهاز التوجيه الخاص بلوحة التحكم وأجهزة التوجيه الخاصة بـ whoami ليستخدموها websecure و لدي tls=true.
بمجرد تشغيله، ستتمكن من الوصول https://whoami.docker.localhost/ ثم إلى لوحة تحكم Traefik باستخدام شهادة موقعة ذاتيًا، مع قبول تحذير الأمان من المتصفح. هذه التجربة مشابهة جدًا لما ستواجهه لاحقًا في بيئة الإنتاج مع Let's Encrypt، ولكن دون الاعتماد على خوادم DNS العامة.
أفضل الممارسات، ونشر التطبيقات، وحل المشكلات الشائعة
أحد الأنماط المتكررة في جميع هذه الأمثلة هو أن يعمل Traefik على تبسيط نشر التطبيقات الجديدة بشكل كبيربمجرد حصولك على مجموعتك الأساسية (Traefik + Portainer + الشبكة) proxy (بالإضافة إلى الشهادات)، فإن إضافة خدمة جديدة عادة ما تتلخص في:
استنسخ المشروع أو انسخ مشروعك docker-compose.yml قم بتوجيه نطاق فرعي إلى عنوان IP الخاص بالمضيف باستخدام الخادم. سجل أ في نظام أسماء النطاقات الخاص بك (على سبيل المثال) app.tudominio.comثم أضف التسميات الرئيسية إلى الخدمة: traefik.enable=true, traefik.docker.network=proxy وجهاز توجيه مزود بقاعدة مضيف لتلك النطاق الفرعي، يحدد نقطة الدخول الآمنة websecure و الخدمة بالمنفذ الداخلي الصحيح.
ستوضح العديد من الدروس التعليمية، على سبيل المثال، كيفية نشر تطبيق صغير FastAPI منفصل: تتم إضافة أربع علامات، مما يضمن انضمامه إلى الشبكة proxy في القسم networks من docker-compose.ymlوبعد القيام docker compose up -d يظهر التطبيق تلقائيًا على لوحة تحكم Traefik مع تفعيل بروتوكول TLS. وبفضل خاصية الاكتشاف التلقائي في Traefik، لن تحتاج حتى إلى تعديل إعداداته الثابتة.
لضمان سير الأمور بسلاسة، من المهم الانتباه إلى بعض التفاصيل: لا تعيد استخدام نفس مُعرّف جهاز التوجيه في مختلف التطبيقات، تأكد من وجود خدمة واحدة فقط مرتبطة بكل جهاز توجيه (لتجنب خطأ "عدد كبير جدًا من الخدمات")، واستخدم أسماء شبكة متسقة (على سبيل المثال، proxy (على جميع الحزم التي تريد كشفها)، وإذا كنت تستخدم Let's Encrypt، فتأكد من أن acme.json لديه صلاحيات 600 والبريد الإلكتروني المُكوّن صالح.
في بيئات Swarm، تحقق أيضًا من أن تكوين Traefik يتضمن موفر Docker. swarmMode=true y watch=trueوأن قيود الخدمات (على سبيل المثال node.role == manager (بالنسبة لـ Portainer) لا تتعارض مع مكان نشر Traefik. سجلات التصحيح مفصلة للغاية ولكنها أساسية لتحديد مشاكل التوجيه أو TLS.
بدمج Docker و Traefik و Portainer، يمكنك إعداد بيئة تنسيق خفيفة الوزن كاملة على خادم واحد، مع لوحات معلومات رسومية وشهادات تلقائية وتدفق نشر سريع للغاية، حيث يتم تقليل إضافة الخدمات أو تحديثها أو إزالتها إلى تعديل بضعة أسطر من YAML والسماح لـ Traefik بالقيام بالعمل القذر المتمثل في التوجيه العكسي و TLS.
