我正在尝试使用 traeffik 设置 letsEncrypt,但无论我做什么,它似乎都不起作用。目前我收到以下错误:
其他 SO 帖子提到这可能是由于没有使用 traeffik ( Traefik will issue certificate instead of Let's encrypt ) 的 http 挑战,但我正在使用它,所以老实说我不知道(这不能解决问题 - 不要关闭)。我的配置文件看起来很小,但我没有收到任何错误反馈,所以我在休息时迭代的能力很小。如果有人可以就如何解决此问题提供任何帮助,我将不胜感激 - 我已经这样做了一段时间,但我不知道该怎么做。
我使用这个小的 bash 脚本启动了以下三个文件:
root@ubuntu-1gb-nyc3-01:/lowteck# cat ./runSwarm.sh
#!/bin/bash
./buildandpush.sh
cd ./back
./buildandpush.sh
cd ..
docker volume prune -f
docker kill $(docker ps -q)
docker rm $(docker ps -a -q)
docker swarm init \
--advertise-addr 104.236.214.151
docker network create -d overlay --attachable proxy
docker stack deploy --compose-file=stage.yaml prod2
docker stack deploy --compose-file=traefik.yaml prodTraefik
这是我的traefik.toml
:
root@ubuntu-1gb-nyc3-01:/lowteck# cat traefik.toml
logLevel = "DEBUG"
defaultEntryPoints = ["http", "https"]
[web]
[entryPoints]
[entryPoints.http]
address = ":80"
[entryPoints.http.forwardedHeaders]
trustedIPs = ["104.236.214.151"]
[entryPoints.https]
address = ":443"
[entryPoints.https.tls]
[acme]
caServer = "https://acme-v02.api.letsencrypt.org/directory"
email = "pweyand@gmail.com"
storage = "acme.json"
entryPoint = "https"
onHostRule = true
[acme.httpChallenge]
entryPoint = "http"
[[acme.domains]]
main = "lowteck.com"
sans = ["www.lowteck.com"]
[docker]
domain = "traefik"
watch = true
swarmmode = true
network="web"
这是我的traefik.yaml
:
root@ubuntu-1gb-nyc3-01:/lowteck# cat traefik.yaml
version: '3.3'
networks:
proxy:
external: true
configs:
traefik.toml:
file: ./traefik.toml
services:
traefik:
image: traefik
ports:
- "80:80"
- "8080:8080"
- "443:443"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
configs:
- source: traefik.toml
target: /etc/traefik/traefik.toml
labels:
- "traefik.enable=false"
networks:
- proxy
deploy:
replicas: 1
placement:
constraints: [node.role == manager]
这是我的stage.yaml
:
root@ubuntu-1gb-nyc3-01:/lowteck# cat stage.yaml
version: "3.3"
networks:
default:
external: false
proxy:
external: true
services:
back:
image: patientplatypus/lowtechback:latest
ports:
- '5000:5000'
networks:
- proxy
- default
deploy:
replicas: 1
restart_policy:
condition: on-failure
max_attempts: 5
window: 120s
labels:
- "traefik.docker.backend=back"
- "traefik.port=5000"
- "traefik.frontend.rule=Host:back.lowteck.com"
- "traefik.docker.network=proxy"
front:
image: patientplatypus/lowtechfront:latest
ports:
- '3000:3000'
networks:
- proxy
- default
depends_on:
- back
deploy:
replicas: 1
restart_policy:
condition: on-failure
max_attempts: 5
window: 120s
labels:
- "traefik.docker.backend=front"
- "traefik.port=3000"
- "traefik.frontend.rule=Host:104.236.214.151, lowteck.com, www.lowteck.com, zennify.me"
- "traefik.docker.network=proxy"
同样,我已经在这方面工作了一段时间,而且我基本上没有可以继续进行的错误代码。如果有人有任何建议,请告诉我。
编辑:
我在注销 traefik pod 后发现错误 - 即我需要:
[[acme.domains]]
main = "lowteck.com"
sans = ["www.lowteck.com", "back.lowteck.com"]
然而,这并没有解决 https 问题,尽管 traefik 容器的日志现在是清晰的。您可以在此处查看完整的日志输出:https://gist.github.com/patientplatypus/8a40e12c6ba64cdc7d2bf88581967057 .
最佳答案
所以我终于解决了这个问题,我想向遇到此问题的任何人指出一些有用的事情。
1) 您应该使用 docker service logs YOURTRAEFFICPOD
记录您的 traefik pod 以获取任何和所有错误以进行调试。出于某种原因,我没有想到这一点(愚蠢)。
2) acme sans 部分不是由 pod 定义的,而是由域的 A 记录中的内容定义的。如果它不在 A 记录中,请不要将其放在那里 - 这将作为错误显示在日志中。
3) 确保您使用的是最新版本的 traefik - 在我的例子中,我不得不通过更改 traefik.toml
将 traefik 版本更改为 1.7.9 以包含 行图片:traefik:v1.7.9
4) 如果您正在使用 http 挑战,您的 acme.json 文件将并且应该为空 - 所以不要担心这个。
5) 最后,如果您得到的错误是您已经超过了来自 letsEncrypt 的域的最大证书请求数量,这实际上可能不会强制您的域没有 https - 您应该检查它可能仍然存在能够使用以前的证书。
就是这样,感谢大家的帮助!
关于docker - Traefik/SSL/LetsEncrypt 故障,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55201034/