Làm thế nào để tích hợp Docker, Traefik và Portainer thành một hệ thống hoàn chỉnh?

Cập nhật lần cuối: 7 tháng 2026
  • Traefik hoạt động như một máy chủ proxy ngược động và giải quyết các chứng chỉ TLS, trong khi Portainer cung cấp giao diện đồ họa để quản lý Docker và Swarm.
  • Sự kết hợp giữa các tệp traefik.yml, dynamic.yml và docker-compose.yml cho phép bạn định nghĩa các điểm truy cập, phần mềm trung gian bảo mật và định tuyến HTTP/HTTPS dựa trên nhãn.
  • Trong các kịch bản Docker độc lập hoặc Swarm, chỉ cần thêm các dịch vụ vào mạng proxy và gắn thẻ cho chúng để Traefik có thể phát hiện và hiển thị chúng một cách an toàn.
  • Việc sử dụng Let's Encrypt, mạng chuyên dụng và xác thực cơ bản trên bảng điều khiển giúp tạo ra một môi trường mạnh mẽ để triển khai nhiều ứng dụng trên một máy chủ duy nhất.

Docker Portainer Traefik

Việc thiết lập một hệ thống hiện đại với Docker, Traefik và Portainer hiện là một trong những cách dễ nhất để quản lý container trên một máy chủ duy nhất và cung cấp nhiều dịch vụ với HTTPS mà không cần phải cấu hình phức tạp. Ưu điểm của nó là Traefik hoạt động như một máy chủ proxy ngược động, trong khi Portainer cung cấp giao diện web rất đơn giản để quản lý Docker và, nếu muốn, cả Swarm nữa.

Trong bài viết này bạn sẽ thấy cách Traefik được sử dụng như một máy chủ proxy ngược đặt trước Portainer. Trong cả kịch bản Docker "cổ điển" (độc lập) và cụm Docker Swarm, làm thế nào để tích hợp TLS (tự ký hoặc Let's Encrypt), và những tệp cấu hình nào cần được sử dụng?traefik.yml, dynamic.yml y docker-compose.yml) và một số thủ thuật phổ biến với phần mềm trung gian, mạng và các vấn đề gắn thẻ điển hình trong Traefik.

Docker, Traefik và Portainer đóng vai trò gì trong kiến ​​trúc hệ thống?

Trong kiểu thiết lập này, Docker là lớp nền tảng nơi các container chạy, Traefik hoạt động như một máy chủ proxy ngược và bộ cân bằng tải , nhận tất cả các yêu cầu HTTP/HTTPS trên cổng 80 và 443 và gửi chúng đến container thích hợp, còn Portainer cung cấp giao diện đồ họa để quản lý hình ảnh, container, volume, mạng và các stack Docker hoặc Swarm.

Ý tưởng là có một máy chủ duy nhất với Docker, trong đó... Traefik nằm ở "cửa ngõ".: lắng nghe tại các điểm vào web (80) y websecure (443), giải quyết các chứng chỉ TLS (thường là với Let's Encrypt) và, nhờ tích hợp với nhà cung cấp Docker, tự động phát hiện các dịch vụ bạn cung cấp bằng cách thêm nhãn vào các container.

Mặt khác, Portainer hoạt động như một loại thùng chứa thông thường, nhưng được trưng bày ra bên ngoài. một tên miền phụ cụ thể, ví dụ: portainer.tudominio.comĐược bảo vệ bởi TLS và, nếu cần, đằng sau một lớp trung gian xác thực bổ sung ngoài hệ thống đăng nhập của Portainer. Tất cả điều này được điều phối bằng một hệ thống... docker-soạn Điều đó định nghĩa Traefik, Portainer và mạng lưới chung thuộc loại này. proxy.

Một ưu điểm rõ ràng của phương pháp này là bạn có thể triển khai các dịch vụ mới chỉ bằng cách thêm nhãn vào container của mình: Traefik phát hiện sự thay đổi trong Docker, tạo bộ định tuyến, dịch vụ và phần mềm trung gian ngay lập tức, và chỉ trong vài giây, bạn đã có một tên miền phụ hoặc tuyến đường mới hoạt động mà không cần phải chỉnh sửa thủ công các tệp cấu hình tĩnh.

Cấu hình tĩnh Traefik: traefik.yml

Cấu hình tĩnh của Traefik thường được lưu trữ trong một tệp như sau: traefik.ymlđược gắn bên trong thùng chứa. Ở đây nó được định nghĩa như sau: bảng điều khiển, điểm truy cập, nhà cung cấp và trình giải quyết chứng chỉ Let's Encrypt, cùng với nhiều thứ khác nữa.

Một cấu hình YAML điển hình bắt đầu bằng việc kích hoạt API và bảng điều khiển với một đoạn mã tương tự như sau: api: dashboard: trueĐiều này cho phép truy cập vào giao diện web, nơi bạn có thể xem các bộ định tuyến, dịch vụ và phần mềm trung gian. Bảng điều khiển này không được xác thực theo mặc định, vì vậy chúng ta sẽ xem sau cách bảo mật nó bằng xác thực cơ bản từ cấu hình động.

Tiếp theo, các điểm vào được xác định. Thông thường, sẽ có một điểm vào web tại cảng 80 và khác websecure trong 443. Trong web Thông thường, tính năng chuyển hướng tự động được cấu hình để websecuređể mọi truy cập HTTP đều được chuyển hướng sang HTTPS:

Một dàn bài điển hình sẽ bao gồm một phần. http.redirections.entryPoint.to: websecure để buộc chuyển hướng đó và tập trung tất cả lưu lượng truy cập được mã hóa tại điểm truy cập an toàn.

đến websecure Thông báo cho biết nên sử dụng TLS và cung cấp liên kết. certResolver (ví dụ letsencrypt) sẽ chịu trách nhiệm tự động quản lý các chứng chỉ. Tất cả điều này được hỗ trợ bởi acmeĐây là giao thức mà Let's Encrypt sử dụng để cấp và gia hạn chứng chỉ.

Trong khối nhà cung cấp Trình cung cấp Docker đã được cấu hình, trỏ đến socket. unix:///var/run/docker.sockvới một lựa chọn quan trọng: exposedByDefault: falseDo đó, Traefik không mặc định công bố tất cả các container; chỉ những container có nhãn mới được công bố. traefik.enable=trueBạn cũng có thể cấu hình nhà cung cấp tệp (file) để tải cấu hình động bổ sung từ, ví dụ, /configurations/dynamic.yml.

Cuối cùng, tệp tĩnh thường bao gồm phần này. certificatesResolversnơi định nghĩa trình phân giải ACME: email đăng ký, tệp lưu trữ (thường là acme.json), loại khóa (ví dụ: EC384) và phương pháp xác thực (ví dụ: httpChallenge tại điểm vào webĐiều quan trọng là thiết lập một email thật Trong phần này, tôi ghi rõ vì Let's Encrypt sử dụng nó cho các thông báo và gia hạn; nếu bạn để lại giá trị giả hoặc không đúng định dạng, bạn có thể gặp lỗi khi khởi động container Traefik.

  Apache là gì: Công cụ vô hình hỗ trợ web

Ngoài cấu hình YAML này, còn có các triển khai sử dụng Định dạng TOML (traefik.toml)Nhưng logic vẫn giống nhau: họ phân loại chứng chỉ trình phân giải (ví dụ: [certificatesResolvers.main.acme]), xác định các thách thức (chẳng hạn như dnsChallenge với provider = "route53") và thêm các tùy chọn TLS mặc định, chẳng hạn như lực lượng minVersion = "VersionTLS13" hoặc cấu hình một danh sách cipherSuites cho phép.

Kiến trúc Docker Traefik Portainer

Cấu hình động: phần mềm trung gian, TLS và bảo mật

Phần xử lý động của Traefik thường được đặt trong một tệp như sau: dynamic.yml, được tải bởi nhà cung cấp tệp. Tại đây bạn định nghĩa các phần mềm trung gian và tùy chọn TLS Điều này cho phép chỉnh sửa mà không cần khởi động lại container Traefik, rất hữu ích để điều chỉnh bảo mật ngay lập tức.

Một trường hợp điển hình là tạo middleware cho tiêu đề, chẳng hạn. secureHeadersĐiều này bổ sung các chính sách liên quan đến HSTS và việc bắt buộc sử dụng HTTPS. Trong YAML, bạn có thể tìm thấy các tham số như sau: sslRedirect: true, forceSTSHeader: true, stsIncludeSubdomains: true, stsPreload: true và một stsSeconds cao (ví dụ: một năm tính bằng giây). Điều này tăng cường bảo mật lưu lượng truy cập từ phía trình duyệt.

Một loại middleware phổ biến khác là middleware dùng cho xác thực cơ bản, ví dụ như vậy. user-auth loại basicAuth, trong đó danh sách người dùng được khai báo theo định dạng usuario:hashMã băm thường được tạo ra bằng htpasswd và được nhúng trong tệp. Phần mềm trung gian này thường được liên kết với bộ định tuyến bảng điều khiển Traefik, do đó, ngoài quyền truy cập HTTPS, nó còn yêu cầu tên người dùng và mật khẩu.

Trong cùng một cấu hình động, người ta thường thấy một khối. tls.options với cấu hình mặc định (default) trong đó các thuật toán mã hóa được hỗ trợ và phiên bản TLS tối thiểu được thiết lập, ví dụ: VersionTLS12Trong một số triển khai, một số tùy chọn được xác định (ví dụ: một cấu hình được gọi là...) tls12 và khác default) để điều chỉnh mức độ bảo mật cho các dịch vụ khác nhau nếu cần thiết.

Trong những môi trường mà người ta mong muốn sử dụng TLS cũng được sử dụng nội bộ Giữa Traefik và các dịch vụ phụ trợ (như Portainer), có thể phát sinh vấn đề khi các dịch vụ đó không có chứng chỉ được công nhận bởi một CA công cộng. Đó là lúc tùy chọn này phát huy tác dụng. insecureSkipVerify, được cấu hình theo providers.http.tls Hoặc trong các tùy chọn TLS thích hợp, nó cho phép Traefik bỏ qua quá trình xác thực chứng chỉ phía máy chủ. Điều này hữu ích cho môi trường thử nghiệm hoặc các chứng chỉ tự ký nội bộ, nhưng cần sử dụng thận trọng vì nó làm giảm mức độ xác thực.

Một chi tiết thực tế: tập tin dynamic.yml Nó có thể được chỉnh sửa ngay lập tức.Traefik tải lại cấu hình động mà không cần khởi động lại, vì vậy bạn có thể thêm hoặc xóa middleware, thay đổi tiêu đề bảo mật hoặc sửa đổi xác thực cơ bản mà không ảnh hưởng đến khả năng hoạt động của proxy.

docker-compose với Traefik và Portainer trong Docker độc lập

Trong một kịch bản Docker cơ bản, không có Swarm, điều phổ biến nhất cần làm là khởi chạy lệnh. Traefik và Portainer với một đĩa đơn docker-compose.yml trong đó xác định cả các dịch vụ và một mạng lưới kiểu cầu nối dùng chung, ví dụ như, proxy.

Dịch vụ traefik Nó thường sử dụng hình ảnh chính thức, ví dụ như vậy. traefik:latest hoặc một phiên bản cụ thể như traefik:v3.4Các cổng đã được lập bản đồ. 80 và 443 Đối với lưu lượng truy cập web và, trong một số ví dụ, cổng 8080 để hiển thị bảng điều khiển nội bộ. Ngoài ra, tùy chọn này cũng được thêm vào. restart: unless-stopped và an ninh được tăng cường bằng security_opt: - no-new-privileges:true nhằm giảm nguy cơ leo thang đặc quyền bên trong container.

Về vấn đề dung lượng, Traefik cần gắn kết socket Docker chỉ đọc (/var/run/docker.sock:/var/run/docker.sock:ro) để khám phá các container, tệp tĩnh traefik.yml và thư mục nơi cấu hình động sẽ được lưu (./traefik-data/configurations:/configurationsTệp cũng được gắn kết. acme.jsonĐây là nơi Traefik lưu trữ các chứng chỉ do Let's Encrypt cấp. Tệp này được tạo trên máy chủ và được cấp quyền truy cập. 600 Để chỉ người dùng có quyền mới có thể đọc và ghi vào đó; nếu bạn để là 644, Traefik thường sẽ báo lỗi.

Bí quyết giúp Traefik tạo nên điều kỳ diệu nằm ở chỗ... nhãn dịch vụNgoài ra, bạn sẽ tìm thấy: traefik.enable=true (để nhà cung cấp Docker hiển thị dịch vụ này), traefik.docker.network=proxy (chỉ định mạng mà Traefik nên sử dụng để giao tiếp với container), và một bộ định tuyến như traefik.http.routers.traefik-secure, với các nhãn xác định điểm vào của nó (websecure), quy tắc máy chủ (ví dụ: Host(`traefik.tudominio.com`)), dịch vụ liên quan (api@internal) và phần mềm trung gian xác thực (user-auth@file).

  Hướng dẫn đầy đủ về tối ưu hóa máy chủ Linux

Dịch vụ Người khuân vác trong cùng docker-compose.yml thường sử dụng portainer/portainer-ce:latest (hoặc phiên bản Enterprise nếu bạn có giấy phép). Các phân vùng tương tự được gắn kết: socket Docker, thư mục dữ liệu (./portainer-data:/data) và thường cũng là /etc/localtime để nó kế thừa múi giờ của máy chủ.

Nhãn hiệu của Portainer được đăng ký với Traefik: traefik.enable=true, traefik.docker.network=proxymột bộ định tuyến thuộc loại traefik.http.routers.portainer-secure với điểm vào websecure và một quy tắc máy chủ như Host(`portainer.tudominio.com`)Ngoài ra, dịch vụ mà Traefik nên sử dụng được xác định, trỏ đến cổng nội bộ của Portainer, ví dụ như với traefik.http.services.portainer.loadbalancer.server.port=9000.

Với tất cả những điều đang diễn ra, sau khi ra mắt docker compose up -d Trong thư mục stack, Traefik tải xuống các ảnh và tạo mạng. proxy Nếu nó được khai báo là bên ngoài và hiển thị cả hai bảng điều khiển trong các tên miền phụ đã cấu hình, với Tự động sử dụng HTTPS nhờ Let's Encrypt.Từ thời điểm đó trở đi, việc thêm các dịch vụ mới chỉ đơn giản là sao chép dự án của bạn, thêm một vài nhãn Traefik và kết nối nó với mạng. proxy.

Kịch bản Docker Swarm: Portainer và Traefik trong một cụm

Khi bạn kích hoạt Docker Swarm, mọi thứ sẽ thay đổi một chút, vì các dịch vụ được triển khai dưới dạng các stack và mạng thường dựa trên kiến ​​trúc overlay. Tuy nhiên, logic cơ bản với Traefik và Portainer rất giống nhau: Traefik tiếp tục hoạt động như một reverse proxy và trình khám phá dịch vụ động, còn Portainer có thể hoạt động ở cả chế độ độc lập và chế độ Portainer + agent để quản lý các node từ xa trong cụm.

Trong một triển khai Swarm điển hình, ngăn xếp được tạo ra trước khi được áp dụng. hai mạng lưới chồng chéo Traefik sẽ sử dụng dữ liệu này để định tuyến lưu lượng truy cập giữa các node. Ngoài ra, một volume được tạo ra để lưu trữ dữ liệu Portainer (ví dụ). portainer_data) và, nếu cần, một cái nữa cho acme.json hoặc thư mục nơi Traefik lưu trữ chứng chỉ và cấu hình.

El docker-compose.yml (sau đó diễn ra với) docker stack deploy ví dụ, bằng cách sử dụng -c portainer.yml) thường định nghĩa hai dịch vụ: Đại lý Portainer, hoạt động ở chế độ global trên tất cả các nút Linux và dịch vụ Portainer chính (CE hoặc EE), thường duy trì ở chế độ sao chép với ràng buộc chỉ chạy trên các máy chủ quản lý.

Tác nhân Portainer gắn kết socket Docker và thư mục volume (/var/lib/docker/volumes) để có thể kiểm tra tài nguyên. Nó kết nối với mạng lớp phủ mà nó sẽ chia sẻ với Traefik, ví dụ: traefik_publicDịch vụ Portainer chính có thể được cấu hình để giao tiếp với tác nhân thông qua TCP (tcp://tasks.agent:9001) và trên thực tế, trong một số ví dụ, lệnh đó được hiển thị với --tlsskipverify đã bình luận, để bỏ qua bước xác minh TLS nếu cần thiết.

Trên cùng một ngăn xếp hoặc ngăn xếp khác, Traefik khởi động với nhà cung cấp Docker ở chế độ Swarm (swarmMode = true (trong TOML hoặc tùy chọn tương đương trong flags), theo dõi các dịch vụ được gắn thẻ. Cấu hình của nó bao gồm một certificatesResolvers.main.acme cho Let's Encrypt, một dnsChallenge với một nhà cung cấp như Tuyến53 Nếu bạn muốn xác thực chứng chỉ bằng DNS và một khối tls.options ví dụ, trong trường hợp bị ép buộc minVersion = "VersionTLS13" đối với cấu hình mặc định và một danh sách rõ ràng được xác định. cipherSuites cho cấu hình TLS 1.2.

Các nhãn hiệu của Portainer tại Swarm cũng tuân theo cùng một triết lý: traefik.enable=truemột bộ định tuyến như traefik.http.routers.portainer với Host(`portainer.midominio.com`), traefik.http.routers.portainer.entrypoints=https (o websecure (theo cách đặt tên), và traefik.http.routers.portainer.tls=true để bật TLS trên bộ định tuyến đó. Ngoài ra, bạn có thể chỉ định certresolver với traefik.http.routers.portainer.tls.certresolver=main và lược đồ phụ trợ nếu dịch vụ sử dụng HTTPS nội bộ. traefik.http.services.portainer.loadbalancer.server.scheme=https.

Trong nhật ký gỡ lỗi Traefik trong Swarm, bạn sẽ thấy cấu hình được tạo ra: các bộ định tuyến như... api y portainercác dịch vụ được phát hiện (ví dụ: portainer en http://10.0.1.12:9000 và một dịch vụ traefik (trỏ đến cổng 8080 của bảng điều khiển), và nếu có vấn đề với các nhãn được định nghĩa không rõ ràng, các thông báo như sau: "Không thể định nghĩa tên dịch vụ cho bộ định tuyến: quá nhiều dịch vụ"Điều này thường cho thấy có sự xung đột hoặc trùng lặp dịch vụ liên quan đến bộ định tuyến.

Ví dụ tối thiểu: whoami, định tuyến và TLS với Traefik

Trước khi cân nhắc sử dụng Portainer, việc thử nghiệm Traefik với một hệ thống phụ trợ đơn giản như trong hình ảnh là khá thiết thực. traefik/whoamiHàm này trả về thông tin về yêu cầu. Điều này giúp bạn xác nhận rằng Traefik đã được cấu hình chính xác và các quy tắc định tuyến đang hoạt động.

Un docker-compose.yml cơ bản có thể bao gồm dịch vụ traefik với hình ảnh traefik:v3.4, gắn socket Docker và định nghĩa các cờ khởi động như sau: --providers.docker=true, --providers.docker.exposedbydefault=false, --providers.docker.network=proxy và điểm vào --entryPoints.web.address=:80Các cổng 80 và 8080 được quảng bá trên máy chủ, và một mạng được tạo ra. proxy điều này cũng sẽ sử dụng container whoami.

Dịch vụ whoami Nó bắt đầu trên cùng một mạng và được đánh dấu bằng traefik.enable=trueSau đó, một bộ định tuyến được định nghĩa với nhãn. traefik.http.routers.whoami.rule=Host(`whoami.docker.localhost`) và nó cho biết điểm vào của bạn là webNếu bạn gửi yêu cầu với curl -H "Host: whoami.docker.localhost" http://localhost/Bạn sẽ nhận được phản hồi bao gồm tên máy chủ, địa chỉ IP, tiêu đề, v.v., điều này xác nhận rằng Traefik đang định tuyến chính xác.

  Lỗi 404 Không tìm thấy: Lỗi này là gì, nguyên nhân, tác động đến trang web của bạn và cách khắc phục.

Từ đó trở đi, mọi việc rất đơn giản. Thêm định tuyến theo đường dẫnVí dụ, bạn có thể tạo một dịch vụ khác. whoami-api với cùng một hình ảnh, trên cùng một mạng lưới, và gắn thẻ nó bằng một quy tắc thuộc loại Host(`whoami.docker.localhost`) && PathPrefix(`/api`)Do đó, gốc rễ / đi đến whoami bản gốc và các yêu cầu tới /api sẽ phục vụ họ whoami-apiBạn có thể xác minh điều này bằng cách gửi yêu cầu tới... / ya /api với cùng một máy chủ.

Để kích hoạt TLS Trong môi trường cục bộ này, một lựa chọn là tạo chứng chỉ tự ký cho tên miền. *.docker.localhost với opensslBạn tạo một thư mục certs, bạn tạo ra local.key y local.crtvà sau đó bạn thêm một tệp động (ví dụ: dynamic/tls.yml) với phần tls: và các tuyến đường certFile y keyFile trỏ đến các tập tin đó.

Tiếp theo, bạn cập nhật định nghĩa dịch vụ Traefik trong docker-compose.yml để gắn thư mục ./certs và thư mục ./dynamic Bên trong container, bạn kích hoạt API bảo mật bằng --api.dashboard=trueBạn tạo điểm vào. websecure (--entryPoints.websecure.address=:443và bật TLS ở đó bằng --entryPoints.websecure.http.tls=trueBạn cũng gắn nhãn cho bộ định tuyến trên bảng điều khiển và các bộ định tuyến của whoami để họ sử dụng websecure và có tls=true.

Sau khi khởi động xong, bạn sẽ có thể truy cập. https://whoami.docker.localhost/ và truy cập vào bảng điều khiển Traefik với chứng chỉ tự ký, chấp nhận cảnh báo bảo mật của trình duyệt. Trải nghiệm này rất giống với những gì bạn sẽ có sau này trong môi trường sản xuất với Let's Encrypt, nhưng không cần dựa vào máy chủ DNS công cộng.

Các phương pháp tốt nhất, triển khai ứng dụng và giải quyết các vấn đề thường gặp

Một điểm chung lặp đi lặp lại trong tất cả các ví dụ này là: Traefik giúp đơn giản hóa đáng kể việc triển khai các ứng dụng mới.Khi bạn đã có bộ công cụ cơ bản (Traefik + Portainer + mạng) proxy (Cộng thêm chứng chỉ), việc thêm một dịch vụ mới thường quy về các bước sau:

Sao chép dự án hoặc copy dự án của bạn docker-compose.yml Để trỏ đến máy chủ, hãy sử dụng một tên miền phụ đến địa chỉ IP của máy chủ. ghi A trong DNS của bạn (ví dụ: app.tudominio.com), và sau đó thêm các nhãn chính vào dịch vụ: traefik.enable=true, traefik.docker.network=proxy và một bộ định tuyến với quy tắc máy chủ cho tên miền phụ đó, chỉ định điểm truy cập an toàn. websecure và dịch vụ với cổng nội bộ chính xác.

Nhiều hướng dẫn sẽ trình bày, ví dụ, cách triển khai một ứng dụng nhỏ. API nhanh Đã tách: bốn nhãn được thêm vào, đảm bảo nó tham gia vào mạng lưới. proxy trong phần networks các docker-compose.ymlvà sau khi làm docker compose up -d Ứng dụng sẽ tự động xuất hiện trên bảng điều khiển Traefik với TLS được bật. Tính năng tự động phát hiện của Traefik có nghĩa là bạn thậm chí không cần phải điều chỉnh các cài đặt tĩnh của nó.

Để đảm bảo mọi việc diễn ra suôn sẻ, điều quan trọng là phải chú ý đến một vài chi tiết sau: Không sử dụng lại cùng một mã định danh bộ định tuyến. Trong các ứng dụng khác nhau, hãy kiểm tra xem chỉ có một dịch vụ được liên kết với mỗi bộ định tuyến (tránh lỗi "quá nhiều dịch vụ"), sử dụng tên mạng nhất quán (ví dụ: proxy (trên tất cả các ngăn xếp mà bạn muốn hiển thị), và nếu bạn đang sử dụng Let's Encrypt, hãy đảm bảo rằng acme.json Nó có quyền truy cập 600 và địa chỉ email đã cấu hình hợp lệ.

Trong môi trường Swarm, hãy kiểm tra xem cấu hình Traefik có bao gồm nhà cung cấp Docker hay không. swarmMode=true y watch=truevà các hạn chế của dịch vụ (ví dụ: node.role == manager (Đối với Portainer) không xung đột với nơi Traefik được triển khai. Nhật ký gỡ lỗi rất chi tiết nhưng rất quan trọng để xác định các vấn đề về định tuyến hoặc TLS.

Kết hợp Docker, Traefik và Portainer, bạn có thể thiết lập một môi trường điều phối hoàn chỉnh, gọn nhẹ trên một máy chủ duy nhất, với bảng điều khiển đồ họa, chứng chỉ tự động và quy trình triển khai rất nhanh, trong đó việc thêm, cập nhật hoặc xóa dịch vụ được đơn giản hóa thành việc chỉnh sửa một vài dòng YAML và để Traefik thực hiện các công việc phức tạp như proxy ngược và TLS.