Идея работы certboot проста
1) По определенному URL (/.well-known) certbot размещает данные (файл)
2) После чего обращается к серверу LetsEncrypt
3) Сервер LetsEncrypt опрашивает сайт, на котором размещен certbot с разных адресов и тем самым убеждается, что сервер тот, за кого себя выдает.
4) LetsEncrypt отдает сертификат/ключ certbot`у
Как сделать:
1) Использовать certbot в режиме webroot (не nginx)
2) В nginx прописать ./well-known чтобы указывал туда, куда certbot положит файл, который проверит LetsEncrypt
3) В nginx указать брать сертификат/ключ оттуда, куда его положит certboot
Пути к файлам для пунктов 2) и 3) - нужно указывается в параметрах certbot.
То есть куда кладет файлы certbot - оттуда берет и nginx
Сертификат LetsEncrypt действует 90 дней, поэтому нужно его обновлять (разумеется, чаще чем раз в 3 месяца)
Certbot запоминает свои настройки и обновлять чтобы не обязательно все параметры со всеми путями задавать.
И, разумеется, nginx должен быть доступен снаружи и именно по тому самуму url "/.well-known"
Готовое решение
https://github.com/diresi/docker-nginx-certbot