«Внутренняя ошибка сервера» при развертывании приложения с помощью Traefik и LetsEncrypt - PullRequest
0 голосов
/ 17 апреля 2020

Я новичок в SSL-сертификатах с Traefik, и у меня возникли реальные проблемы с успешным развертыванием.

У меня есть сервер и домен, на которых я без проблем развернул свое приложение, используя Traefik и Http. Теперь я хотел бы развернуть то же приложение, работающее на порту 9000, для развертывания в Https с использованием LetsEncrypt, следуя Traefik docs . Я могу проверить, что сертификат был правильно создан с помощью проверки SSL, однако, когда я пытаюсь посетить сайт, я получаю Internal Server Error. В журналах docker нет сообщений об ошибках, и я не могу понять, что делать дальше.

docker -compose.yml

version: '2'

services:
  traefik:
    image: traefik:v1.7
    restart: always
    ports:
      - 80:80
      - 443:443
    networks:
      - web
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - /opt/traefik/traefik.toml:/traefik.toml
      - /opt/traefik/acme.json:/acme.json
    container_name: traefik

  app:
    image: myapp_image
    container_name: app
    restart: always
    networks:
      - web
    ports:
      - "9000:9000"
    labels:
      - "traefik.docker.network=web"
      - "traefik.enable=true"
      - "traefik.basic.frontend.rule=Host:myapp.com"
      - "traefik.basic.port=9000"
      - "traefik.basic.protocol=http"
      - "traefik.admin.frontend.rule=Host:myapp.com"
      - "traefik.admin.protocol=https"
      - "traefik.admin.port=9000"

networks:
  web:
    external: true

traefik.toml

debug = false

logLevel = "ERROR"
defaultEntryPoints = ["https","http"]

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

[retry]

[docker]
endpoint = "unix:///var/run/docker.sock"
domain = "myapp.com"
watch = true
exposedByDefault = false

[acme]
email = "myemail@email.com"
storage = "acme.json"
entryPoint = "https"
onHostRule = true
[acme.httpChallenge]
entryPoint = "http"

1 Ответ

0 голосов
/ 20 апреля 2020

Наконец-то удалось найти работоспособное решение для этого. Возможно, я только что использовал старую информацию, но лучшая ссылка для размещения приложения с Traefik на Https с использованием LetsEncrypt была найдена здесь .

Рабочий пример Yaml приведен ниже. Использование этого примера также устранит необходимость в файле Toml!

version: "3.3"

services:

  traefik:
    image: "traefik:v2.2"
    container_name: "traefik"
    command:
      #- "--log.level=DEBUG"
      - "--api.insecure=true"
      - "--providers.docker=true"
      - "--providers.docker.exposedbydefault=false"
      - "--entrypoints.websecure.address=:443"
      - "--certificatesresolvers.myresolver.acme.tlschallenge=true"
      #- "--certificatesresolvers.myresolver.acme.caserver=https://acme-staging-v02.api.letsencrypt.org/directory"
      - "--certificatesresolvers.myresolver.acme.email=postmaster@example.com"
      - "--certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json"
    ports:
      - "443:443"
      - "8080:8080"
    volumes:
      - "./letsencrypt:/letsencrypt"
      - "/var/run/docker.sock:/var/run/docker.sock:ro"

  whoami:
    image: "containous/whoami"
    container_name: "simple-service"
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.whoami.rule=Host(`whoami.example.com`)"
      - "traefik.http.routers.whoami.entrypoints=websecure"
      - "traefik.http.routers.whoami.tls.certresolver=myresolver"
...