乐趣区

关于ubuntu:如何在-Ubuntu-2004-系统中设置-Traefik-代理容器

Traefik 是一种为 docker 容器建设反向代理的古代办法。当您心愿在 docker 容器中运行多个应用程序,并公开端口 80 和 443 时,traefik 可能是反向代理的最佳抉择。Traefik 提供了本人的监控仪表板。您还能够将 Traefik 用于 HTTP 负载均衡器。在本文中,咱们将通过一个简略的示例在 Ubuntu 20.04 上装置 Traefik v2.4。

先决条件

  • Ubuntu 20.04 LTS
  • Docker CE (Community Edition)
  • Internet connection to download packages
  • Sudo Privileged user account
  • A domain for traefik dashboard [Should be maintained A record]
  • A domain for wordpress site [Should be maintained A record]

在本文中,咱们应用的是 linuxtechi.local 作为域名,traefik.linuxtech .local 作为 Traefik dashboard 的 FQDN。

Ubuntu 20.04 上设置 Traefik 的步骤

在本文中,首先咱们将设置 Traefik,而后将 Wodresspress 容器注册到 Traefik,以进行反向代理和负载平衡。咱们将应用 Let’s Encrypt SSL 证书配置 Traefik,以通过 HTTPS 提供所有内容。

(1) 配置 Traefik

创立一个配置文件,并设置拜访 traefik 仪表板的加密明码。您能够应用 htpasswd 实用程序创立加密的明码。要应用 htpasswd 实用程序,请应用以下命令装置。

$ sudo apt-get install -y apache2-utils

装置实现后,运行以下命令生成加密的明码。在本例中,我应用 [email protected]# 进行加密。你能够有本人的假如。用户为 admin,您能够用本人的用户名替换它。

$ htpasswd -nb admin [email protected]#

您将失去加密的明码,如下所示

[email protected]:~$ htpasswd -nb admin [email protected]#
admin:$apr1$V.9MT9VH$MtLgwiAa4jq1ngDVvTdJu/
[email protected]:~$

复制此输入并将其保留在某处,因为咱们须要在 Traefik 配置文件中应用此加密明码来为 Traefik 仪表板设置根本身份验证。

当初创立一个名为 traefik.toml 的配置文件,应用 toml 格局。咱们将应用 Traefik 的三个提供者,即 api、docker 和 acme。Acme 提供 let’s encrypt TLS 证书。

创立一个 traefik.toml 文件,蕴含以下内容

$ vi traefik.toml
[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 = "[email protected]"
  storage = "acme.json"
  [certificatesResolvers.lets-encrypt.acme.tlsChallenge]

[providers.docker]
  watch = true
  network = "web"

[providers.file]
  filename = "traefik_secure.toml"

保留并且敞开文件

在下面的文件入口点 web 解决 80 端口,websecure 解决 443 端口 (SSL / TLS 连贯)

所有 80 端口的流量被强制重定向到 websecure 入口点,以确保连贯平安。不要遗记更改上述文件 traefik 中的电子邮件和域名。

让咱们创立另一个文件 traefik_secure.toml,蕴含以下内容

$ vi traefik_secure.toml
[http.middlewares.simpleAuth.basicAuth]
  users = ["admin:$apr1$V.9MT9VH$MtLgwiAa4jq1ngDVvTdJu/"]

[http.routers.api]
  rule = "Host(`traefik.linuxtechi.local`)"
  entrypoints = ["websecure"]
  middlewares = ["simpleAuth"]
  service = "[email protected]"
  [http.routers.api.tls]
    certResolver = "lets-encrypt"

保留并退出文件

不要遗记更改下面文件中管理员用户和主机条目标明码字符串,以适宜您的设置。

(2) 运行 traefik 容器

为代理创立新的 docker 网络,以便在容器之间共享。应用以下命令创立 docker 网络。

$ docker network create web

启动 traefik 容器时,将该容器增加到此网络。您能够向该网络增加其余容器,以便 Traefik 作为反向代理工作。

创立一个空文件,保留 Let’s encrypt 信息,并相应地批改权限。

$ touch acme.json
$ chmod 600 acme.json

一旦这个 json 文件挪动到 docker 容器,所有权将主动更改为 root

应用以下命令创立一个 traefik 容器

$ docker run -d \
   -v /var/run/docker.sock:/var/run/docker.sock \
   -v $PWD/traefik.toml:/traefik.toml \
   -v $PWD/traefik_secure.toml:/traefik_secure.toml \
   -v $PWD/acme.json:/acme.json \
   -p 80:80 \
   -p 443:443 \
   --network web \
   --name traefik \
    traefik:v2.4

当初,您能够拜访 Traefik 仪表板以监督容器的衰弱状态。拜访 https://your_domain.com/dashb…,就本例而言,URL 将是:

https://traefik.linuxtechi.lo…

登录到仪表板后,您将看到以下界面

(3) 增加容器到 Traefik

您曾经配置了运行在服务器上的 Traefik。在这一步中,我将增加一个 WordPress 容器到 Traefik 代理。WordPress 容器将由 Docker Compose 治理。

让咱们创立一个 docker-compose.yml 文件,蕴含以下内容

$ vi docker-compose.yml

要指定咱们将应用的版本和网络,请向文件中增加以下行

version: "3"
networks:
  web:
    external: true
  internal:
    external: false

我应用版本 3,因为它是 Docker Compose 的最新版本。Traefik 只有在应用程序属于同一网络的状况下才会辨认它们。在后面的步骤中,我曾经用网络名 web 手动创立了 docker 网络,所以我曾经在 docker-compose.yml 中蕴含了这个网络,并将其公开给内部 traefik 代理。我曾经定义了另一个网络来连贯咱们的应用程序与数据库容器,不须要通过 traefik 公开。

当初定义每个服务。先为 WordPress 应用程序创立一个服务。在 docker-compose.yml 中增加以下行

services:
  wordpress:
    image: wordpress:latest
    environment:
      WORDPRESS_DB_HOST: mysql:3306
      WORDPRESS_DB_USER: dbuser
      WORDPRESS_DB_PASSWORD: [email protected]#
      WORDPRESS_DB_NAME: wordpress_db
    labels:
      - traefik.http.routers.blog.rule=Host(`blog.linuxtechi.local`)
      - traefik.http.routers.blog.tls=true
      - traefik.http.routers.blog.tls.certresolver=lets-encrypt
      - traefik.port=80
    networks:
      - internal
      - web
    depends_on:
      - mysql

我曾经应用了 traefik.port = 80,Traefik 将应用此端口将流量路由到 WordPress 容器。

将 Host: blog.linuxtechi.com 替换为您本人的站点域名

当初,配置 MySQL 服务,将以下行增加到 docker-compose.yml 的底部

mysql:
  image: mysql:latest
  environment:
    MYSQL_ROOT_PASSWORD: [email protected]#
    MYSQL_DATABASE: wordpress_db
    MYSQL_USER: dbuser
    MYSQL_PASSWORD: [email protected]#
  networks:
    - internal
  labels:
    - traefik.enable=false

在此示例中,我为数据库容器应用了 MySQL 的最新镜像。Wordress 和 MySQL 服务的环境变量已在文件自身中定义。应用 Traefik 的代理不须要 MySQL 服务,因而我仅应用了外部网络。

残缺的 Docker-compose.yml 文件看起来像:

version: "3"
networks:
  web:
    external: true
  internal:
    external: false
services:
  wordpress:
    image: wordpress:latest
    environment:
      WORDPRESS_DB_HOST: mysql:3306
      WORDPRESS_DB_USER: dbuser
      WORDPRESS_DB_PASSWORD: [email protected]#
      WORDPRESS_DB_NAME: wordpress_db
    labels:
      - traefik.http.routers.blog.rule=Host(`blog.linuxtechi.local`)
      - 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:latest
    environment:
      MYSQL_ROOT_PASSWORD: [email protected]#
      MYSQL_DATABASE: wordpress_db
      MYSQL_USER: dbuser
      MYSQL_PASSWORD: [email protected]#
    networks:
      - internal
    labels:
      - traefik.enable=false

保留文件并退出文件

运行以下命令来创立 MySQL 和 wordpress 容器

$ docker-compose up -d

当初导航到 Traefik 仪表板并单击 HTTP 路由器,您将发现仪表板中增加了新的容器。

Now use the url blog.linuxtechi.local [Replace with your domain]. You will be redirected to WordPress installation wizard with TLS connection.

当初应用 url blog.linuxtech .local (替换为您的域名),您将被重定向到应用 TLS 连贯的 WordPress 装置向导。

实现装置向导。当初您能够应用您的 WordPress 站点了。

我的开源我的项目

  • course-tencent-cloud(酷瓜云课堂 – gitee 仓库)
  • course-tencent-cloud(酷瓜云课堂 – github 仓库)
退出移动版