Резолвер сертификатов в Docker
Резолвер сертификатов просит сертификат
у Let's Encrypt и кладёт его в файл на диске.
Имя резолвера le
задают цепочкой флагов
--certificatesresolvers.le.acme.email,
--certificatesresolvers.le.acme.storage
и --certificatesresolvers.le.acme.httpchallenge.entrypoint.
Почта в примере -
admin@example.com,
файл на диске -
/letsencrypt/acme.json.
HTTP-проверка домена идёт через точку web
на порту 80,
поэтому этот порт должен быть открыт с интернета.
На localhost и у имён *.localhost
Let's Encrypt сертификат не выдаст.
Том certs
монтируют в /letsencrypt
у прокси вместе с сокетом Docker:
services:
proxy:
image: traefik:3
command:
- --providers.docker=true
- --providers.docker.exposedbydefault=false
- --entrypoints.web.address=:80
- --entrypoints.websecure.address=:443
- --certificatesresolvers.le.acme.email=admin@example.com
- --certificatesresolvers.le.acme.storage=/letsencrypt/acme.json
- --certificatesresolvers.le.acme.httpchallenge.entrypoint=web
ports:
- "80:80"
- "443:443"
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- certs:/letsencrypt
volumes:
certs:
Фоновый запуск:
docker compose up -d
Резолвер готов принимать заказы на сертификат,
когда маршрут назовёт его в метке TLS.
Без настоящего домена и доступного 80
файл acme.json
может остаться пустым или без записи для хоста.
Сайт с метками в этом уроке не подключают.
Опишите прокси tls-gate с резолвером le, почтой admin@example.com и томом le-data вместо certs.
Объясните, почему при проверке через HTTP-порт домен на localhost не получит сертификат Let's Encrypt.