Traefix v1.7 stati c сертификаты и динамические c сертификаты acme - PullRequest
0 голосов
/ 18 июня 2020

Я использую traefik: 1.7.6-alpine в docker в режиме роя. Мне нужно указать stati c ssl-сертификаты и другие самоуправляемые сертификаты acme.

Это ошибка, которую я получаю при поднятии контейнера:

time="2020-06-18T02:45:52Z" level=info msg="\nStats collection is disabled.\nHelp us improve Traefik by turning this feature on :)\nMore details on: https://docs.traefik.io/basics/#collected-data\n"
time="2020-06-18T02:45:52Z" level=error msg="Failed to read new account, ACME data conversion is not available : unexpected end of JSON input"
time="2020-06-18T02:45:52Z" level=error msg="Unable to add ACME provider to the providers list: unable to get ACME account : unexpected end of JSON input"
time="2020-06-18T02:45:52Z" level=info msg="Preparing server https &{Address::443 TLS:0xc000288630 Redirect:<nil> Auth:<nil> WhitelistSourceRange:[] WhiteList:<nil> Compress:false ProxyProtocol:<nil> ForwardedHeaders:0xc0006a45c0} with readTimeout=0s writeTimeout=0s idleTimeout=3m0s"
time="2020-06-18T02:45:52Z" level=info msg="Preparing server traefik &{Address::8080 TLS:<nil> Redirect:<nil> Auth:<nil> WhitelistSourceRange:[] WhiteList:<nil> Compress:false ProxyProtocol:<nil> ForwardedHeaders:0xc0006a4560} with readTimeout=0s writeTimeout=0s idleTimeout=3m0s"
time="2020-06-18T02:45:52Z" level=info msg="Starting server on :443"
time="2020-06-18T02:45:52Z" level=info msg="Preparing server http &{Address::80 TLS:<nil> Redirect:<nil> Auth:<nil> WhitelistSourceRange:[] WhiteList:<nil> Compress:false ProxyProtocol:<nil> ForwardedHeaders:0xc0006a4580} with readTimeout=0s writeTimeout=0s idleTimeout=3m0s"
time="2020-06-18T02:45:52Z" level=info msg="Starting provider configuration.ProviderAggregator {}"
time="2020-06-18T02:45:52Z" level=info msg="Starting server on :8080"
time="2020-06-18T02:45:52Z" level=info msg="Starting provider *docker.Provider {\"Watch\":true,\"Filename\":\"\",\"Constraints\":null,\"Trace\":false,\"TemplateVersion\":2,\"DebugLogGeneratedTemplate\":false,\"Endpoint\":\"unix:///var/run/docker.sock\",\"Domain\":\"arkaangel.com\",\"TLS\":null,\"ExposedByDefault\":false,\"UseBindPortIP\":false,\"SwarmMode\":false,\"Network\":\"\",\"SwarmModeRefreshSeconds\":15}"
time="2020-06-18T02:45:52Z" level=info msg="Starting server on :80"

Это мой traefik.toml

debug = true
logLevel = "INFO"
defaultEntryPoints = ["http", "https"]
[entryPoints]
    [entryPoints.http]
        address = ":80"
    [entryPoints.https]
        address = ":443"
        [entryPoints.https.tls]
            [[entryPoints.https.tls.certificates]]
                certFile = "/path/to/first/first.crt"
                keyFile = "/path/to/first/first.key"
            [[entryPoints.https.tls.certificates]]
                certFile = "/path/to/second/second.crt"
                keyFile =  "/path/to/second/second.key"
[api]
  dashboard = true
  [api.statistics]
    recentErrors = 10
[docker]
  exposedbydefault = false
  watch = true
  domain = "mydomain.com"

[acme]
email = "myemail@gmail.com"
storage = "/etc/traefik/acme/acme.json"
entryPoint = "https"
acmeLogging = true
onHostRule = true
    [acme.httpChallenge]
       entryPoint = "http"
    [[acme.domains]]
       main = "third-site.com"

Вот как я монтирую acme. json файл в docker -compose, чтобы сохранить сгенерированные сертификаты:

volumes:
./traefik/acme/acme.json:/etc/traefik/acme/acme.json

the acme. json файл имеет 600 разрешения и владельца root: root.

В дополнение к показанной конфигурации, вещи, которые я пробовал без возможности создания сертификата:

  1. не сопоставить файл acme. json, а родительскую папку, чтобы traefik создал acme. json файл (сбой)
  2. не отображать том для acme. json, так что он теряется при удалении контейнера. (не удалось)
  3. сменил владельца на файл acme. json на myuser: myuser , поэтому из контейнера пользователь 1000 отображается как владелец (сбой)

1 Ответ

0 голосов
/ 20 июня 2020

Способ, которым я смог решить ошибку: «Не удалось прочитать новую учетную запись, преобразование данных ACME недоступно: неожиданный конец JSON ввод» , запись внутри файла acme. json {}, по-видимому, при попытке прочитать пустой файл и разобрать его до json он выдал ошибку.

Резюме: при создании acme. json на хосте, который нужно сопоставить, тогда вам нужно сделать:

touch acme.json
echo '{}'> acme.json
chmod 600 acme.json
...