Настоящий домен в Docker
Настоящий домен должен указывать на этот сервер,
иначе Let's Encrypt не подтвердит, что сайт ваш.
В правиле роутера стоит
Host(`app.example.com`),
и центр сертификации проверяет именно это имя.
Запись DNS типа A или AAAA
ведёт на публичный адрес машины,
где крутится контейнер прокси.
Снаружи должны отвечать порты 80 и 443
на том же адресе,
иначе HTTP-проверка или HTTPS-страница не сойдутся.
Имя app.localhost
или любое *.localhost
для Let's Encrypt не годится,
даже если локально страница по HTTP открывается.
Полное описание прокси и сайта с тем же хостом в метке:
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
site:
image: nginx
labels:
- traefik.enable=true
- traefik.http.routers.app.rule=Host(`app.example.com`)
- traefik.http.routers.app.entrypoints=websecure
- traefik.http.routers.app.tls.certresolver=le
volumes:
certs:
Фоновый подъём на сервере с реальным именем:
docker compose up -d
После обновления DNS
проверку выполняют с другой сети,
не только с самой машины.
Команда curl -I http://app.example.com
снаружи должна дойти до Traefik на 80,
если резолвер ещё не выпустил сертификат.
Без правильной записи файла меток мало.
Перечислите, что нужно настроить у регистратора для app.example.com и на файрволе хоста, чтобы этот проект мог пройти проверку Let's Encrypt.
Объясните, почему замена app.example.com на app.localhost в правиле не даст рабочий публичный сертификат.