traefik이 https로 리디렉션되지 않습니다.

traefik이 https로 리디렉션되지 않습니다.

docker, letsencrypt 및 traefik을 사용하여 홈 자동화 서버를 설정하려고 합니다. 또한 ddns에는 duckdns를 사용합니다. 동일한 시스템에 sickrage 등과 같은 다른 컨테이너가 있습니다.

라우터의 포트 80 및 443을 열어 우분투 18.04 서버로 전달했습니다. http에서 sickrage.myserver.duckdns.org에 연결하려고 하면 다음 오류가 발생합니다.

**Your connection is not private**
Attackers might be trying to steal your information from sabnzbd.myserver.duckdns.org 
NET::ERR_CERT_AUTHORITY_INVALID

내 traefik.toml 파일은 다음과 같습니다.

    logLevel = "WARN" #DEBUG, INFO, WARN, ERROR, FATAL, PANIC
defaultEntryPoints = ["http", "https"]

# WEB interface of Traefik - it will show web page with overview of frontend and backend configurations 
[api]
  entryPoint = "traefik"
  dashboard = true
  address = ":8080"

# Force HTTPS
[entryPoints]
  [entryPoints.http]
  address = ":80"
    [entryPoints.http.redirect]
     entryPoint = "https"
  [entryPoints.https]
  address = ":443"
    [entryPoints.https.tls]

[retry]


[file]
  watch = true
  filename = "${USERDIR}/docker/traefik/rules.toml"

# Let's encrypt configura
[acme]
caServer = "https://acme-v02.api.letsencrypt.org/directory"
email = "[email protected]"     #any email id will work
storage="${USERDIR}/docker/traefik/acme/acme.json"
entryPoint = "https"
acmeLogging=true 
onDemand = false #create certificate when container is created
onHostRule = true
  # Use a HTTP-01 acme challenge rather than TLS-SNI-01 challenge
  # uncomment 2 lines for subdirs
#[acme.httpChallenge]
[acme.dnsChallenge]
provider = "duckdns"
entryPoint = "https"
  # uncomment follwoing for suubsomains
#[[acme.domains]]
  #main = "myserver.duckdns.org"
#[[acme.domains]]
  #main = "*.myserver.duckdns.org"
#[acme.dnsChallenge]
  #provider = "duckdns"
  #delayBeforeCheck = 0

# Connection to docker host system (docker.sock)
[docker]
endpoint = "unix:///var/run/docker.sock"
domain = "myserver.duckdns.org"
watch = true
# This will hide all docker containers that don't have explicitly  
# set label to "enable"
exposedbydefault = false

그리고 내 docker-compose 파일의 일부:

    ---
version: "3.6"
services:
  #############################################   Frontends               ############################
  #############################################   Traefik - Reverse proxy  ###########################
  traefik:
    hostname: traefik
    image: traefik:latest
    container_name: traefik
    restart: always
    domainname: ${DOMAINNAME} 
    command: --api --docker --docker.domain=${DOMAINNAME} --docker.watch --loglevel=DEBUG
    #command: --api --docker --docker.domain=docker.localhost --docker.watch --loglevel=DEBUG
    networks:
      - default
      - traefik_proxy
    depends_on:
      - duckdns
    environment:
      - TOKEN=${DUCKDNS_TOKEN}
    ports:
      - "80:80"
      - "443:443"
      - "8008:8080"
    labels:
      - "traefik.enable=true"
      - "traefik.backend=traefik"
      - "traefik.port=8080"
      - "traefik.protocol=http"
        #- "traefik.frontend.auth.basic=patrick:$$2y$$05$$a8dtYfcMqH.kUFq3zZPGqe9kq7Tyok7.3/mKdMa1NaCuSwAZ0InOq"
        #- "traefik.frontend.rule=Host:${DOMAINNAME}; PathPrefixStrip: /traefik"
      - "traefik.frontend.rule=Host:traefik.${DOMAINNAME}"  
      - "traefik.docker.network=traefik_proxy"
      - "traefik.frontend.entryPoints=https"
      - "traefik.frontend.headers.SSLRedirect=true"
      - "traefik.frontend.headers.STSSeconds=315360000"
      - "traefik.frontend.headers.browserXSSFilter=true"
      - "traefik.frontend.headers.contentTypeNosniff=true"
      - "traefik.frontend.headers.forceSTSHeader=true"
      - "traefik.frontend.headers.SSLHost=dellubuntu.duckdns.org"
      - "traefik.frontend.headers.STSIncludeSubdomains=false"
      - "traefik.frontend.headers.STSPreload=true"
      - "traefik.frontend.headers.frameDeny=true"
        #- "traefik.frontend.auth.basic.users=${HTTP_USERNAME}:${HTTP_PASSWORD}"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - ${USERDIR}/docker/traefik/acme/acme.json:/acme.json
      - ${USERDIR}/docker/traefik/traefik.toml:/traefik.toml
      - ${USERDIR}/docker/letsencrypt/config/etc/letsencrypt:/le-ssl
      - ${USERDIR}/docker/traefik:/etc/traefik
      - ${USERDIR}/docker/shared:/shared
  #Letsencrypt                                                    ------------------------ Letsencrypt
  letsencrypt:
    image:  linuxserver/letsencrypt
    container_name: le
    #ports:
      #- "447:443"
    networks:
      - default
      - traefik_proxy
    volumes:
      - ${USERDIR}/docker/letsencrypt/config:/config
    restart: always
    depends_on:
      - portainer
      - heimdall
      - organizr2
      - lazylibrarian
      - plex
      - tautulli
      - headphones
        #- lidarr
      - couchpotato
        #- radarr
      - sickrage
        #- sonarr
        #- airsonic
      - glances
      - ghost
      - transmission-vpn
      - sabnzbd
      - huginn
      - netdata
        #- nextcloud
        #- hydra2
        #- nzbget
        #- jackett
        ##- duplicati
        ##- bazarr
        ##- homeassistant
        ##- filebrowser
        ##- ombi
        ##- elkarbackup
    environment:
      - PUID=${PUID}
      - PGID=${PGID}
      - TZ=${TZ}
      - URL=${DOMAINNAME}
      - EMAIL=${EMAIL}
      - SUBDOMAINS=wildcard
      - VALIDATION=duckdns
      - DUCKDNSTOKEN=${DUCKDNS_TOKEN}
      - ONLY_SUBDOMAINS=false
      - DHLEVEL=4096

내가 따르려고 시도한 예제에는 letsencrypt 컨테이너가 포함되어 있지 않습니다. 제거해야 하나요? 그렇다면 letsencrypt는 중지되고 시작된 컨테이너를 어떻게 추적합니까? 이것을 실행하는 다른 방법이 있습니까?

답변1

Traefik에는 letsencrypt 통합이 포함되어 있으므로 별도의 letsencrypt 컨테이너가 필요하지 않습니다.

Traefik은 또한 기본적으로 TLS 연결을 종료하여 Docker 내부 네트워킹을 통해 HTTP로 애플리케이션에 요청을 전달합니다. 인터넷을 통한 연결은 여전히 ​​안전하지만 연결하려는 애플리케이션은 이를 알지 못합니다. 서비스에 지정하여 연결을 다시 암호화할 수 있지만 traefik.protocol=httpsTraefik이 신뢰하도록 구성해야 하는 자체 TLS 인증서를 애플리케이션에서 유지해야 합니다. 이는 LetsEncrypt에서 제공되지 않기 때문입니다.

관련 정보