Cách sử dụng Traefik v2 làm Reverse Proxy cho Docker Containers trên Ubuntu 20.04
Docker có thể là một cách hiệu quả để chạy các ứng dụng web trong production , nhưng bạn có thể cần chạy nhiều ứng dụng trên cùng một server Docker. Trong trường hợp này, bạn cần cài đặt một Reverse Proxy . Điều này là do bạn chỉ muốn hiển thị cổng80 và 443 với phần còn lại của thế giới.  Traefik là một Reverse Proxy nhận biết Docker bao gồm một console giám sát. Traefik v1 đã được sử dụng rộng rãi trong một thời gian và bạn có thể làm theo hướng dẫn trước đó để cài đặt Traefik v1 ). Nhưng trong hướng dẫn này, bạn sẽ cài đặt và cấu hình Traefik v2, bao gồm một số điểm khác biệt.
Sự khác biệt lớn nhất giữa Traefik v1 và v2 là giao diện user và backend đã bị loại bỏ và chức năng kết hợp của chúng trải rộng trên các bộ định tuyến , phần mềm trung gian và dịch vụ . Trước đây, một chương trình backend thực hiện công việc sửa đổi các yêu cầu và nhận yêu cầu đó đến bất cứ thứ gì được cho là xử lý nó. Traefik v2 cung cấp nhiều mối quan tâm hơn bằng cách giới thiệu phần mềm trung gian có thể sửa đổi các yêu cầu trước khi gửi chúng đến một dịch vụ. Phần mềm trung gian giúp dễ dàng chỉ định một bước sửa đổi duy nhất được dùng bởi nhiều tuyến đường khác nhau để chúng được dùng lại (chẳng hạn như HTTP Basic Auth, bạn sẽ thấy sau). Một bộ định tuyến cũng có thể sử dụng nhiều phần mềm trung gian khác nhau.
Trong hướng dẫn này, bạn sẽ cấu hình Traefik v2 để định tuyến các yêu cầu đến hai containers ứng dụng web khác nhau: containers Wordpress và vùng chứa Adminer , mỗi vùng nói chuyện với cơ sở dữ liệu MySQL . Bạn sẽ cấu hình Traefik để phân phát mọi thứ qua HTTPS bằng Let's Encrypt .
Yêu cầu
Để hoàn thành hướng dẫn này, bạn cần những thứ sau:
- Một server Ubuntu 20.04 với user không phải root có quyền sudo và firewall . Bạn có thể cài đặt điều này theo hướng dẫn cài đặt server ban đầu Ubuntu 20.04 .
- Docker được cài đặt trên server của bạn, bạn có thể thực hiện điều này theo các Bước 1 và 2 của Cách cài đặt và sử dụng Docker trên Ubuntu 20.04 .
- Docker Compose đã được cài đặt bằng cách sử dụng các hướng dẫn từ Bước 1 của Cách cài đặt Docker Compose trên Ubuntu 20.04 .
-  Một domain  và ba bản ghi A, db-admin. your_domain,blog. your_domainvàmonitor. your_domain. Mỗi thứ phải trỏ đến địa chỉ IP của server của bạn. Bạn có thể tìm hiểu cách trỏ domain tới DigitalOcean Server bằng cách đọc qua tài liệu DNS và Tên domain của DigitalOcean . Trong suốt hướng dẫn này, hãy thay thế domain của bạn choyour_domaintrong các file cấu hình và ví dụ.
Bước 1 - Cấu hình và chạy Traefik
Dự án Traefik có Docker image chính thức , vì vậy bạn sẽ sử dụng hình ảnh đó để chạy Traefik trong containers Docker.
Nhưng trước khi cài đặt và chạy containers Traefik, bạn cần tạo file cấu hình và cài đặt password được mã hóa để có thể truy cập trang tổng quan giám sát.
 Bạn sẽ  sử dụng trình  htpasswd để tạo password  được mã hóa này. Đầu tiên, hãy cài đặt tiện ích  có trong  gói apache2-utils :
- sudo apt-get install apache2-utils 
Sau đó tạo password  bằng htpasswd . Thay thế secure_password bằng password  bạn muốn sử dụng cho  admin-user  Traefik:
- htpasswd -nb admin secure_password 
Kết quả kết quả từ chương trình sẽ như sau:
Outputadmin:$apr1$ruca84Hq$mbjdMZBAG.KWn7vfN/SNK/ Bạn sẽ sử dụng kết quả này trong file cấu hình Traefik để cài đặt Xác thực cơ bản HTTP cho trang tổng quan giám sát và kiểm tra tình trạng Traefik. Sao chép toàn bộ dòng kết quả để bạn có thể dán nó sau này.
 Để  cấu hình   server  Traefik, bạn sẽ tạo hai file  cấu hình mới có tên traefik.toml và traefik_dynamic.toml bằng cách sử dụng định dạng TOML. TOML là một ngôn ngữ cấu hình tương tự như các file  INI, nhưng được tiêu chuẩn hóa. Những file  này cho phép  ta   cấu hình   server  Traefik và các tích hợp hoặc providers khác nhau mà bạn muốn sử dụng. Trong hướng dẫn này, bạn sẽ sử dụng ba nhà cung cấp có sẵn của Traefik: api , docker và acme . Cái cuối cùng trong số này, acme , hỗ trợ certificate  TLS bằng Let's Encrypt.
 Tạo và mở traefik.toml bằng nano hoặc editor   bạn muốn :
- nano traefik.toml 
Trước tiên, bạn muốn chỉ định các cổng mà Traefik sẽ lắng nghe bằng cách sử dụng phần entryPoints trong file  cấu hình của bạn. Bạn muốn hai vì bạn muốn nghe trên cổng 80 và 443 . Hãy gọi chúng là web (cổng 80 ) và websecure (cổng 443 ).
Thêm các cấu hình sau:
[entryPoints]   [entryPoints.web]     address = ":80"     [entryPoints.web.http.redirections.entryPoint]       to = "websecure"       scheme = "https"    [entryPoints.websecure]     address = ":443" Lưu ý bạn cũng đang tự động chuyển hướng truy cập được xử lý qua TLS.
 Tiếp theo,  cấu hình  api Traefik, cho phép bạn truy cập vào cả API và giao diện trang tổng quan của bạn. Tiêu đề của [api] là tất cả những gì bạn cần vì trang tổng quan sau đó được bật theo mặc định, nhưng bạn sẽ rõ ràng vào lúc này.
Thêm mã sau:
... [api]   dashboard = true Để hoàn tất việc bảo mật các yêu cầu web của bạn, bạn muốn sử dụng Let's Encrypt để tạo certificate  TLS hợp lệ. Traefik v2 hỗ trợ Let's Encrypt out of the box và bạn có thể  cấu hình  nó bằng cách tạo trình phân giải certificate  loại acme .
 Hãy cấu hình trình phân giải certificate  của bạn ngay bây giờ bằng cách sử dụng tên lets-encrypt :
... [certificatesResolvers.lets-encrypt.acme]   email = "your_email@your_domain"   storage = "acme.json"   [certificatesResolvers.lets-encrypt.acme.tlsChallenge] Phần này được gọi là acme vì ACME là tên của giao thức được sử dụng để giao tiếp với Let's Encrypt để quản lý certificate . Dịch vụ Encrypt của Hãy yêu cầu đăng ký với một địa chỉ email hợp lệ, vì vậy để có Traefik tạo certificate  cho  server  của bạn,  cài đặt  các email quan trọng để địa chỉ email của bạn. Sau đó, bạn chỉ định rằng bạn sẽ lưu trữ thông tin mà bạn sẽ nhận được từ Let's Encrypt trong một file  JSON có tên là acme.json .
 Phần acme.tlsChallenge cho phép  ta  chỉ định cách Let's Encrypt có thể xác minh certificate  đó. Bạn đang  cấu hình  nó để phân phát file  như một phần của thử thách qua cổng 443 .
Cuối cùng, bạn cần cấu hình Traefik để hoạt động với Docker.
Thêm các cấu hình sau:
... [providers.docker]   watch = true   network = "web" Các docker cung cấp dịch vụ cho phép Traefik để hoạt động như một proxy trước container Docker. Bạn đã  cấu hình  nhà cung cấp để watch các containers  mới trên mạng web mà bạn sẽ sớm tạo ra.
 Cấu hình cuối cùng của  ta  sử dụng trình cung cấp file . Với Traefik v2, các cấu hình tĩnh và động không thể trộn lẫn và  trùng với  nhau. Để giải quyết vấn đề này, bạn sẽ sử dụng traefik.toml để xác  cấu hình  tĩnh và sau đó giữ cấu hình động của bạn trong một file  khác, mà bạn sẽ gọi là traefik_dynamic.toml . Ở đây, bạn đang sử dụng trình cung cấp file để cho Traefik biết rằng nó sẽ đọc trong cấu hình động từ một file  khác.
 Thêm nhà cung cấp file sau:
- [providers.file] 
-   filename = "traefik_dynamic.toml" 
traefik.toml đã hoàn thành của bạn sẽ trông như thế này:
[entryPoints]   [entryPoints.web]     address = ":80"     [entryPoints.web.http.redirections.entryPoint]       to = "websecure"       scheme = "https"    [entryPoints.websecure]     address = ":443"  [api]   dashboard = true  [certificatesResolvers.lets-encrypt.acme]   email = "your_email@your_domain"   storage = "acme.json"   [certificatesResolvers.lets-encrypt.acme.tlsChallenge]  [providers.docker]   watch = true   network = "web"  [providers.file]   filename = "traefik_dynamic.toml" Lưu và đóng file .
 Bây giờ hãy tạo traefik_dynamic.toml .
Các giá trị cấu hình động mà bạn cần giữ trong file riêng của chúng là phần mềm trung gian và bộ định tuyến . Để đặt trang tổng quan của bạn đằng sau password , bạn cần tùy chỉnh bộ định tuyến của API và cấu hình phần mềm trung gian để xử lý xác thực cơ bản HTTP. Hãy bắt đầu bằng cách cài đặt phần mềm trung gian.
 Phần mềm trung gian được  cấu hình  trên cơ sở mỗi giao thức và vì bạn đang làm việc với HTTP, nên bạn sẽ chỉ định nó như một phần được liên kết với http.middlewares . Tiếp theo là tên của phần mềm trung gian của bạn để bạn có thể tham khảo nó sau này, tiếp theo là loại phần mềm trung gian, trong trường hợp này sẽ là basicAuth . Hãy gọi phần mềm trung gian của bạn là simpleAuth .
 Tạo và mở một file  mới có tên traefik_dynamic.toml :
- nano traefik_dynamic.toml 
Thêm mã sau. Đây là nơi bạn sẽ dán  kết quả  từ lệnh htpasswd :
[http.middlewares.simpleAuth.basicAuth]   users = [     "admin:$apr1$ruca84Hq$mbjdMZBAG.KWn7vfN/SNK/"   ] Để cấu hình bộ định tuyến cho api,    bạn sẽ tách tên giao thức ra, nhưng thay vì sử dụng http.middlewares , bạn sẽ sử dụng http.routers theo sau là tên của bộ định tuyến. Trong trường hợp này, api cung cấp bộ định tuyến được đặt tên riêng mà bạn có thể  cấu hình  bằng cách sử dụng phần [http.routers.api] . Bạn cũng sẽ  cấu hình  domain  mà bạn định sử dụng với trang tổng quan  của bạn  bằng cách đặt khóa rule bằng cách sử dụng kết hợp  server , điểm nhập để sử dụng websecure và phần mềm trung gian để bao gồm simpleAuth .
Thêm các cấu hình sau:
... [http.routers.api]   rule = "Host(`monitor.your_domain`)"   entrypoints = ["websecure"]   middlewares = ["simpleAuth"]   service = "api@internal"   [http.routers.api.tls]     certResolver = "lets-encrypt" Các web entry xử lý điểm cổng 80 , trong khi websecure điểm vào sử dụng cổng 443 cho TLS / SSL. Bạn tự động chuyển hướng tất cả lưu lượng trên cổng 80 đến điểm nhập websecure để buộc các kết nối an toàn cho tất cả các yêu cầu.
 Lưu ý ba dòng cuối cùng ở đây  cấu hình  dịch vụ , bật certResolver và  cấu hình  certResolver thành "lets-encrypt" certResolver "lets-encrypt" . Dịch vụ là bước cuối cùng để xác định nơi một yêu cầu cuối cùng được xử lý. Dịch vụ api@internal là một dịch vụ tích hợp nằm sau API mà bạn để lộ. Cũng giống như bộ định tuyến và phần mềm trung gian, các dịch vụ có thể được  cấu hình  trong file  này, nhưng bạn sẽ không cần phải làm điều đó để đạt được kết quả mong muốn.
 Tệp traefik_dynamic.toml đã hoàn thành của bạn sẽ giống như sau:
[http.middlewares.simpleAuth.basicAuth]   users = [     "admin:$apr1$ruca84Hq$mbjdMZBAG.KWn7vfN/SNK/"   ]  [http.routers.api]   rule = "Host(`your_domain`)"   entrypoints = ["websecure"]   middlewares = ["simpleAuth"]   service = "api@internal"   [http.routers.api.tls]     certResolver = "lets-encrypt" Lưu file và thoát khỏi editor .
Với các cấu hình này, bây giờ bạn sẽ bắt đầu Traefik.
Bước 2 - Chạy Traefik Container
Trong bước này, bạn sẽ tạo một mạng Docker để proxy chia sẻ với các containers . Sau đó, bạn sẽ truy cập vào console Traefik. Mạng Docker là cần thiết để bạn có thể sử dụng nó với các ứng dụng đang chạy bằng Docker Compose.
 Tạo một mạng Docker mới có tên là web :
- docker network create web 
Khi containers Traefik bắt đầu, bạn sẽ thêm nó vào mạng này. Sau đó, bạn có thể thêm các containers bổ sung vào mạng này sau đó để Traefik ủy quyền.
Tiếp theo, tạo một file trống chứa thông tin Let's Encrypt của bạn. Bạn sẽ chia sẻ nó vào containers để Traefik có thể sử dụng nó:
- touch acme.json 
Traefik sẽ chỉ có thể sử dụng file  này nếu  user  root bên trong containers  có quyền truy cập đọc và ghi duy nhất vào nó. Để thực hiện việc này, hãy khóa các quyền trên acme.json để chỉ chủ sở hữu của file  mới có quyền đọc và ghi.
- chmod 600 acme.json 
Khi file được chuyển đến Docker, chủ sở hữu sẽ tự động thay đổi thành user root bên trong containers .
Cuối cùng, tạo containers Traefik bằng lệnh này:
- docker run -d \ 
-   -v /var/run/docker.sock:/var/run/docker.sock \ 
-   -v $PWD/traefik.toml:/traefik.toml \ 
-   -v $PWD/traefik_dynamic.toml:/traefik_dynamic.toml \ 
-   -v $PWD/acme.json:/acme.json \ 
-   -p 80:80 \ 
-   -p 443:443 \ 
-   --network web \ 
-   --name traefik \ 
-   traefik:v2.2 
Lệnh này hơi dài. Hãy phá vỡ nó.
 Bạn sử dụng cờ -d để chạy containers  trong nền dưới dạng daemon. Sau đó, bạn chia sẻ file  docker.sock  của bạn  vào containers  để quy trình Traefik có thể lắng nghe các thay đổi đối với containers . Bạn cũng chia sẻ traefik.toml và traefik_dynamic.toml file cấu hình vào container, cũng như acme.json .
 Tiếp theo, bạn ánh xạ các cổng :80 và :443 của  server  lưu trữ Docker của bạn với các cổng giống nhau trong containers  Traefik để Traefik nhận tất cả  truy cập HTTP  và HTTPS đến  server .
 Bạn đặt mạng của các container để web , và bạn tên cho containers  traefik .
 Cuối cùng, bạn sử dụng hình ảnh traefik:v2.2 cho containers  này để bạn có thể  đảm bảo  bạn không chạy một version  hoàn toàn khác với hướng dẫn này được viết cho.
 ENTRYPOINT của  Docker image  là lệnh luôn chạy khi containers  được tạo từ hình ảnh . Trong trường hợp này, lệnh là binary  traefik trong containers . Bạn có thể chuyển các đối số bổ sung cho lệnh đó khi  chạy  containers , nhưng bạn đã  cấu hình  tất cả cài đặt  của bạn  trong file  traefik.toml .
 Khi containers  được khởi động, bây giờ bạn có một trang tổng quan mà bạn có thể truy cập để xem tình trạng của containers   của bạn . Bạn cũng có thể sử dụng console  này để trực quan hóa các bộ định tuyến, dịch vụ và phần mềm trung gian mà Traefik đã đăng ký. Bạn có thể cố gắng truy cập trang tổng quan giám sát bằng cách trỏ trình duyệt  của bạn  tới https://monitor. your_domain /dashboard/ (dấu / là bắt buộc).
Bạn sẽ được yêu cầu nhập tên user và password của bạn , đó là administrator và password bạn đã cấu hình ở Bước 1.
Sau khi đăng nhập, bạn sẽ thấy giao diện Traefik:
Bạn sẽ nhận thấy rằng đã có một số bộ định tuyến và dịch vụ được đăng ký, nhưng đó là những bộ định tuyến đi kèm với Traefik và cấu hình bộ định tuyến mà bạn đã viết cho API.
Đến đây bạn có proxy Traefik của bạn đang chạy và bạn đã cấu hình nó để hoạt động với Docker và giám sát các containers khác. Trong bước tiếp theo, bạn sẽ bắt đầu một số containers để Traefik làm proxy.
Bước 3 - Đăng ký containers với Traefik
Với containers Traefik đang chạy, bạn đã sẵn sàng chạy các ứng dụng đằng sau nó. Hãy chạy các containers sau Traefik:
- Một blog sử dụng hình ảnh WordPress chính thức .
- Server quản lý database sử dụng hình ảnh Adminer chính thức .
 Bạn sẽ quản lý cả hai ứng dụng này với Docker Compose bằng cách sử dụng file  docker-compose.yml .
 Tạo và mở file  docker-compose.yml trong  editor :
- nano docker-compose.yml 
Thêm các dòng sau vào file để chỉ định version và mạng bạn sẽ sử dụng:
version: "3"  networks:   web:     external: true   internal:     external: false Bạn sử dụng Docker Compose version  3 vì đây là version  chính mới nhất của định dạng file  Compose.
 Để Traefik nhận ra các ứng dụng của bạn, chúng phải là một phần của cùng một mạng và vì bạn đã tạo mạng theo cách thủ công, bạn kéo nó vào bằng cách chỉ định tên mạng của web và đặt external thành true . Sau đó, bạn xác định một mạng khác để bạn có thể kết nối các containers  được tiếp xúc với một containers  database  mà bạn sẽ không hiển thị thông qua Traefik. Bạn sẽ gọi mạng này là internal .
 Tiếp theo, bạn sẽ xác định từng services  của bạn , từng services một. Hãy bắt đầu với containers  blog , bạn sẽ dựa trên hình ảnh WordPress chính thức. Thêm cấu hình này vào cuối file :
...  services:   blog:     image: wordpress:4.9.8-apache     environment:       WORDPRESS_DB_PASSWORD:     labels:       - traefik.http.routers.blog.rule=Host(`blog.your_domain`)       - traefik.http.routers.blog.tls=true       - traefik.http.routers.blog.tls.certresolver=lets-encrypt       - traefik.port=80     networks:       - internal       - web     depends_on:       - mysql Khóa environment cho phép bạn chỉ định các biến môi trường sẽ được đặt bên trong containers . Bằng cách không đặt giá trị cho WORDPRESS_DB_PASSWORD , bạn đang yêu cầu Docker Compose lấy giá trị từ  shell  của bạn và chuyển nó qua khi bạn tạo containers . Bạn sẽ xác định biến môi trường này trong  shell   của bạn  trước khi bắt đầu các containers . Bằng cách này, bạn không đặt password  vào file  cấu hình.
 Phần labels là nơi bạn chỉ định các giá trị cấu hình cho Traefik. Các nhãn Docker không tự làm bất cứ điều gì, nhưng Traefik đọc những thứ này để biết cách xử lý containers . Đây là những gì mỗi nhãn này thực hiện:
-  traefik.http.routers.adminer.rule=Host(`blog. your_domain`)tạo ra một router mới cho container của bạn và sau đó xác định luật định tuyến sử dụng để xác định xem một yêu cầu phù hợp với container này.
-  traefik.routers. custom_name .tls=truechỉ định rằng bộ định tuyến này nên sử dụng TLS.
-  traefik.routers. custom_name .tls.certResolver=lets-encryptquy định cụ thể rằng giấy chứng nhận phân giải mà bạn đã tạo trước đó gọi làlets-encryptnên được sử dụng để có được một giấy chứng nhận cho tuyến đường này.
-  traefik.portchỉ định cổng tiếp xúc mà Traefik nên sử dụng để định tuyến lưu lượng truy cập đến containers này.
 Với cấu hình này, tất cả  truy cập được  gửi tới  server  lưu trữ Docker của bạn trên cổng 80 hoặc 443 với domain  blog. your_domain sẽ được chuyển đến containers  blog .
 Bạn chỉ định containers  này cho hai mạng khác nhau để Traefik có thể tìm thấy nó qua mạng web và nó có thể giao tiếp với containers  database  thông qua mạng internal .
 Cuối cùng, khóa depends_on nói với Docker Compose rằng containers  này cần bắt đầu sau khi các depends_on phụ thuộc của nó đang chạy. Vì WordPress cần một database  để chạy, bạn phải chạy containers  mysql trước khi bắt đầu containers  blog của blog .
Tiếp theo, cấu hình dịch vụ MySQL:
services: ...   mysql:     image: mysql:5.7     environment:       MYSQL_ROOT_PASSWORD:     networks:       - internal     labels:       - traefik.enable=false Bạn đang sử dụng hình ảnh MySQL 5.7 chính thức cho containers  này. Bạn sẽ nhận thấy rằng    bạn đang sử dụng một mục environment không có giá trị. Các MYSQL_ROOT_PASSWORD và WORDPRESS_DB_PASSWORD  cần  được đặt thành cùng một giá trị  đảm bảo  rằng containers  WordPress của bạn có thể giao tiếp với MySQL. Bạn không muốn hiển thị containers  mysql với Traefik hoặc thế giới bên ngoài, vì vậy bạn chỉ gán containers  này cho mạng internal . Vì Traefik có quyền truy cập vào Docker socket, theo mặc định, quy trình sẽ vẫn hiển thị một bộ định tuyến cho containers  mysql , vì vậy bạn sẽ thêm nhãn traefik.enable=false để chỉ định rằng Traefik sẽ không để lộ containers  này.
Cuối cùng, xác định containers Adminer:
services: ...   adminer:     image: adminer:4.6.3-standalone     labels:       - traefik.http.routers.adminer.rule=Host(`db-admin.your_domain`)       - traefik.http.routers.adminer.tls=true       - traefik.http.routers.adminer.tls.certresolver=lets-encrypt       - traefik.port=8080     networks:       - internal       - web     depends_on:       - mysql Vùng chứa này dựa trên hình ảnh Adminer chính thức. Cấu hình network và depends_on cho containers  này khớp chính xác với những gì bạn đang sử dụng cho containers  blog .
 Dòng traefik.http.routers.adminer.rule=Host( ` db-admin. your_domain ` ) kể Traefik để kiểm tra  server  yêu cầu. Nếu nó  trùng với  mẫu của db-admin. your_domain , Traefik sẽ định tuyến lưu lượng truy cập đến containers  adminer qua cổng 8080 .
 Tệp docker-compose.yml đã hoàn thành của bạn sẽ trông giống như sau:
version: "3"  networks:   web:     external: true   internal:     external: false  services:   blog:     image: wordpress:4.9.8-apache     environment:       WORDPRESS_DB_PASSWORD:     labels:       - traefik.http.routers.blog.rule=Host(`blog.your_domain`)       - traefik.http.routers.blog.tls=true       - traefik.http.routers.blog.tls.certresolver=lets-encrypt       - traefik.port=80     networks:       - internal       - web     depends_on:       - mysql    mysql:     image: mysql:5.7     environment:       MYSQL_ROOT_PASSWORD:     networks:       - internal     labels:       - traefik.enable=false    adminer:     image: adminer:4.6.3-standalone     labels:     labels:       - traefik.http.routers.adminer.rule=Host(`db-admin.your_domain`)       - traefik.http.routers.adminer.tls=true       - traefik.http.routers.adminer.tls.certresolver=lets-encrypt       - traefik.port=8080     networks:       - internal       - web     depends_on:       - mysql Lưu file và thoát khỏi editor .
 Tiếp theo, đặt giá trị trong  shell  của bạn cho các WORDPRESS_DB_PASSWORD và MYSQL_ROOT_PASSWORD :
- export WORDPRESS_DB_PASSWORD=secure_database_password 
- export MYSQL_ROOT_PASSWORD=secure_database_password 
Thay thế secure_database_password bằng password  database  mong muốn của bạn. Hãy nhớ sử dụng cùng một password  cho cả WORDPRESS_DB_PASSWORD và MYSQL_ROOT_PASSWORD .
 Với các biến này đã được đặt, hãy chạy các containers  bằng cách sử dụng docker-compose :
- docker-compose up -d 
Bây giờ hãy xem trang tổng quan quản trị Traefik trong khi nó được điền.
 Nếu bạn khám phá phần Bộ định tuyến , bạn sẽ tìm thấy bộ định tuyến cho adminer và blog  cấu hình  bằng TLS: 
 Điều hướng đến blog. your_domain , thay thế your_domain bằng domain  của bạn. Bạn sẽ được chuyển hướng đến kết nối TLS và bây giờ bạn có thể hoàn tất  cài đặt  WordPress: 
 Bây giờ truy cập Adminer bằng cách truy cập db-admin. your_domain trong trình duyệt của bạn, lại thay thế your_domain bằng domain  của bạn. Vùng chứa mysql không được tiếp xúc với thế giới bên ngoài, nhưng containers  adminer có quyền truy cập vào nó thông qua mạng Docker internal mà chúng chia sẻ bằng cách sử dụng tên containers  mysql làm tên  server .
 Trên màn hình đăng nhập Adminer, nhập root cho Tên  user  , nhập mysql cho  Server  và nhập giá trị bạn đặt cho MYSQL_ROOT_PASSWORD cho Mật khẩu . Để trống  Database  . Bây giờ nhấn Đăng nhập .
Sau khi đăng nhập, bạn sẽ thấy giao diện user Adminer.
 Cả hai trang web hiện đang hoạt động và bạn có thể sử dụng console  tại monitor. your_domain để theo dõi các ứng dụng của bạn.
Kết luận
Trong hướng dẫn này, bạn đã cấu hình Traefik v2 cho các yêu cầu proxy tới các ứng dụng khác trong containers Docker.
 Cấu hình khai báo của Traefik ở cấp containers  ứng dụng giúp bạn dễ dàng  cấu hình  nhiều dịch vụ hơn và không cần khởi động lại containers  traefik khi bạn thêm ứng dụng mới vào lưu lượng proxy vì Traefik nhận thấy các thay đổi ngay lập tức thông qua file  socket Docker mà nó đang theo dõi.
Để tìm hiểu thêm về những gì bạn có thể làm với Traefik v2, hãy xem tài liệu Traefik chính thức .
Các tin liên quan
Cách sử dụng Traefik làm Reverse Proxy cho Docker Containers trên Ubuntu 20.042020-10-27
Cách sử dụng Traefik làm Reverse Proxy cho Docker Containers trên Ubuntu 18.04
2020-10-27
Cách tự động hóa thiết lập Jenkins với cấu hình Docker và Jenkins dưới dạng mã
2020-09-29
Cách phát triển trang web Drupal 9 trên máy cục bộ của bạn bằng Docker và DDEV
2020-08-12
Cách truy cập từ xa các ứng dụng GUI bằng Docker và Caddy trên Ubuntu 18.04
2020-08-07
Cách truy cập từ xa các ứng dụng GUI bằng Docker và Caddy trên Debian 10
2020-08-07
Cách truy cập từ xa các ứng dụng GUI bằng Docker và Caddy trên Debian 9
2020-08-07
Cách loại bỏ image Docker, container và khối lượng
2020-08-06
Cách truy cập từ xa các ứng dụng GUI bằng Docker và Caddy trên Ubuntu 20.04
2020-08-04
Cách mở rộng và bảo mật một ứng dụng Django với Docker, Nginx và Let's Encrypt
2020-07-10
 

