切换到 HTTPS 时,Traefik 网关错误

问题描述 投票:0回答:2

我正在使用 Traefik 为容器中的 fastapi 应用程序获取 SSL 证书。启动容器后,我发现我的 SSL 证书很好,但我的网站会抛出“Bad Gateway”错误。

下面是我的 docker-compose 的相关部分,一个在 docker-compose 内部构建的 Dockerfile.traefik,以及一个在其中使用的 traefik.prod.toml。

对于 api 入口点,我使用 python 模块 toncinta-api (您可以将其视为我的 docker-compose 中服务 api 的入口点),其中包含命令 uvicorn.run("api:app", host ='0.0.0.0')

Docker 撰写:

.
.
  api:
    image: toncinta/toncinta-python:chime
    container_name: toncinta-api-default
    #ports:
    #  - "80:80"
    expose:
      - 80
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.fastapi.rule=Host(`toncinta-api.com`)"
      - "traefik.http.routers.fastapi.tls=true"
      - "traefik.http.routers.fastapi.tls.certresolver=letsencrypt"
    stdin_open: true
    tty: true
    entrypoint: toncinta-api
    
  traefik:  # new
    build:
      context: .
      dockerfile: Dockerfile.traefik
    ports:
      - 80:80
      - 443:443
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock:ro"
      - "./traefik-public-certificates:/certificates"
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.dashboard.rule=Host(`dashboard.toncinta-api.com`) && (PathPrefix(`/`)"
      - "traefik.http.routers.dashboard.tls=true"
      - "traefik.http.routers.dashboard.tls.certresolver=letsencrypt"
      - "traefik.http.routers.dashboard.service=api@internal"

Dockerfile.traefik

# Dockerfile.traefik

FROM traefik:v2.9.6

COPY ./traefik.prod.toml ./etc/traefik/traefik.toml

traefik.prod.toml

# traefik.prod.toml

[entryPoints]
  [entryPoints.web]
    address = ":80"
  [entryPoints.web.http]
    [entryPoints.web.http.redirections]
      [entryPoints.web.http.redirections.entryPoint]
        to = "websecure"
        scheme = "https"

  [entryPoints.websecure]
    address = ":443"

[accessLog]

[api]
dashboard = true

[providers]
  [providers.docker]
    exposedByDefault = false

[certificatesResolvers.letsencrypt.acme]
  email = "[email protected]"
  storage = "/certificates/acme.json"
  [certificatesResolvers.letsencrypt.acme.httpChallenge]
    entryPoint = "web"

我怀疑这可能与我为 uvicorn 服务器和 traefik 公开/使用的端口有关。我关注了一些相关的 stackoverflow 讨论,但找不到修复方法。

docker-compose dockerfile fastapi traefik
2个回答
0
投票

正如 didforaiur 指出的,我设法通过向命令中添加端口来解决这个问题,如下所示:

uvicorn.run("api:app", host='0.0.0.0', port=5000)
,并在 docker-compose 中将其显式公开为我的 Web 服务的服务定义中的端口。

但现在我的问题是,只有

toncinta-api.com
获得 HTTPS,浏览器将
www.toncinta-api.com
视为不安全。这与 traefik 配置证书的方式有关吗?再次,我的 docker-compose 中仍然需要更改一些内容?


0
投票

根据社区的评论单独回答

bot
。 这些行位于我的服务网络的标记标签下 docker-compose 帮助我在 www.toncinta.com

上使用 https
.
.
"traefik.http.routers.fastapi2.rule=Host(www.toncinta-api.com)" - 
"traefik.http.routers.fastapi2.tls=true" - 
"traefik.http.routers.fastapi2.tls.certresolver=letsencrypt"
© www.soinside.com 2019 - 2024. All rights reserved.