Статические сертификаты Traefix v1.7 и динамические сертификаты acme

Я использую traefik:1.7.6-alpine в докере в режиме роя. Мне нужно указать статические 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

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

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

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

1 ответ

Решение

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

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

touch acme.json
echo '{}'> acme.json
chmod 600 acme.json
Другие вопросы по тегам