Сертификат LetsEncrypt не обновляется

Всем привет. Мой сертификат LetsEncrypt истёк недавно, 4-го числа, и все попытки его продления завершились неудачей. Я прочитал довольно много постов здесь от людей с похожими проблемами, но ни одно из предложенных решений (пересборка контейнера, выполнение команд ручного продления и т.д.) не сработало для меня.

Следуя разделу устранения неполадок в руководстве, я обнаружил ошибку в логах (./launcher logs app):

[Fri Dec  6 05:30:05 PM UTC 2024] Using CA: https://acme-v02.api.letsencrypt.org/directory
[Fri Dec  6 05:30:05 PM UTC 2024] Multi domain='DNS:discourse.[DOMAIN1].org,DNS:discourse.[DOMAIN1].org,DNS:[DOMAIN2].org'
[Fri Dec  6 05:30:05 PM UTC 2024] Getting domain auth token for each domain
[Fri Dec  6 05:30:07 PM UTC 2024] Getting webroot for domain='discourse.[DOMAIN1].org'
[Fri Dec  6 05:30:08 PM UTC 2024] Getting webroot for domain='discourse.[DOMAIN1].org'
[Fri Dec  6 05:30:08 PM UTC 2024] Getting webroot for domain='[DOMAIN2].org'
[Fri Dec  6 05:30:08 PM UTC 2024] Verifying: discourse.[DOMAIN1].org
[Fri Dec  6 05:30:08 PM UTC 2024] Pending, The CA is processing your order, please just wait. (1/30)
[Fri Dec  6 05:30:12 PM UTC 2024] Pending, The CA is processing your order, please just wait. (2/30)
[Fri Dec  6 05:30:15 PM UTC 2024] Pending, The CA is processing your order, please just wait. (3/30)
[Fri Dec  6 05:30:19 PM UTC 2024] Pending, The CA is processing your order, please just wait. (4/30)
[Fri Dec  6 05:30:22 PM UTC 2024] Success
[Fri Dec  6 05:30:22 PM UTC 2024] Verifying: discourse.[DOMAIN1].org
[Fri Dec  6 05:30:23 PM UTC 2024] Success
[Fri Dec  6 05:30:23 PM UTC 2024] Verifying: [DOMAIN2].org
[Fri Dec  6 05:30:23 PM UTC 2024] Pending, The CA is processing your order, please just wait. (1/30)
[Fri Dec  6 05:30:27 PM UTC 2024] [DOMAIN2].org:Verify error:198.49.23.145: Invalid response from http://[DOMAIN2].org/.well-known/acme-challenge/ohJAvgwBR81O8qmzsMPx-ZnmxoKOPAfuGCz0VZJeFWk: 404
[Fri Dec  6 05:30:27 PM UTC 2024] Please check log file for more details: /shared/letsencrypt/acme.sh.log
CN = discourse.[DOMAIN1].org
error 10 at 0 depth lookup: certificate has expired
error fullchain.cer: verification failed

Во-первых, почему здесь отображаются два домена? Мне нужен сертификат только для DOMAIN1 — домена, на котором размещён наш экземпляр Discourse. DOMAIN2 — это наш SMTP-релей, и у него уже есть сертификат.

Во-вторых, упомянутый файл журнала LetsEncrypt (/shared/letsencrypt/acme.sh.log) не существует, или, по крайней мере, я не могу найти его по указанному пути.

Самое главное: есть ли способ заставить скрипт перестать проверять DOMAIN2 и успешно продлить сертификат только для DOMAIN1?

Это стандартная установка? У вас есть обратный прокси-сервер?

Мы работаем на Droplet от Digital Ocean, установленном с помощью их скрипта, но, похоже, это всё ещё стандартная установка, которую вы считаете таковой. DNS управляется через Cloudflare, но оранжевое облако отключено. Обратного прокси, насколько мне известно, нет.

Этот IP-адрес не принадлежит Discourse. Неисправен ли ваш DNS? Есть ли у вас несколько записей A?

Какое у вас имя хоста?

Верно. Этот IP-адрес принадлежит [DOMAIN2] — другому домену, который нам принадлежит и не имеет никакого отношения к Discourse. Это возвращает меня к моему первоначальному вопросу: почему этот домен и IP-адрес вообще появляются в логах?

DNS работает корректно. Я всё ещё могу получить доступ к сайту, если проигнорирую предупреждение браузера о истёкшем сертификате. Наш другой сайт, не связанный с Discourse, также работает без проблем. Наш хостнейм (тот, что относится к Discourse, а не к другому домену) — discourse.gomomentum.org.

Это был непростой случай! Мне просто не удавалось найти причину, по которой Let’s Encrypt обращался не к тому хосту. Оказалось, что дело не всегда в DNS.

Коротко: вы попросили Let’s Encrypt получить сертификаты не только для домена Discourse, но и для вашего основного домена, а позже изменили DNS-записи основного домена так, чтобы они указывали на другой сайт.

А теперь подробнее . . .

Однажды вы захотели, чтобы Discourse обрабатывал запросы не только для discourse.gomomentum.org, но и для gomomentum.org, поэтому добавили соответствующий блок в файл app.yml, как описано здесь: Set up Let’s Encrypt with multiple domains / redirects

Таким образом, запросы Let’s Encrypt проверяли, что оба этих домена изначально указывали на ваш сервер Discourse.

Это объясняет, почему запросы для ДРУГОГО ДОМЕНА направлялись в Let’s Encrypt.

Затем, возможно, спустя годы, но в любом случае в последние три месяца, кто-то решил, что gomomentum.org должен вести на ваш основной сайт, а не на сайт Discourse. В этот момент Let’s Encrypt перестал работать, но сертификаты действуют три месяца, поэтому к моменту возникновения проблемы было практически невозможно связать изменение DNS с неудачным обновлением сертификата.

Я удалил этот блок из вашего файла app.yml, выполнил пересборку, и всё снова работает!

:man_facepalming: Действительно, я вспомнил: несколько месяцев назад, когда у меня были проблемы с почтой, я много возился с настройками домена. Похоже, это непреднамеренный побочный эффект всех моих догадок того времени. Спасибо, Джей!