Обновление: Успешно настроено второе доменное имя на автономной установке и получен сертификат Let’s Encrypt для обработки как старого, так и нового имен.
Предварительное условие: я ещё не изменил DNS-записи, чтобы перенаправить пользователей на новый сайт; я хотел убедиться, что всё работает заранее. Поэтому я использовал запись localhost на своей тестовой машине. Это означало, что я не мог выполнить обычную проверку Let’s Encrypt и вместо этого должен был использовать метод «DNS» утилиты acme.sh, который обычно не рекомендуется, так как он не поддерживает автоматическое продление. Для меня это приемлемо, поскольку я переключусь в течение 30-дневного срока действия «первичного» (недавно выданного на два имени) сертификата.
- В моём файле
web_only.yml (возможно, у вас app.yml) в секции hooks: и перед плагинами добавил следующее:
after_ssl:
- replace:
filename: "/etc/runit/1.d/letsencrypt"
from: /--keylength/
to: "-d second-domain.com --keylength"
-
В DNS создайте временную/фейковую TXT-запись для _acme-challenge.old.example.org с TTL 5 минут (можно установить и меньше) и дождитесь её распространения, чтобы быстро выполнить проверку с помощью acme.sh (Let’s Encrypt) с использованием ключа подтверждения.
-
Остановите сайт и выполните отладочную (тестовую) проверку, чтобы система узнала о коротком TTL новой записи:
./launcher enter app
sv stop nginx
/usr/sbin/nginx -c /etc/nginx/letsencrypt.conf
LE_WORKING_DIR=/shared/letsencrypt DEBUG=1 /shared/letsencrypt/acme.sh --issue -d new.example.org -d old.example.org -k 4096 -w /var/www/discourse/public --dns --yes-I-know-dns-manual-mode-enough-go-ahead-please --force
- Выполните запрос в реальном режиме без флага отладки. Вы получите предупреждение со значением, которое нужно использовать в DNS для записи, созданной на шаге 2:
LE_WORKING_DIR=/shared/letsencrypt /shared/letsencrypt/acme.sh --issue -d new.example.org -d old.example.org -k 4096 -w /var/www/discourse/public --dns --yes-I-know-dns-manual-mode-enough-go-ahead-please --force
-
Обновите DNS и подождите 5 минут. Да, стоит подождать всё это время, чтобы не столкнуться с ограничениями Let’s Encrypt.
-
Выполните аналогичную команду, но в режиме renew:
LE_WORKING_DIR=/shared/letsencrypt /shared/letsencrypt/acme.sh --issue -d new.example.org -d old.example.org -k 4096 -w /var/www/discourse/public --dns --yes-I-know-dns-manual-mode-enough-go-ahead-please --force --renew
- Вы должны получить подтверждение. Выполните следующие команды для очистки и установки нового сертификата:
LE_WORKING_DIR=/shared/letsencrypt /shared/letsencrypt/acme.sh --installcert -d new.example.org -d old.example.org --fullchainpath /shared/ssl/new.example.org.cer --keypath /shared/ssl/new.example.org.key --reloadcmd "sv reload nginx"
/usr/sbin/nginx -c /etc/nginx/letsencrypt.conf -s stop
exit
- Последний шаг, теперь когда вы вышли из лаунчера:
rm -rf /var/discourse/shared/standalone/ssl
rm -rf /var/discourse/shared/standalone/letsencrypt
./launcher rebuild app
После того как сайт снова заработает, он должен работать с новым сертификатом. Возможно, вам придётся очистить кэш сертификатов в браузере — это оставляем на ваше усмотрение и в помощь вашему любимому поисковику.
Спасибо тем, кто указал мне правильное направление!