Привет, @pfaffman, в правке оригинального сообщения в строке to: есть ошибочный символ +, который ломает регулярное выражение. Его нужно удалить.
Отдельно необходимо отредактировать следующий абзац, так как он больше не имеет смысла:
Существует два шаблона, которые нужно заменить: один заканчивается на --keylength, а другой — на --fullchainpath (в самом файле ваш исходный домен стоит перед каждым из этих переключателей). Введите ваш (под)домен (и любые дополнительные поддомены, предваренные -d ), а затем добавьте следующее в секцию hooks: вашего файла app.yml (ближе к концу файла):
Предлагаю следующее:
Используйте domain1 и domain2 в этом сообщении для генерации необходимого вам кода. domain1 — это ваш исходный домен, а domain2 — дополнительный домен, который вы хотите добавить. Добавьте полученный блок after_ssl: в секцию hooks: вашего файла app.yml и выполните команду launcher rebuild app.
Это изменение в том, как Discourse работает с Let’s Encrypt, или изменение в самом Let’s Encrypt?
У меня есть сервер, который в данный момент испытывает проблемы из-за этой ситуации. На данный момент моим решением является закомментировать эту часть app.yml, но я считаю, что нам нужен способ добавлять дополнительные сертификаты в настройку в будущем.
Discourse перенес это в другой файл. Сейчас над этим работают. Я постараюсь посмотреть в ближайшие дни, что потребуется для поддержки нескольких поддоменов.
Errno::ENOENT: Нет такого файла или каталога @ rb_sysopen - /usr/local/bin/letsencrypt
Место сбоя: /usr/local/lib/ruby/gems/3.3.0/gems/pups-1.3.0/lib/pups/replace_command.rb:11:in `read’
Замена не удалась с параметрами {“filename”=>“/usr/local/bin/letsencrypt”, “from”=>“/-d spokes.nz/”, “to”=>“-d spokes.nz -d www.spokes.nz”}
Загрузка не удалась с кодом выхода 1
** ЗАГРУЗКА НЕ УДАЛАСЬ ** пожалуйста, прокрутите вверх и поищите более ранние сообщения об ошибках, их может быть больше одной.
Это лишь предположение, но не исключено, что ошибка, с которой вы столкнулись, связана с отсутствием пробела перед завершающим слэшем и закрывающей кавычкой в соответствующих строках предложенного блока в вашем файле app.yml?
Исходя из сообщения об ошибке, я предполагаю, что ваши строки выглядят (дословно) так:
from: /-d spokes.nz/
to: "-d spokes.nz -d www.spokes.nz"
Я делаю такой вывод, потому что в моём случае строки выглядят так:
from: /-d nzarchitecture.net.nz /
to: "-d nzarchitecture.net.nz -d www.nzarchitecture.net.nz "
И благодаря наличию пробелов непосредственно перед концом каждой строки, как показано выше, я теперь могу пересобрать Discourse без возникновения этой ошибки. (Если присмотреться, вы увидите, что в обновлённом блоке от @pfaffman, опубликованном в начале этой темы, эти дополнительные пробелы были указаны).
У меня также вообще нет файлов в директории usr/local/bin/ (как отмечено в вашем сообщении об ошибке), что заставило меня заподозрить, что отсутствие файла letsencrypt не является причиной ошибки.
Тем не менее, для меня, хотя Discourse работает нормально по адресу nzarchitecture.net.nz, к сожалению, при вводе www.nzarchitecture.net.nz в браузере всё ещё возникает ошибка сертификата — связано ли это с отсутствием этого файла, я не знаю.
Просто отмечу, что я сейчас пытаюсь внедрить это в переменные окружения для обработки напрямую в discourse_docker, например, в виде списка псевдонимов хостов, разделенных запятыми. Это кажется достаточно распространенным случаем, чтобы обрабатывать его напрямую.
Это упростит конфигурацию для данного случая, так что никому не придется вносить изменения в свои app.yml.
Мой текущий план: при DISCOURSE_HOSTNAME: www.domain.com
Добавить возможность использования переменных окружения, например: DISCOURSE_HOSTNAME_ALIASES: domain.com,other.domain.com — это позволит получить сертификат, действительный для всех хостов.
(Кстати, пока я этим занимаюсь, автоматические обновления сертификатов Let’s Encrypt тоже, похоже, работают некорректно, так что я исправляю и их тоже)
Я упустил это! Сделал, как вы предложили, но ошибка при запуске всё ещё сохраняется:
FAILED
Errno::ENOENT: No such file or directory @ rb_sysopen - /usr/local/bin/letsencrypt
Location of failure: /usr/local/lib/ruby/gems/3.3.0/gems/pups-1.3.0/lib/pups/replace_command.rb:11:in `read’
replace failed with the params {“filename”=>“/usr/local/bin/letsencrypt”, “from”=>“/-d spokes.nz /”, “to”=>"-d spokes.nz -d www.spokes.nz "}
bootstrap failed with exit code 1
** FAILED TO BOOTSTRAP ** please scroll up and look for earlier error messages, there may be more than one.
Вероятно, это не основная проблема, но в процессе моих попыток я также обновил версию Docker на Digital Ocean с 20.0.4 (кажется) до 28.3.3 — возможно, это помогло, по крайней мере, с этой ошибкой. В любом случае, это устранило предупреждения о «устаревших» функциях Docker, которые появлялись в начале процесса пересборки.
Всем привет, небольшая информация: поддержка нескольких доменов теперь объединена. В последней версии discourse_docker вы можете включить шаблоны ssl и letsencrypt и задать переменные окружения вида DISCOURSE_HOSTNAME_ALIASES: domain.com,other.domain.com, чтобы настроить альтернативные имена хостов.
Ваш сайт также будет автоматически подтягивать настроенные имена хостов при запросе сертификата без дополнительных изменений в конфигурации.
Укажите только дополнительные домены, по которым пользователи смогут переходить и которые будут перенаправляться на фактическое имя хоста вашего сайта.
Ещё лучше было бы, если бы Discourse каким-то умным способом сам записывал алиасы, указанные администратором, в файл app.yml при следующем обновлении, или оставлял эту информацию в месте, откуда инструкция app.yml могла бы её прочитать.