docker - Traeffic、Docker 和 Let's Encrypt
问题描述
我的网站最终上线之前的最后阶段 --> SSL。
我正在使用 Jekyll 站点,使用 Traefic 作为反向代理,使用 Docker 来防止“它在我的机器上运行”,并使用 Let's Encrypt for SSL。看看文档,这应该是在公园里散步,但是(就像软件开发中的一切一样)它看起来更难。
我当前的 Traefic 配置:
[entryPoints]
[entryPoints.http]
address = ":80"
[entryPoints.http.redirect]
entryPoint = "https"
permanent = true
[entryPoints.https]
address = ":443"
[entryPoints.https.tls]
[docker]
endpoint = "unix:///var/run/docker.sock"
domain = "johanvergeer.com"
watch = true
exposedByDefault = true
usebindportip = true
swarmMode = true
[acme]
email = "johanvergeer@gmail.com"
storage = "acme.json"
entryPoint = "https"
acmeLogging = true
caServer = "https://acme-staging-v02.api.letsencrypt.org/directory"
[[acme.domains]]
main = "johanvergeer.com"
[acme.httpChallenge]
entryPoint = "http"
provider = "digitalocean"
和 docker-compose 文件
version: "3.6"
services:
site:
ports:
- 4000:4000
image: registry.gitlab.com/johanvergeer/redgyro/site:latest
deploy:
labels:
- traefik.site.port=4000
- traefik.enable=true
- traefik.frontend.rule=Host:johanvergeer.com
- traefik.frontend.entryPoints=http,https
- traefik.docker.network=traefik-net
- traefik.backend.loadbalancer.method=drr
networks:
- traefik-net
reverse-proxy:
image: traefik # The official Traefik docker image
ports:
- "80:80" # The HTTP port
- "8080:8080" # The Web UI (enabled by --api)
- "443:443"
volumes:
- /var/run/docker.sock:/var/run/docker.sock # So that Traefik can listen to the Docker events
- $PWD/traefik.toml:/etc/traefik/traefik.toml
- $PWD/acme.json:/etc/traefik/acme.json
deploy:
labels:
- traefik.site.port=80
- traefik.logLevel=DEBUG
- traefik.docker.network=traefik-net
- traefik.backend.loadbalancer.method=drr
placement:
constraints:
- node.role == manager
update_config:
parallelism: 1
delay: 10s
restart_policy:
condition: on-failure
networks:
- traefik-net
networks:
traefik-net:
name: traefik-net
目前我什至没有收到 Traefic 日志中的任何内容,而它是在 DEBUG 上设置的。
浏览器显示错误Your connection is not private
并且NET::ERR_CERT_AUTHORITY_INVALID
.
有谁知道如何解决这个问题?
解决方案
httpChallenge
不接受provider
参数。您可以尝试删除它。
如果这不起作用并且您在 DigitalOcean 上运行,请尝试使用 adnsChallenge
而不是httpChallenge
. 为此,请修改您traefik.toml
的:
[acme.httpChallenge]
entryPoint = "http"
provider = "digitalocean"
对此:
[acme.dnsChallenge]
provider = "digitalocean"
delayBeforeCheck = 0
并传入此处指定DO_AUTH_TOKEN
的环境变量。如果您预计以后添加子域,则可以使用通配符域进行 DNS 挑战。
还可以考虑caServer
从您的配置中删除,以便您默认为生产环境,以防您达到Let's Encrypto Rate Limit进行暂存。
如果您还没有,也可以尝试在Let's Encrypt 社区支持论坛上寻求帮助。
推荐阅读
- ssis - SSIS:项目文件中缺少包
- android - 在 Light 主题上使用 Night 资源
- excel - Excel公式,根据日期和类型否定记录并检索唯一行
- python - 过滤 df 到一个简单的电子表格
- flutter - 在 Flutter 中的 initState 之后立即调用 didUpdateWidget
- python - 从 span 标签中提取 href
- javascript - 删除后烧瓶返回重定向不起作用
- database - 我想平均一个过滤范围
- php - 为什么我在新的 laravel 安装上安装 argon 时收到错误消息?
- java - 我将如何检索我的演员子类的坐标以便在该位置放置一个新演员?