具有安全仪表板和 Let's Encrypt 的 Traefik docker-compose 配置
此配置仅提供让 Traefik 仪表板在 Let’s Encrypt 驱动的 SSL 加密和用户认证下运行的最小配置。它还将所有 HTTP 请求重定向到 HTTPS,以避免不安全地访问仪表板和其他服务。
Let’s Encrypt 使用 HTTP-01 挑战。这意味着 Traefik 必须可以从互联网通过端口 80 访问。
为了安装 docker 和 docker-compose,请参见如何在 30 秒内在 Ubuntu 上安装 docker 和 docker-compose。
首先准备目录(/var/lib/traefik):
sudo mkdir /var/lib/traefik
sudo chown -R $USER: /var/lib/traefik
cd /var/lib/traefik
mkdir acme conf现在创建 docker-compose.yml:
services:
traefik:
image: "traefik:v2.3"
container_name: "traefik"
command:
- "--api=true"
ports:
- "80:80"
- "443:443"
- "8080:8080"
volumes:
- "/var/run/docker.sock:/var/run/docker.sock:ro"
- "./acme:/etc/traefik/acme"
- "./traefik.toml:/etc/traefik/traefik.toml"
- "./conf:/etc/traefik/conf"现在创建主 traefik.toml 配置文件:
defaultEntryPoints = ["http", "https"]
[api]
dashboard = true
# 你可以在 /var/lib/traefik/traefik.conf 中创建配置文件,Traefik 将自动重新加载它们
[providers]
[providers.file]
directory = "/etc/traefik/conf/"
watch = true
# 如果你不需要那么多调试输出,将此更改为 INFO
[log]
level = "DEBUG"
[entryPoints.web]
address = ":80"
[entryPoints.web.http]
[entryPoints.web.http.redirections]
[entryPoints.web.http.redirections.entryPoint]
to = "websecure"
scheme = "https"
[entryPoints.websecure]
address = ":443"
[certificatesResolvers.letsencrypttls.acme]
# TODO 在此处添加你的邮箱
email = "[email protected]"
storage = "/etc/traefik/acme/acme.json"
[certificatesResolvers.letsencrypttls.acme.httpChallenge]
entryPoint = "web"现在我们需要在 conf/api.toml 中创建 API 配置文件:
[http.routers.traefik-api]
# TODO: 在此处设置你的域名!!!
rule = "Host(`traefik.example.com`)"
service = "api@internal"
middlewares = ["auth"]
[http.routers.traefik-api.tls]
certresolver = "letsencrypttls"
[http.middlewares.auth.basicAuth]
# TODO 在此处添加你的管理员用户和密码,例如使用 https://wtools.io/generate-htpasswd-online 生成
users = [
"admin:$1$ySFBr~_y$GsKgEasDQkpCX8sO8vNia0",
]不要忘记更改配置文件中的邮箱地址和域名(由 TODO 标记)。确保你已正确设置所有 DNS 记录,以便你的域名指向运行 Traefik 的服务器!
现在是首次启动 Traefik 的时候了:
docker-compose upTraefik 将需要几秒钟自动为你的域名生成 Let’s Encrypt 证书。一旦你看到类似这样的消息
traefik | time="2020-09-20T23:48:30Z" level=debug msg="Certificates obtained for domains [traefik.mydomain.com]" providerName=letsencrypttls.acme routerName=traefik-api@file rule="Host(`traefik.mydomain.com`)"证书即可用并自动加载。
现在你可以访问 https://traefik.mydomain.com/,使用你生成的用户名和密码登录并查看仪表板。

如果需要,你还可以设置 systemd 服务以在开机时自动启动 Traefik(使用 docker-compose systemd .service 生成器 生成)。为此,首先如果你仍然打开终端,使用 Ctrl-C 停止正在运行的 docker-compose 实例并运行 docker-compose down。
现在将此添加为 /etc/systemd/system/traefik.service:
[Unit]
Description=traefik
Requires=docker.service
After=docker.service
[Service]
Restart=always
User=root
Group=docker
WorkingDirectory=/var/lib/traefik
# 单元停止时关闭容器(如果正在运行)
ExecStartPre=/usr/local/bin/docker-compose -f docker-compose.yml down -v
# 单元启动时启动容器
ExecStart=/usr/local/bin/docker-compose -f docker-compose.yml up
# 单元停止时停止容器
ExecStop=/usr/local/bin/docker-compose -f docker-compose.yml down -v
[Install]
WantedBy=multi-user.target并运行
sudo systemctl enable traefik.service
sudo systemctl start traefik.service