问题描述
在使用 Traefik 进行反向代理时,遇到了使用自签名证书而不是 Let’s Encrypt 证书的问题。他在 docker-compose 文件中配置了 Traefik,并希望能够使用 Let’s Encrypt 证书来提供 HTTPS 服务。
解决方案
请注意以下操作可能因版本差异而有所变化,确保在操作前备份相关配置文件。
为了解决这个问题,你需要配置 Traefik 以使用 Let’s Encrypt 提供的证书而不是默认的自签名证书。以下是解决方案的步骤:
步骤1:更新 Traefik 配置文件
- 打开你的
traefik.yml
配置文件。 - 在
certificatesResolvers
部分中,确保你使用了正确的邮箱地址和存储配置。你应该使用有效的邮箱地址来接收 Let’s Encrypt 的通知,并且配置正确的存储路径。 - 确保
tlsChallenge
部分存在,以便让 Traefik 使用 TLS 验证方式获取 Let’s Encrypt 证书。如果没有,请添加以下内容:
yaml
certificatesResolvers:
resolver:
acme:
email: mail@example.com
storage: acme.json
tlsChallenge: {} - 保存并关闭文件。
步骤2:更新服务标签
- 打开你的
docker-compose.yml
文件。 - 对于使用 Let’s Encrypt 证书的服务,确保你的标签中包含以下配置:
traefik.http.routers.<service_name>.tls=true
traefik.http.routers.<service_name>.tls.certresolver=resolver
将 <service_name>
替换为你的服务名称。
例如,如果你的服务名称是 gitea
,则对应的标签可能如下所示:
yaml
labels:
- "traefik.http.routers.gitea.rule=Host(`gitea.example.com`)"
- "traefik.http.routers.gitea.entrypoints=websecure"
- "traefik.http.routers.gitea.tls=true"
- "traefik.http.routers.gitea.tls.certresolver=resolver"
- 对于需要配置 Let’s Encrypt 域名的服务,确保你设置了以下标签:
traefik.http.routers.<service_name>.tls.domains.main=<your_domain>
traefik.http.routers.<service_name>.tls.domains.sans=*.<your_domain>
将 <service_name>
替换为你的服务名称,将 <your_domain>
替换为你的域名。
例如,如果你的服务名称是 registry
,且你的域名是 example.com
,则对应的标签可能如下所示:
yaml
labels:
- "traefik.http.routers.registry.tls.domains.main=example.com"
- "traefik.http.routers.registry.tls.domains.sans=*.example.com"
- 保存并关闭文件。
步骤3:重新启动 Traefik 和服务
- 打开终端,并进入存放
docker-compose.yml
文件的目录。 - 运行以下命令以重新启动 Traefik 和你的服务:
sh
docker-compose down
docker-compose up -d
步骤4:验证证书
- 打开浏览器,并访问你配置了 Let’s Encrypt 证书的服务的域名(比如
https://gitea.example.com
)。 - 检查浏览器的地址栏是否显示安全标志,证明 Let’s Encrypt 证书已成功应用。
通过以上步骤,你应该能够让 Traefik 使用 Let’s Encrypt 提供的证书来提供 HTTPS 服务,而不再使用默认的自签名证书。
请注意,Let’s Encrypt 证书需要在域名解析生效后才能正常获取。如果证书获取失败,请检查域名解析是否正确设置。
注意:以上步骤是基于你提供的配置和信息进行的。如果你的配置存在差异,需要根据实际情况进行调整。