type
status
date
slug
summary
tags
category
icon
password
😀
本文提供Unraid Docker和Docker-Compose两种不同的安装过程。
示例的配置文件仅供docker初始安装使用,咱先跑起来,在后续篇章中会不断增加和完善配置。
 

💿 Traefik安装

一、创建容器网络

首先我们需要创建一个docker网络proxy,后续所有需要反代的容器都放在这个网络里面。
notion image

二.安装dockersocket(可选)

dockersocket是 Docker Socket 的安全增强代理,它限制了docker.sock的写权限,使traefik能够检索其他容器的信息(只读访问),但无法通过docker API启动其它容器或运行任何命令。
允许容器直接访问 docker.sock 是不安全的,可能会使您的系统容易受到攻击。请阅读以下帖子,详细了解与 docker 容器共享 docker.sock 的漏洞以及它如何危害您的服务器。
暴露docker.sock的危险
安装dockersocket时唯一需要更改的配置:
  • 更改网络类型为我们前面创建的网络proxy
💡
注意
如果你使用dockersocket,请注意traefik.yml配置文件的"provider"部分中,有一行需要取消注释。

三、安装traefik

💡
在Unraid中,我们使用/mnt/user/appdata/traefik 作为traefik的数据卷;
在docker-compose中,我们使用/opt/appdata/traefik 作为traefik的数据卷。
本文主要以Unraid为例,实际部署中我们可以按需求更改路径。

acme.json 文件

Traefik 需要一个名为 acme.json 的文件来存储 SSL 证书信息,这需要是安全的。因此,我们将创建一个空文件并更改权限。如果你的应用数据保存在另一个位置,更改路径就行。

必须的配置文件

Traefik的启动需要traefik.yml这个配置文件,在这个配置文件中我们指定fileConfig.yml作为动态配置文件,动态配置文件的修改会被traefik监控并自动加载, 这意味着不需要重启traefik服务就可以使配置修改生效。
💡
在配置文件中,替换所有的YOURDOMAIN.COMYOUR@EMAIL.COM 为你的实际信息。
对配置文件内容有任何疑问请查看文末的配置文件说明
编辑文件 /mnt/user/appdata/traefik/traefik.yml,模板如下:
traefik.yml example
编辑文件 /mnt/user/appdata/traefik/fileConfig.yml,模板如下:
fileconfig.yml V3.X example
fileconfig.yml V2.X example

安装Traefik

使用Unraid Docker
  1. 为了易于从内网访问,需要将traefik添加到ipvlanmacvlan的自定义桥接网络,在Unraid中的接口名一般为br0,可以在设置->Docker->高级视图中配置。为此我们需要添加一条发布参数:&& docker network connect --ip <本地IP> br0 traefik
    1. 示例如下图:
      notion image
      这条命令会在容器创建成功后,给名为traefik的容器分配一个本地IP,有了这个ip就可以从本地局域网中直接访问traefik。
  1. 更改网络类型为我们前面创建的网络proxy
    1. notion image
  1. 获取 API-Token并修改CF_DNS_API_TOKEN的值。
    1. notion image
  1. 设置Traefik dashboard URL的子域名,替换YOURDOMAIN.COM为你的域名。
    1. notion image
  1. 新建变量DOCKER_HOST,值为dockersocket的容器名称,默认也就是dockersocket
    1. notion image
  1. 在路由器或本地主机的hosts中设置traefik.YOURDOMAIN.COM的解析地址。
    1. notion image
  1. 创建容器,访问https://traefik.YOURDOMAIN.COM,就可以看到dashboard了。
使用Docker-Compose
创建docker-compose文件/opt/appdata/traefik/docker-compose.yml
启动容器:

四、代理你的第一个应用

在某个应用程序上启用 Traefik 并允许它代理 Web UI ,我们必须简单地为 Traefik 设置一个标签(labels)。标签是一种将元数据应用于 Docker 对象的机制。Traefik 能够获取此元数据,并使用它来配置自身。此标签将告诉 Traefik 我们要反向代理要添加到的应用程序。
traefik.enable: true 告诉 traefik 您要代理此应用,
traefik.http.routers.APP-NAME.entryPoints: https 仅允许通过 HTTPS 代理应用。
💡
必须将APP-NAME替换为要添加此标签的应用程序的名称,否则 Traefik 将看到重复项。

示例:

下面使用traefik/whoami为例
Unraid
1.安装whoami容器
notion image
从DockerHub中找到whoami镜像
notion image
点击安装,注意选择网络类型,端口号随便填一个未被占用的。
notion image
2.告诉 traefik 您要代理此应用
单击“添加另一个路径、端口、变量、标签或设备”。选择添加标签并按照下面的截图填写字段。
notion image
3.只允许通过 HTTPS 代理应用程序。
再添加一个标签,指定程序的entrypoints。
notion image
Docker-Compose

五、通过域名访问应用

完成上面的设置后,Traefik 现在将选择该应用程序希望通过反向代理进行路由,并应自动为您设置。它也只会通过HTTPS代理应用程序,并避免任何可能的漏洞或允许通过HTTP代理应用程序。现在,当您部署应用程序时,您将能够通过应用程序名称作为子域 (APP-NAME.DOMAIN.COM) 的域来访问它,例如:https://whoami.YOURDOMAIN.COM

🗒️ 配置文件说明

Traefik.yml

在启动时,Traefik 会查找一个名为 Traefik.yml 的文件。这是用于设置 Traefik 的第一个关键配置文件。此文件告诉它任何其他文件可能在哪里、要使用的域以及如何获取它们的证书。这是一个静态文件,这意味着对此文件的任何更改都需要重新启动 Traefik 才能应用这些更改。
这里查看更多信息.

进入点(EntryPoints)

EntryPoint 是 Traefik 的网络入口点。它们定义接收数据包的端口,以及是否侦听 TCP 或 UDP。这个配置基本上告诉 Traefik 在哪里以及如何接受传入连接。对于 HTTP 传入请求,我们告诉 Traefik 在默认端口80上接受它们。另外我们还添加了一个重定向规则,在默认情况下将其转发到 HTTPS EntryPoint。
在本节中添加的所有 Cloudflare 的 IP 范围都是可信 IP。使用 forwardHeader: 和 trust dIPs: 参数,这将允许 HTTP 请求通过 Traefik 转发其真正的 IP。
💡
注意-Cloudflare IP 配置中的 Cloudflare IP 可能并不总是最新的。你需要访问这里获取最新的IP列表。
也可以使用以下命令快速获取配置文本(需要安装yq)
 
接下来,我们告诉 Traefik 在默认端口 443 上接受 HTTPS 请求。对于HTTPS请求,我们将需要有效的证书。在此配置中,我们告诉 Traefik 使用 lets encrypt 来制作证书,我们还告诉 Traefik 不仅要为根域创建这些证书,还要使用通配符变量为所有子域创建这些证书。
对于所有 HTTPS 请求,我们能够设置一些默认使用的中间件。在我们的示例中,我们将只使用一个用于安全头文件(securityHeader@file)。如果您希望在默认情况下为所有请求加载任何其他中间件,您将在这里添加它们。例如,您可以将 Authelia 中间件(auth@file)添加到这个位置,然后每个请求都将首先发送给 Authelia。

提供器(Providers)

Traefik通过Providers实现配置发现,当Traefik检测到更改时,它会动态更新路由。
File provider定义一个动态配置文件,这会告诉Traefik查看另一个文件以获取更多设置,当设置了watch: true,Traefik会监视此文件的更改,实现实时更新配置。

fileConfig.yml

这是一个动态配置文件,这意味着如果我们对文件进行任何更改,Traefik 将获取并自动加载它们。我们将使用此文件来管理所有中间件,并添加任何外部服务,如虚拟机或其他主机上的服务等。在下面的示例中,我们将添加Homeassistant。

路由和服务(Routers & Services)

路由器负责将传入请求连接到能够处理它们的服务。在这个过程中,路由器可以使用中间件来更新请求,或者在将请求转发到服务之前采取行动。
服务负责配置如何到达最终将处理传入请求的实际服务。 要添加一个外部应用程序,我们需要给 Traefik 一个路由器,它告诉 Traefik 如何路由请求以及沿途使用哪个中间件,然后一个匹配服务告诉 Traefik 请求指向哪里。
 

中间件(Middleware)

Traefik 中的中间件,有些可以修改请求、标头,有些负责重定向,有些添加身份验证等等。
使用相同协议的中间件可以组合成链以适应每种方案
可以在此处找到 HTTP 中间件的列表。
可以在此处找到 TCP 中间件列表。
 

🤗 总结归纳

本文介绍了Traefik的安装和配置。由于不同的使用场景和需求,Traefik的配置可能因人而异,但本文提供的配置适用于大多数情况。
希望这篇文章能够帮助您开始使用Traefik并构建一个安全、可靠的Web应用程序。如果您有任何疑问或建议,请在评论中告诉交流。

📎 参考文章

 
💡
有关安装或者使用上的问题,欢迎您在底部评论区留言,一起交流~
 
Traefik篇四:中间件AutheliaTraefik 篇二:前期准备
Loading...